r8169: improve handling task scheduling
authorHeiner Kallweit <hkallweit1@gmail.com>
Mon, 27 Nov 2023 17:20:11 +0000 (18:20 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 30 Nov 2023 03:46:22 +0000 (19:46 -0800)
If we know that the task is going to be a no-op, don't even schedule it.
And remove the check for netif_running() in the worker function, the
check for flag RTL_FLAG_TASK_ENABLED is sufficient. Note that we can't
remove the check for flag RTL_FLAG_TASK_ENABLED in the worker function
because we have no guarantee when it will be executed.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Link: https://lore.kernel.org/r/c65873a3-7394-4107-99a7-83f20030779c@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/realtek/r8169_main.c

index 0aed99a..5d7b8f0 100644 (file)
@@ -2227,6 +2227,9 @@ u16 rtl8168h_2_get_adc_bias_ioffset(struct rtl8169_private *tp)
 
 static void rtl_schedule_task(struct rtl8169_private *tp, enum rtl_flag flag)
 {
+       if (!test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags))
+               return;
+
        set_bit(flag, tp->wk.flags);
        schedule_work(&tp->wk.work);
 }
@@ -4467,8 +4470,7 @@ static void rtl_task(struct work_struct *work)
 
        rtnl_lock();
 
-       if (!netif_running(tp->dev) ||
-           !test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags))
+       if (!test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags))
                goto out_unlock;
 
        if (test_and_clear_bit(RTL_FLAG_TASK_TX_TIMEOUT, tp->wk.flags)) {