@@ -1153,6 +1153,7 @@ static int mtk_star_tx_poll(struct napi_struct *napi, int budget)
1153
1153
struct net_device * ndev = priv -> ndev ;
1154
1154
unsigned int head = ring -> head ;
1155
1155
unsigned int entry = ring -> tail ;
1156
+ unsigned long flags ;
1156
1157
1157
1158
while (entry != head && count < (MTK_STAR_RING_NUM_DESCS - 1 )) {
1158
1159
ret = mtk_star_tx_complete_one (priv );
@@ -1172,9 +1173,9 @@ static int mtk_star_tx_poll(struct napi_struct *napi, int budget)
1172
1173
netif_wake_queue (ndev );
1173
1174
1174
1175
if (napi_complete (napi )) {
1175
- spin_lock (& priv -> lock );
1176
+ spin_lock_irqsave (& priv -> lock , flags );
1176
1177
mtk_star_enable_dma_irq (priv , false, true);
1177
- spin_unlock (& priv -> lock );
1178
+ spin_unlock_irqrestore (& priv -> lock , flags );
1178
1179
}
1179
1180
1180
1181
return 0 ;
@@ -1331,16 +1332,17 @@ static int mtk_star_rx(struct mtk_star_priv *priv, int budget)
1331
1332
static int mtk_star_rx_poll (struct napi_struct * napi , int budget )
1332
1333
{
1333
1334
struct mtk_star_priv * priv ;
1335
+ unsigned long flags ;
1334
1336
int work_done = 0 ;
1335
1337
1336
1338
priv = container_of (napi , struct mtk_star_priv , rx_napi );
1337
1339
1338
1340
work_done = mtk_star_rx (priv , budget );
1339
1341
if (work_done < budget ) {
1340
1342
napi_complete_done (napi , work_done );
1341
- spin_lock (& priv -> lock );
1343
+ spin_lock_irqsave (& priv -> lock , flags );
1342
1344
mtk_star_enable_dma_irq (priv , true, false);
1343
- spin_unlock (& priv -> lock );
1345
+ spin_unlock_irqrestore (& priv -> lock , flags );
1344
1346
}
1345
1347
1346
1348
return work_done ;
0 commit comments