netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).