All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukas Wunner <lukas@wunner.de>
To: Jakub Kicinski <kuba@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Marc Zyngier <maz@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Paolo Abeni <pabeni@redhat.com>,
	netdev@vger.kernel.org, linux-usb@vger.kernel.org,
	Steve Glendinning <steve.glendinning@shawell.net>,
	UNGLinuxDriver@microchip.com, Oliver Neukum <oneukum@suse.com>,
	Andre Edich <andre.edich@microchip.com>,
	Oleksij Rempel <linux@rempel-privat.de>,
	Martyn Welch <martyn.welch@collabora.com>,
	Gabriel Hojda <ghojda@yo2urs.ro>,
	Christoph Fritz <chf.fritz@googlemail.com>,
	Lino Sanfilippo <LinoSanfilippo@gmx.de>,
	Philipp Rosenberger <p.rosenberger@kunbus.com>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Andrew Lunn <andrew@lunn.ch>,
	Russell King <linux@armlinux.org.uk>,
	Ferry Toth <fntoth@gmail.com>
Subject: Re: [PATCH net-next v2 5/7] usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling
Date: Thu, 5 May 2022 20:53:28 +0200	[thread overview]
Message-ID: <20220505185328.GA14123@wunner.de> (raw)
In-Reply-To: <20220505113207.487861b2@kernel.org>

On Thu, May 05, 2022 at 11:32:07AM -0700, Jakub Kicinski wrote:
> On Tue, 3 May 2022 15:15:05 +0200 Lukas Wunner wrote:
> > @@ -608,11 +618,20 @@ static void smsc95xx_status(struct usbnet *dev, struct urb *urb)
> >  	intdata = get_unaligned_le32(urb->transfer_buffer);
> >  	netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata);
> >  
> > +	/* USB interrupts are received in softirq (tasklet) context.
> > +	 * Switch to hardirq context to make genirq code happy.
> > +	 */
> > +	local_irq_save(flags);
> > +	__irq_enter_raw();
> > +
> >  	if (intdata & INT_ENP_PHY_INT_)
> > -		;
> > +		generic_handle_domain_irq(pdata->irqdomain, PHY_HWIRQ);
> >  	else
> >  		netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n",
> >  			    intdata);
> > +
> > +	__irq_exit_raw();
> > +	local_irq_restore(flags);
> 
> IRQ maintainers could you cast your eyes over this?
> 
> Full patch:
> 
> https://lore.kernel.org/all/c6b7f4e4a17913d2f2bc4fe722df0804c2d6fea7.1651574194.git.lukas@wunner.de/

This is basically identical to what drivers/net/usb/lan78xx.c does
in lan78xx_status(), except I'm passing the hw irq instead of the
linux irq to genirq code, thereby avoiding the overhead of a
radix_tree_lookup().

generic_handle_domain_irq() warns unconditionally on !in_irq(),
unlike handle_irq_desc(), which constrains the warning to
handle_enforce_irqctx() (i.e. x86 APIC, arm GIC/GICv3).
Perhaps that's an oversight in generic_handle_domain_irq(),
unless __irq_resolve_mapping() becomes unsafe outside in_irq()
for some reason...

In any case the unconditional in_irq() necessitates __irq_enter_raw()
here.

And there's no _safe variant() of generic_handle_domain_irq()
(unlike generic_handle_irq_safe() which was recently added by
509853f9e1e7), hence the necessity of an explicit local_irq_save().

Thanks,

Lukas

  reply	other threads:[~2022-05-05 18:53 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-03 13:15 [PATCH net-next v2 0/7] Polling be gone on LAN95xx Lukas Wunner
2022-05-03 13:15 ` [PATCH net-next v2 1/7] usbnet: Run unregister_netdev() before unbind() again Lukas Wunner
2022-05-03 13:15 ` [PATCH net-next v2 2/7] usbnet: smsc95xx: Don't clear read-only PHY interrupt Lukas Wunner
2022-05-03 22:20   ` Andrew Lunn
2022-05-03 13:15 ` [PATCH net-next v2 3/7] usbnet: smsc95xx: Don't reset PHY behind PHY driver's back Lukas Wunner
2022-05-03 22:21   ` Andrew Lunn
2022-05-03 13:15 ` [PATCH net-next v2 4/7] usbnet: smsc95xx: Avoid link settings race on interrupt reception Lukas Wunner
2022-05-03 22:23   ` Andrew Lunn
2022-05-03 13:15 ` [PATCH net-next v2 5/7] usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling Lukas Wunner
2022-05-05 18:32   ` Jakub Kicinski
2022-05-05 18:53     ` Lukas Wunner [this message]
2022-05-06 10:58       ` Marc Zyngier
2022-05-06 20:16         ` Lukas Wunner
2022-05-09  8:47           ` Marc Zyngier
2022-05-10  8:18             ` Lukas Wunner
2022-05-11  0:27     ` [tip: irq/urgent] genirq: Remove WARN_ON_ONCE() in generic_handle_domain_irq() tip-bot2 for Lukas Wunner
2022-05-11  9:26     ` [PATCH net-next v2 5/7] usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling Lukas Wunner
2022-05-11 16:15       ` Jakub Kicinski
2022-05-03 13:15 ` [PATCH net-next v2 6/7] net: phy: smsc: Cache interrupt mask Lukas Wunner
2022-05-03 22:26   ` Andrew Lunn
2022-05-03 13:15 ` [PATCH net-next v2 7/7] net: phy: smsc: Cope with hot-removal in interrupt handler Lukas Wunner
2022-05-03 22:26   ` Andrew Lunn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220505185328.GA14123@wunner.de \
    --to=lukas@wunner.de \
    --cc=LinoSanfilippo@gmx.de \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=andre.edich@microchip.com \
    --cc=andrew@lunn.ch \
    --cc=chf.fritz@googlemail.com \
    --cc=davem@davemloft.net \
    --cc=fntoth@gmail.com \
    --cc=ghojda@yo2urs.ro \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=linux@rempel-privat.de \
    --cc=martyn.welch@collabora.com \
    --cc=maz@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=oneukum@suse.com \
    --cc=p.rosenberger@kunbus.com \
    --cc=pabeni@redhat.com \
    --cc=steve.glendinning@shawell.net \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.