@@ -900,8 +900,9 @@ void hwi_ring_cq_db(struct beiscsi_hba *phba,
900
900
static struct sgl_handle * alloc_io_sgl_handle (struct beiscsi_hba * phba )
901
901
{
902
902
struct sgl_handle * psgl_handle ;
903
+ unsigned long flags ;
903
904
904
- spin_lock_bh (& phba -> io_sgl_lock );
905
+ spin_lock_irqsave (& phba -> io_sgl_lock , flags );
905
906
if (phba -> io_sgl_hndl_avbl ) {
906
907
beiscsi_log (phba , KERN_INFO , BEISCSI_LOG_IO ,
907
908
"BM_%d : In alloc_io_sgl_handle,"
@@ -919,14 +920,16 @@ static struct sgl_handle *alloc_io_sgl_handle(struct beiscsi_hba *phba)
919
920
phba -> io_sgl_alloc_index ++ ;
920
921
} else
921
922
psgl_handle = NULL ;
922
- spin_unlock_bh (& phba -> io_sgl_lock );
923
+ spin_unlock_irqrestore (& phba -> io_sgl_lock , flags );
923
924
return psgl_handle ;
924
925
}
925
926
926
927
static void
927
928
free_io_sgl_handle (struct beiscsi_hba * phba , struct sgl_handle * psgl_handle )
928
929
{
929
- spin_lock_bh (& phba -> io_sgl_lock );
930
+ unsigned long flags ;
931
+
932
+ spin_lock_irqsave (& phba -> io_sgl_lock , flags );
930
933
beiscsi_log (phba , KERN_INFO , BEISCSI_LOG_IO ,
931
934
"BM_%d : In free_,io_sgl_free_index=%d\n" ,
932
935
phba -> io_sgl_free_index );
@@ -941,7 +944,7 @@ free_io_sgl_handle(struct beiscsi_hba *phba, struct sgl_handle *psgl_handle)
941
944
"value there=%p\n" , phba -> io_sgl_free_index ,
942
945
phba -> io_sgl_hndl_base
943
946
[phba -> io_sgl_free_index ]);
944
- spin_unlock_bh (& phba -> io_sgl_lock );
947
+ spin_unlock_irqrestore (& phba -> io_sgl_lock , flags );
945
948
return ;
946
949
}
947
950
phba -> io_sgl_hndl_base [phba -> io_sgl_free_index ] = psgl_handle ;
@@ -950,23 +953,24 @@ free_io_sgl_handle(struct beiscsi_hba *phba, struct sgl_handle *psgl_handle)
950
953
phba -> io_sgl_free_index = 0 ;
951
954
else
952
955
phba -> io_sgl_free_index ++ ;
953
- spin_unlock_bh (& phba -> io_sgl_lock );
956
+ spin_unlock_irqrestore (& phba -> io_sgl_lock , flags );
954
957
}
955
958
956
959
static inline struct wrb_handle *
957
960
beiscsi_get_wrb_handle (struct hwi_wrb_context * pwrb_context ,
958
961
unsigned int wrbs_per_cxn )
959
962
{
960
963
struct wrb_handle * pwrb_handle ;
964
+ unsigned long flags ;
961
965
962
- spin_lock_bh (& pwrb_context -> wrb_lock );
966
+ spin_lock_irqsave (& pwrb_context -> wrb_lock , flags );
963
967
pwrb_handle = pwrb_context -> pwrb_handle_base [pwrb_context -> alloc_index ];
964
968
pwrb_context -> wrb_handles_available -- ;
965
969
if (pwrb_context -> alloc_index == (wrbs_per_cxn - 1 ))
966
970
pwrb_context -> alloc_index = 0 ;
967
971
else
968
972
pwrb_context -> alloc_index ++ ;
969
- spin_unlock_bh (& pwrb_context -> wrb_lock );
973
+ spin_unlock_irqrestore (& pwrb_context -> wrb_lock , flags );
970
974
971
975
if (pwrb_handle )
972
976
memset (pwrb_handle -> pwrb , 0 , sizeof (* pwrb_handle -> pwrb ));
@@ -1001,14 +1005,16 @@ beiscsi_put_wrb_handle(struct hwi_wrb_context *pwrb_context,
1001
1005
struct wrb_handle * pwrb_handle ,
1002
1006
unsigned int wrbs_per_cxn )
1003
1007
{
1004
- spin_lock_bh (& pwrb_context -> wrb_lock );
1008
+ unsigned long flags ;
1009
+
1010
+ spin_lock_irqsave (& pwrb_context -> wrb_lock , flags );
1005
1011
pwrb_context -> pwrb_handle_base [pwrb_context -> free_index ] = pwrb_handle ;
1006
1012
pwrb_context -> wrb_handles_available ++ ;
1007
1013
if (pwrb_context -> free_index == (wrbs_per_cxn - 1 ))
1008
1014
pwrb_context -> free_index = 0 ;
1009
1015
else
1010
1016
pwrb_context -> free_index ++ ;
1011
- spin_unlock_bh (& pwrb_context -> wrb_lock );
1017
+ spin_unlock_irqrestore (& pwrb_context -> wrb_lock , flags );
1012
1018
}
1013
1019
1014
1020
/**
@@ -1037,8 +1043,9 @@ free_wrb_handle(struct beiscsi_hba *phba, struct hwi_wrb_context *pwrb_context,
1037
1043
static struct sgl_handle * alloc_mgmt_sgl_handle (struct beiscsi_hba * phba )
1038
1044
{
1039
1045
struct sgl_handle * psgl_handle ;
1046
+ unsigned long flags ;
1040
1047
1041
- spin_lock_bh (& phba -> mgmt_sgl_lock );
1048
+ spin_lock_irqsave (& phba -> mgmt_sgl_lock , flags );
1042
1049
if (phba -> eh_sgl_hndl_avbl ) {
1043
1050
psgl_handle = phba -> eh_sgl_hndl_base [phba -> eh_sgl_alloc_index ];
1044
1051
phba -> eh_sgl_hndl_base [phba -> eh_sgl_alloc_index ] = NULL ;
@@ -1056,14 +1063,16 @@ static struct sgl_handle *alloc_mgmt_sgl_handle(struct beiscsi_hba *phba)
1056
1063
phba -> eh_sgl_alloc_index ++ ;
1057
1064
} else
1058
1065
psgl_handle = NULL ;
1059
- spin_unlock_bh (& phba -> mgmt_sgl_lock );
1066
+ spin_unlock_irqrestore (& phba -> mgmt_sgl_lock , flags );
1060
1067
return psgl_handle ;
1061
1068
}
1062
1069
1063
1070
void
1064
1071
free_mgmt_sgl_handle (struct beiscsi_hba * phba , struct sgl_handle * psgl_handle )
1065
1072
{
1066
- spin_lock_bh (& phba -> mgmt_sgl_lock );
1073
+ unsigned long flags ;
1074
+
1075
+ spin_lock_irqsave (& phba -> mgmt_sgl_lock , flags );
1067
1076
beiscsi_log (phba , KERN_INFO , BEISCSI_LOG_CONFIG ,
1068
1077
"BM_%d : In free_mgmt_sgl_handle,"
1069
1078
"eh_sgl_free_index=%d\n" ,
@@ -1078,7 +1087,7 @@ free_mgmt_sgl_handle(struct beiscsi_hba *phba, struct sgl_handle *psgl_handle)
1078
1087
"BM_%d : Double Free in eh SGL ,"
1079
1088
"eh_sgl_free_index=%d\n" ,
1080
1089
phba -> eh_sgl_free_index );
1081
- spin_unlock_bh (& phba -> mgmt_sgl_lock );
1090
+ spin_unlock_irqrestore (& phba -> mgmt_sgl_lock , flags );
1082
1091
return ;
1083
1092
}
1084
1093
phba -> eh_sgl_hndl_base [phba -> eh_sgl_free_index ] = psgl_handle ;
@@ -1088,7 +1097,7 @@ free_mgmt_sgl_handle(struct beiscsi_hba *phba, struct sgl_handle *psgl_handle)
1088
1097
phba -> eh_sgl_free_index = 0 ;
1089
1098
else
1090
1099
phba -> eh_sgl_free_index ++ ;
1091
- spin_unlock_bh (& phba -> mgmt_sgl_lock );
1100
+ spin_unlock_irqrestore (& phba -> mgmt_sgl_lock , flags );
1092
1101
}
1093
1102
1094
1103
static void
0 commit comments