[SCSI] lpfc 8.3.42: Fixed inconsistent spin lock usage.

Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>

authored by James Smart and committed by James Bottomley 164cecd1 afbd8d88

+16 -18
+4 -4
drivers/scsi/lpfc/lpfc_init.c
··· 3031 phba->sli4_hba.scsi_xri_max); 3032 3033 spin_lock_irq(&phba->scsi_buf_list_get_lock); 3034 - spin_lock_irq(&phba->scsi_buf_list_put_lock); 3035 list_splice_init(&phba->lpfc_scsi_buf_list_get, &scsi_sgl_list); 3036 list_splice(&phba->lpfc_scsi_buf_list_put, &scsi_sgl_list); 3037 - spin_unlock_irq(&phba->scsi_buf_list_put_lock); 3038 spin_unlock_irq(&phba->scsi_buf_list_get_lock); 3039 3040 if (phba->sli4_hba.scsi_xri_cnt > phba->sli4_hba.scsi_xri_max) { ··· 3070 psb->cur_iocbq.sli4_xritag = phba->sli4_hba.xri_ids[lxri]; 3071 } 3072 spin_lock_irq(&phba->scsi_buf_list_get_lock); 3073 - spin_lock_irq(&phba->scsi_buf_list_put_lock); 3074 list_splice_init(&scsi_sgl_list, &phba->lpfc_scsi_buf_list_get); 3075 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list_put); 3076 - spin_unlock_irq(&phba->scsi_buf_list_put_lock); 3077 spin_unlock_irq(&phba->scsi_buf_list_get_lock); 3078 3079 return 0;
··· 3031 phba->sli4_hba.scsi_xri_max); 3032 3033 spin_lock_irq(&phba->scsi_buf_list_get_lock); 3034 + spin_lock(&phba->scsi_buf_list_put_lock); 3035 list_splice_init(&phba->lpfc_scsi_buf_list_get, &scsi_sgl_list); 3036 list_splice(&phba->lpfc_scsi_buf_list_put, &scsi_sgl_list); 3037 + spin_unlock(&phba->scsi_buf_list_put_lock); 3038 spin_unlock_irq(&phba->scsi_buf_list_get_lock); 3039 3040 if (phba->sli4_hba.scsi_xri_cnt > phba->sli4_hba.scsi_xri_max) { ··· 3070 psb->cur_iocbq.sli4_xritag = phba->sli4_hba.xri_ids[lxri]; 3071 } 3072 spin_lock_irq(&phba->scsi_buf_list_get_lock); 3073 + spin_lock(&phba->scsi_buf_list_put_lock); 3074 list_splice_init(&scsi_sgl_list, &phba->lpfc_scsi_buf_list_get); 3075 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list_put); 3076 + spin_unlock(&phba->scsi_buf_list_put_lock); 3077 spin_unlock_irq(&phba->scsi_buf_list_get_lock); 3078 3079 return 0;
+12 -14
drivers/scsi/lpfc/lpfc_scsi.c
··· 926 927 /* get all SCSI buffers need to repost to a local list */ 928 spin_lock_irq(&phba->scsi_buf_list_get_lock); 929 - spin_lock_irq(&phba->scsi_buf_list_put_lock); 930 list_splice_init(&phba->lpfc_scsi_buf_list_get, &post_sblist); 931 list_splice(&phba->lpfc_scsi_buf_list_put, &post_sblist); 932 - spin_unlock_irq(&phba->scsi_buf_list_put_lock); 933 spin_unlock_irq(&phba->scsi_buf_list_get_lock); 934 935 /* post the list of scsi buffer sgls to port if available */ ··· 1137 { 1138 struct lpfc_scsi_buf * lpfc_cmd = NULL; 1139 struct list_head *scsi_buf_list_get = &phba->lpfc_scsi_buf_list_get; 1140 - unsigned long gflag = 0; 1141 - unsigned long pflag = 0; 1142 1143 - spin_lock_irqsave(&phba->scsi_buf_list_get_lock, gflag); 1144 list_remove_head(scsi_buf_list_get, lpfc_cmd, struct lpfc_scsi_buf, 1145 list); 1146 if (!lpfc_cmd) { 1147 - spin_lock_irqsave(&phba->scsi_buf_list_put_lock, pflag); 1148 list_splice(&phba->lpfc_scsi_buf_list_put, 1149 &phba->lpfc_scsi_buf_list_get); 1150 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list_put); 1151 list_remove_head(scsi_buf_list_get, lpfc_cmd, 1152 struct lpfc_scsi_buf, list); 1153 - spin_unlock_irqrestore(&phba->scsi_buf_list_put_lock, pflag); 1154 } 1155 - spin_unlock_irqrestore(&phba->scsi_buf_list_get_lock, gflag); 1156 return lpfc_cmd; 1157 } 1158 /** ··· 1169 lpfc_get_scsi_buf_s4(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) 1170 { 1171 struct lpfc_scsi_buf *lpfc_cmd, *lpfc_cmd_next; 1172 - unsigned long gflag = 0; 1173 - unsigned long pflag = 0; 1174 int found = 0; 1175 1176 - spin_lock_irqsave(&phba->scsi_buf_list_get_lock, gflag); 1177 list_for_each_entry_safe(lpfc_cmd, lpfc_cmd_next, 1178 &phba->lpfc_scsi_buf_list_get, list) { 1179 if (lpfc_test_rrq_active(phba, ndlp, ··· 1183 break; 1184 } 1185 if (!found) { 1186 - spin_lock_irqsave(&phba->scsi_buf_list_put_lock, pflag); 1187 list_splice(&phba->lpfc_scsi_buf_list_put, 1188 &phba->lpfc_scsi_buf_list_get); 1189 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list_put); 1190 - spin_unlock_irqrestore(&phba->scsi_buf_list_put_lock, pflag); 1191 list_for_each_entry_safe(lpfc_cmd, lpfc_cmd_next, 1192 &phba->lpfc_scsi_buf_list_get, list) { 1193 if (lpfc_test_rrq_active( ··· 1198 break; 1199 } 1200 } 1201 - spin_unlock_irqrestore(&phba->scsi_buf_list_get_lock, gflag); 1202 if (!found) 1203 return NULL; 1204 return lpfc_cmd;
··· 926 927 /* get all SCSI buffers need to repost to a local list */ 928 spin_lock_irq(&phba->scsi_buf_list_get_lock); 929 + spin_lock(&phba->scsi_buf_list_put_lock); 930 list_splice_init(&phba->lpfc_scsi_buf_list_get, &post_sblist); 931 list_splice(&phba->lpfc_scsi_buf_list_put, &post_sblist); 932 + spin_unlock(&phba->scsi_buf_list_put_lock); 933 spin_unlock_irq(&phba->scsi_buf_list_get_lock); 934 935 /* post the list of scsi buffer sgls to port if available */ ··· 1137 { 1138 struct lpfc_scsi_buf * lpfc_cmd = NULL; 1139 struct list_head *scsi_buf_list_get = &phba->lpfc_scsi_buf_list_get; 1140 + unsigned long iflag = 0; 1141 1142 + spin_lock_irqsave(&phba->scsi_buf_list_get_lock, iflag); 1143 list_remove_head(scsi_buf_list_get, lpfc_cmd, struct lpfc_scsi_buf, 1144 list); 1145 if (!lpfc_cmd) { 1146 + spin_lock(&phba->scsi_buf_list_put_lock); 1147 list_splice(&phba->lpfc_scsi_buf_list_put, 1148 &phba->lpfc_scsi_buf_list_get); 1149 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list_put); 1150 list_remove_head(scsi_buf_list_get, lpfc_cmd, 1151 struct lpfc_scsi_buf, list); 1152 + spin_unlock(&phba->scsi_buf_list_put_lock); 1153 } 1154 + spin_unlock_irqrestore(&phba->scsi_buf_list_get_lock, iflag); 1155 return lpfc_cmd; 1156 } 1157 /** ··· 1170 lpfc_get_scsi_buf_s4(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) 1171 { 1172 struct lpfc_scsi_buf *lpfc_cmd, *lpfc_cmd_next; 1173 + unsigned long iflag = 0; 1174 int found = 0; 1175 1176 + spin_lock_irqsave(&phba->scsi_buf_list_get_lock, iflag); 1177 list_for_each_entry_safe(lpfc_cmd, lpfc_cmd_next, 1178 &phba->lpfc_scsi_buf_list_get, list) { 1179 if (lpfc_test_rrq_active(phba, ndlp, ··· 1185 break; 1186 } 1187 if (!found) { 1188 + spin_lock(&phba->scsi_buf_list_put_lock); 1189 list_splice(&phba->lpfc_scsi_buf_list_put, 1190 &phba->lpfc_scsi_buf_list_get); 1191 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list_put); 1192 + spin_unlock(&phba->scsi_buf_list_put_lock); 1193 list_for_each_entry_safe(lpfc_cmd, lpfc_cmd_next, 1194 &phba->lpfc_scsi_buf_list_get, list) { 1195 if (lpfc_test_rrq_active( ··· 1200 break; 1201 } 1202 } 1203 + spin_unlock_irqrestore(&phba->scsi_buf_list_get_lock, iflag); 1204 if (!found) 1205 return NULL; 1206 return lpfc_cmd;