* [PATCH net-next 0/2] r8169: use napi_complete_done return value
@ 2020-08-19 11:00 Heiner Kallweit
2020-08-19 11:02 ` [PATCH net-next 1/2] " Heiner Kallweit
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Heiner Kallweit @ 2020-08-19 11:00 UTC (permalink / raw)
To: Jakub Kicinski, Realtek linux nic maintainers, David Miller; +Cc: netdev
Consider the return value of napi_complete_done(), this allows users to
use the gro_flush_timeout sysfs attribute as an alternative to classic
interrupt coalescing.
Heiner Kallweit (2):
r8169: use napi_complete_done return value
r8169: remove member irq_enabled from struct rtl8169_private
drivers/net/ethernet/realtek/r8169_main.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
--
2.28.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH net-next 1/2] r8169: use napi_complete_done return value
2020-08-19 11:00 [PATCH net-next 0/2] r8169: use napi_complete_done return value Heiner Kallweit
@ 2020-08-19 11:02 ` Heiner Kallweit
2020-08-19 11:03 ` [PATCH net-next 2/2] r8169: remove member irq_enabled from struct rtl8169_private Heiner Kallweit
2020-08-19 20:03 ` [PATCH net-next 0/2] r8169: use napi_complete_done return value David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Heiner Kallweit @ 2020-08-19 11:02 UTC (permalink / raw)
To: Jakub Kicinski, Realtek linux nic maintainers, David Miller; +Cc: netdev
Consider the return value of napi_complete_done(), this allows users to
use the gro_flush_timeout sysfs attribute as an alternative to classic
interrupt coalescing.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
drivers/net/ethernet/realtek/r8169_main.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index d1da92ac7..dbc324c53 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4596,10 +4596,8 @@ static int rtl8169_poll(struct napi_struct *napi, int budget)
rtl_tx(dev, tp, budget);
- if (work_done < budget) {
- napi_complete_done(napi, work_done);
+ if (work_done < budget && napi_complete_done(napi, work_done))
rtl_irq_enable(tp);
- }
return work_done;
}
--
2.28.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH net-next 2/2] r8169: remove member irq_enabled from struct rtl8169_private
2020-08-19 11:00 [PATCH net-next 0/2] r8169: use napi_complete_done return value Heiner Kallweit
2020-08-19 11:02 ` [PATCH net-next 1/2] " Heiner Kallweit
@ 2020-08-19 11:03 ` Heiner Kallweit
2020-08-19 20:03 ` [PATCH net-next 0/2] r8169: use napi_complete_done return value David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Heiner Kallweit @ 2020-08-19 11:03 UTC (permalink / raw)
To: Jakub Kicinski, Realtek linux nic maintainers, David Miller; +Cc: netdev
After making use of the gro_flush_timeout attribute I once got a
tx timeout due to an interrupt that wasn't handled. Seems using
irq_enabled can be racy, and it's not needed any longer anyway,
so remove it. I've never seen a report about such a race before,
therefore treat the change as an improvement.
There's just one small drawback: If a legacy PCI interrupt is used,
and if this interrupt is shared with a device with high interrupt
rate, then we may handle interrupts even if NAPI disabled them,
and we may see a certain performance decrease under high network load.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
drivers/net/ethernet/realtek/r8169_main.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index dbc324c53..c427865d5 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -617,7 +617,6 @@ struct rtl8169_private {
struct work_struct work;
} wk;
- unsigned irq_enabled:1;
unsigned supports_gmii:1;
unsigned aspm_manageable:1;
dma_addr_t counters_phys_addr;
@@ -1280,12 +1279,10 @@ static void rtl_irq_disable(struct rtl8169_private *tp)
RTL_W32(tp, IntrMask_8125, 0);
else
RTL_W16(tp, IntrMask, 0);
- tp->irq_enabled = 0;
}
static void rtl_irq_enable(struct rtl8169_private *tp)
{
- tp->irq_enabled = 1;
if (rtl_is_8125(tp))
RTL_W32(tp, IntrMask_8125, tp->irq_mask);
else
@@ -4541,8 +4538,7 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
struct rtl8169_private *tp = dev_instance;
u32 status = rtl_get_events(tp);
- if (!tp->irq_enabled || (status & 0xffff) == 0xffff ||
- !(status & tp->irq_mask))
+ if ((status & 0xffff) == 0xffff || !(status & tp->irq_mask))
return IRQ_NONE;
if (unlikely(status & SYSErr)) {
--
2.28.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net-next 0/2] r8169: use napi_complete_done return value
2020-08-19 11:00 [PATCH net-next 0/2] r8169: use napi_complete_done return value Heiner Kallweit
2020-08-19 11:02 ` [PATCH net-next 1/2] " Heiner Kallweit
2020-08-19 11:03 ` [PATCH net-next 2/2] r8169: remove member irq_enabled from struct rtl8169_private Heiner Kallweit
@ 2020-08-19 20:03 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2020-08-19 20:03 UTC (permalink / raw)
To: hkallweit1; +Cc: kuba, nic_swsd, netdev
From: Heiner Kallweit <hkallweit1@gmail.com>
Date: Wed, 19 Aug 2020 13:00:57 +0200
> Consider the return value of napi_complete_done(), this allows users to
> use the gro_flush_timeout sysfs attribute as an alternative to classic
> interrupt coalescing.
Series applied, thanks Heiner.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-08-19 20:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-19 11:00 [PATCH net-next 0/2] r8169: use napi_complete_done return value Heiner Kallweit
2020-08-19 11:02 ` [PATCH net-next 1/2] " Heiner Kallweit
2020-08-19 11:03 ` [PATCH net-next 2/2] r8169: remove member irq_enabled from struct rtl8169_private Heiner Kallweit
2020-08-19 20:03 ` [PATCH net-next 0/2] r8169: use napi_complete_done return value David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).