lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 049/757] r8169: fix operation under forced interrupt threading
    Date
    From: Heiner Kallweit <hkallweit1@gmail.com>

    [ Upstream commit 424a646e072a887aa87283b53aa6f8b19c2a7bef ]

    For several network drivers it was reported that using
    __napi_schedule_irqoff() is unsafe with forced threading. One way to
    fix this is switching back to __napi_schedule, but then we lose the
    benefit of the irqoff version in general. As stated by Eric it doesn't
    make sense to make the minimal hard irq handlers in drivers using NAPI
    a thread. Therefore ensure that the hard irq handler is never
    thread-ified.

    Fixes: 9a899a35b0d6 ("r8169: switch to napi_schedule_irqoff")
    Link: https://lkml.org/lkml/2020/10/18/19
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://lore.kernel.org/r/4d3ef84a-c812-5072-918a-22a6f6468310@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/realtek/r8169_main.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/drivers/net/ethernet/realtek/r8169_main.c
    +++ b/drivers/net/ethernet/realtek/r8169_main.c
    @@ -4686,7 +4686,7 @@ static int rtl8169_close(struct net_devi

    phy_disconnect(tp->phydev);

    - pci_free_irq(pdev, 0, tp);
    + free_irq(pci_irq_vector(pdev, 0), tp);

    dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
    tp->RxPhyAddr);
    @@ -4737,8 +4737,8 @@ static int rtl_open(struct net_device *d

    rtl_request_firmware(tp);

    - retval = pci_request_irq(pdev, 0, rtl8169_interrupt, NULL, tp,
    - dev->name);
    + retval = request_irq(pci_irq_vector(pdev, 0), rtl8169_interrupt,
    + IRQF_NO_THREAD | IRQF_SHARED, dev->name, tp);
    if (retval < 0)
    goto err_release_fw_2;

    @@ -4755,7 +4755,7 @@ out:
    return retval;

    err_free_irq:
    - pci_free_irq(pdev, 0, tp);
    + free_irq(pci_irq_vector(pdev, 0), tp);
    err_release_fw_2:
    rtl_release_firmware(tp);
    rtl8169_rx_clear(tp);

    \
     
     \ /
      Last update: 2020-10-27 17:11    [W:4.022 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site