From d50f64b5520311cacf38b8c2c240c5955c815d10 Mon Sep 17 00:00:00 2001 From: Philipp Hortmann Date: Sun, 24 Sep 2023 21:51:10 +0200 Subject: [PATCH] staging: rtl8192e: Resolve circular locking with rx_pkt_pending_timer Resolve circular locking from reorder_spinlock with rx_pkt_pending_timer. Signed-off-by: Philipp Hortmann Link: https://lore.kernel.org/r/08ff2088b0264bef60142ca35f7198dd8afa963c.1695582999.git.philipp.g.hortmann@gmail.com Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192e/rtllib_rx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/staging/rtl8192e/rtllib_rx.c b/drivers/staging/rtl8192e/rtllib_rx.c index 456dd05e291d3..a7b6f837024d1 100644 --- a/drivers/staging/rtl8192e/rtllib_rx.c +++ b/drivers/staging/rtl8192e/rtllib_rx.c @@ -693,8 +693,10 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, * Rx buffering. */ if (index > 0) { + spin_unlock_irqrestore(&ieee->reorder_spinlock, flags); if (timer_pending(&ts->rx_pkt_pending_timer)) del_timer_sync(&ts->rx_pkt_pending_timer); + spin_lock_irqsave(&ieee->reorder_spinlock, flags); ts->rx_timeout_indicate_seq = 0xffff; if (index > REORDER_WIN_SIZE) { @@ -712,8 +714,10 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, if (bPktInBuf && ts->rx_timeout_indicate_seq == 0xffff) { netdev_dbg(ieee->dev, "%s(): SET rx timeout timer\n", __func__); ts->rx_timeout_indicate_seq = ts->rx_indicate_seq; + spin_unlock_irqrestore(&ieee->reorder_spinlock, flags); mod_timer(&ts->rx_pkt_pending_timer, jiffies + msecs_to_jiffies(ht_info->rx_reorder_pending_time)); + spin_lock_irqsave(&ieee->reorder_spinlock, flags); } spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); } -- 2.30.2