@@ -819,6 +819,7 @@ hfcsusb_rx_frame(struct usb_fifo *fifo, __u8 *data, unsigned int len,
819
819
int fifon = fifo -> fifonum ;
820
820
int i ;
821
821
int hdlc = 0 ;
822
+ unsigned long flags ;
822
823
823
824
if (debug & DBG_HFC_CALL_TRACE )
824
825
printk (KERN_DEBUG "%s: %s: fifo(%i) len(%i) "
@@ -835,7 +836,7 @@ hfcsusb_rx_frame(struct usb_fifo *fifo, __u8 *data, unsigned int len,
835
836
return ;
836
837
}
837
838
838
- spin_lock (& hw -> lock );
839
+ spin_lock_irqsave (& hw -> lock , flags );
839
840
if (fifo -> dch ) {
840
841
rx_skb = fifo -> dch -> rx_skb ;
841
842
maxlen = fifo -> dch -> maxlen ;
@@ -844,7 +845,7 @@ hfcsusb_rx_frame(struct usb_fifo *fifo, __u8 *data, unsigned int len,
844
845
if (fifo -> bch ) {
845
846
if (test_bit (FLG_RX_OFF , & fifo -> bch -> Flags )) {
846
847
fifo -> bch -> dropcnt += len ;
847
- spin_unlock (& hw -> lock );
848
+ spin_unlock_irqrestore (& hw -> lock , flags );
848
849
return ;
849
850
}
850
851
maxlen = bchannel_get_rxbuf (fifo -> bch , len );
@@ -854,7 +855,7 @@ hfcsusb_rx_frame(struct usb_fifo *fifo, __u8 *data, unsigned int len,
854
855
skb_trim (rx_skb , 0 );
855
856
pr_warning ("%s.B%d: No bufferspace for %d bytes\n" ,
856
857
hw -> name , fifo -> bch -> nr , len );
857
- spin_unlock (& hw -> lock );
858
+ spin_unlock_irqrestore (& hw -> lock , flags );
858
859
return ;
859
860
}
860
861
maxlen = fifo -> bch -> maxlen ;
@@ -878,7 +879,7 @@ hfcsusb_rx_frame(struct usb_fifo *fifo, __u8 *data, unsigned int len,
878
879
} else {
879
880
printk (KERN_DEBUG "%s: %s: No mem for rx_skb\n" ,
880
881
hw -> name , __func__ );
881
- spin_unlock (& hw -> lock );
882
+ spin_unlock_irqrestore (& hw -> lock , flags );
882
883
return ;
883
884
}
884
885
}
@@ -888,7 +889,7 @@ hfcsusb_rx_frame(struct usb_fifo *fifo, __u8 *data, unsigned int len,
888
889
"for fifo(%d) HFCUSB_D_RX\n" ,
889
890
hw -> name , __func__ , fifon );
890
891
skb_trim (rx_skb , 0 );
891
- spin_unlock (& hw -> lock );
892
+ spin_unlock_irqrestore (& hw -> lock , flags );
892
893
return ;
893
894
}
894
895
}
@@ -942,7 +943,7 @@ hfcsusb_rx_frame(struct usb_fifo *fifo, __u8 *data, unsigned int len,
942
943
/* deliver transparent data to layer2 */
943
944
recv_Bchannel (fifo -> bch , MISDN_ID_ANY , false);
944
945
}
945
- spin_unlock (& hw -> lock );
946
+ spin_unlock_irqrestore (& hw -> lock , flags );
946
947
}
947
948
948
949
static void
@@ -979,18 +980,19 @@ rx_iso_complete(struct urb *urb)
979
980
__u8 * buf ;
980
981
static __u8 eof [8 ];
981
982
__u8 s0_state ;
983
+ unsigned long flags ;
982
984
983
985
fifon = fifo -> fifonum ;
984
986
status = urb -> status ;
985
987
986
- spin_lock (& hw -> lock );
988
+ spin_lock_irqsave (& hw -> lock , flags );
987
989
if (fifo -> stop_gracefull ) {
988
990
fifo -> stop_gracefull = 0 ;
989
991
fifo -> active = 0 ;
990
- spin_unlock (& hw -> lock );
992
+ spin_unlock_irqrestore (& hw -> lock , flags );
991
993
return ;
992
994
}
993
- spin_unlock (& hw -> lock );
995
+ spin_unlock_irqrestore (& hw -> lock , flags );
994
996
995
997
/*
996
998
* ISO transfer only partially completed,
@@ -1096,15 +1098,16 @@ rx_int_complete(struct urb *urb)
1096
1098
struct usb_fifo * fifo = (struct usb_fifo * ) urb -> context ;
1097
1099
struct hfcsusb * hw = fifo -> hw ;
1098
1100
static __u8 eof [8 ];
1101
+ unsigned long flags ;
1099
1102
1100
- spin_lock (& hw -> lock );
1103
+ spin_lock_irqsave (& hw -> lock , flags );
1101
1104
if (fifo -> stop_gracefull ) {
1102
1105
fifo -> stop_gracefull = 0 ;
1103
1106
fifo -> active = 0 ;
1104
- spin_unlock (& hw -> lock );
1107
+ spin_unlock_irqrestore (& hw -> lock , flags );
1105
1108
return ;
1106
1109
}
1107
- spin_unlock (& hw -> lock );
1110
+ spin_unlock_irqrestore (& hw -> lock , flags );
1108
1111
1109
1112
fifon = fifo -> fifonum ;
1110
1113
if ((!fifo -> active ) || (urb -> status )) {
@@ -1172,12 +1175,13 @@ tx_iso_complete(struct urb *urb)
1172
1175
int * tx_idx ;
1173
1176
int frame_complete , fifon , status , fillempty = 0 ;
1174
1177
__u8 threshbit , * p ;
1178
+ unsigned long flags ;
1175
1179
1176
- spin_lock (& hw -> lock );
1180
+ spin_lock_irqsave (& hw -> lock , flags );
1177
1181
if (fifo -> stop_gracefull ) {
1178
1182
fifo -> stop_gracefull = 0 ;
1179
1183
fifo -> active = 0 ;
1180
- spin_unlock (& hw -> lock );
1184
+ spin_unlock_irqrestore (& hw -> lock , flags );
1181
1185
return ;
1182
1186
}
1183
1187
@@ -1195,7 +1199,7 @@ tx_iso_complete(struct urb *urb)
1195
1199
} else {
1196
1200
printk (KERN_DEBUG "%s: %s: neither BCH nor DCH\n" ,
1197
1201
hw -> name , __func__ );
1198
- spin_unlock (& hw -> lock );
1202
+ spin_unlock_irqrestore (& hw -> lock , flags );
1199
1203
return ;
1200
1204
}
1201
1205
@@ -1375,7 +1379,7 @@ tx_iso_complete(struct urb *urb)
1375
1379
hw -> name , __func__ ,
1376
1380
symbolic (urb_errlist , status ), status , fifon );
1377
1381
}
1378
- spin_unlock (& hw -> lock );
1382
+ spin_unlock_irqrestore (& hw -> lock , flags );
1379
1383
}
1380
1384
1381
1385
/*
0 commit comments