while (rd_point != wr_point) {
                struct hisi_sas_complete_v3_hdr *complete_hdr;
+               struct device *dev = hisi_hba->dev;
                int iptt;
 
                complete_hdr = &complete_queue[rd_point];
 
                iptt = (complete_hdr->dw1) & CMPLT_HDR_IPTT_MSK;
-               slot = &hisi_hba->slot_info[iptt];
-               slot->cmplt_queue_slot = rd_point;
-               slot->cmplt_queue = queue;
-               slot_complete_v3_hw(hisi_hba, slot);
+               if (likely(iptt < HISI_SAS_COMMAND_ENTRIES_V3_HW)) {
+                       slot = &hisi_hba->slot_info[iptt];
+                       slot->cmplt_queue_slot = rd_point;
+                       slot->cmplt_queue = queue;
+                       slot_complete_v3_hw(hisi_hba, slot);
+               } else
+                       dev_err(dev, "IPTT %d is invalid, discard it.\n", iptt);
 
                if (++rd_point >= HISI_SAS_QUEUE_SLOTS)
                        rd_point = 0;