@@ -1163,6 +1163,7 @@ static int mtk_star_tx_poll(struct napi_struct *napi, int budget)
1163
1163
struct net_device * ndev = priv -> ndev ;
1164
1164
unsigned int head = ring -> head ;
1165
1165
unsigned int entry = ring -> tail ;
1166
+ unsigned long flags ;
1166
1167
1167
1168
while (entry != head && count < (MTK_STAR_RING_NUM_DESCS - 1 )) {
1168
1169
ret = mtk_star_tx_complete_one (priv );
@@ -1182,9 +1183,9 @@ static int mtk_star_tx_poll(struct napi_struct *napi, int budget)
1182
1183
netif_wake_queue (ndev );
1183
1184
1184
1185
if (napi_complete (napi )) {
1185
- spin_lock (& priv -> lock );
1186
+ spin_lock_irqsave (& priv -> lock , flags );
1186
1187
mtk_star_enable_dma_irq (priv , false, true);
1187
- spin_unlock (& priv -> lock );
1188
+ spin_unlock_irqrestore (& priv -> lock , flags );
1188
1189
}
1189
1190
1190
1191
return 0 ;
@@ -1341,16 +1342,17 @@ static int mtk_star_rx(struct mtk_star_priv *priv, int budget)
1341
1342
static int mtk_star_rx_poll (struct napi_struct * napi , int budget )
1342
1343
{
1343
1344
struct mtk_star_priv * priv ;
1345
+ unsigned long flags ;
1344
1346
int work_done = 0 ;
1345
1347
1346
1348
priv = container_of (napi , struct mtk_star_priv , rx_napi );
1347
1349
1348
1350
work_done = mtk_star_rx (priv , budget );
1349
1351
if (work_done < budget ) {
1350
1352
napi_complete_done (napi , work_done );
1351
- spin_lock (& priv -> lock );
1353
+ spin_lock_irqsave (& priv -> lock , flags );
1352
1354
mtk_star_enable_dma_irq (priv , true, false);
1353
- spin_unlock (& priv -> lock );
1355
+ spin_unlock_irqrestore (& priv -> lock , flags );
1354
1356
}
1355
1357
1356
1358
return work_done ;
0 commit comments