linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net: lan78xx: fix "enabled interrupts" warninig
@ 2019-04-08  6:10 Jisheng Zhang
  2019-04-08  7:46 ` RaghuramChary.Jallipalli
  0 siblings, 1 reply; 12+ messages in thread
From: Jisheng Zhang @ 2019-04-08  6:10 UTC (permalink / raw)
  To: Woojung Huh, Microchip Linux Driver Support, David S. Miller,
	netdev, linux-usb, linux-kernel

I met below warning on raspberry pi 3B+:

[    4.833207] ------------[ cut here ]------------
[    4.833442] irq 79 handler irq_default_primary_handler+0x0/0x8 enabled interrupts
[    4.833758] WARNING: CPU: 0 PID: 0 at __handle_irq_event_percpu+0x124/0x150
[    4.834037] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.0.0+ #8
[    4.834266] Hardware name: Raspberry Pi 3 Model B Plus Rev 1.3 (DT)
[    4.834511] pstate: 60000005 (nZCv daif -PAN -UAO)
[    4.834702] pc : __handle_irq_event_percpu+0x124/0x150
[    4.834904] lr : __handle_irq_event_percpu+0x124/0x150
[    4.835103] sp : ffffffc035fb5600
[    4.835236] x29: ffffffc035fb5600 x28: ffffff8010720480
[    4.835446] x27: 0000000000000001 x26: ffffff8010650fa0
[    4.835655] x25: ffffff8010757ec6 x24: ffffffc034784e00
[    4.835864] x23: 000000000000004f x22: ffffffc035fb568c
[    4.836073] x21: 0000000000000000 x20: 0000000000000002
[    4.836282] x19: ffffffc03330af00 x18: 0000000000000000
[    4.836495] x17: 0000000000000000 x16: 0000000000000000
[    4.836704] x15: 0000000000aaaaaa x14: 7265746e69206465
[    4.836914] x13: 0000000000000001 x12: 00000000ffffffff
[    4.837122] x11: ffffff801059cf48 x10: 0000000000000001
[    4.837331] x9 : 0000000000000001 x8 : 0000000000000020
[    4.837540] x7 : 0000000000000000 x6 : 00000000000000b7
[    4.837748] x5 : ffffff80102a9f50 x4 : 0000000000000001
[    4.837956] x3 : 0000000000000000 x2 : 0000000000000004
[    4.838165] x1 : ffffff8010720480 x0 : 0000000000000045
[    4.838374] Call trace:
[    4.838480]  __handle_irq_event_percpu+0x124/0x150
[    4.838672]  handle_irq_event_percpu+0x1c/0x68
[    4.842134]  handle_irq_event+0x48/0x78
[    4.845527]  handle_simple_irq+0x9c/0xd8
[    4.848890]  generic_handle_irq+0x28/0x40
[    4.852186]  intr_complete+0xb4/0xe8
[    4.855315]  __usb_hcd_giveback_urb+0x58/0xd0
[    4.858368]  usb_giveback_urb_bh+0x94/0xd8
[    4.861323]  tasklet_action_common.isra.1+0x88/0x130
[    4.864268]  tasklet_hi_action+0x24/0x30
[    4.867112]  __do_softirq+0x114/0x224
[    4.869907]  irq_exit+0x9c/0xb8
[    4.872752]  __handle_domain_irq+0x64/0xb8
[    4.875604]  bcm2836_arm_irqchip_handle_irq+0x60/0xc0
[    4.878544]  el1_irq+0xb0/0x128
[    4.881472]  arch_cpu_idle+0x10/0x18
[    4.884411]  do_idle+0x12c/0x140
[    4.887324]  cpu_startup_entry+0x24/0x28
[    4.890285]  rest_init+0xd0/0xdc
[    4.893247]  arch_call_rest_init+0xc/0x14
[    4.896271]  start_kernel+0x314/0x328
[    4.899291] ---[ end trace 122fa03fe3c21930 ]---

Per my understanding, the proper handling of PHY irq is to make use of
PHY_IGNORE_INTERRUPT then call phy_mac_interrupt when INT_ENP_PHY_INT
is triggered.

Signed-off-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
---
 drivers/net/usb/lan78xx.c | 208 +++-----------------------------------
 1 file changed, 16 insertions(+), 192 deletions(-)

diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 3d92ea6fcc02..246a0d1bbc6c 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -20,10 +20,6 @@
 #include <linux/mdio.h>
 #include <linux/phy.h>
 #include <net/ip6_checksum.h>
-#include <linux/interrupt.h>
-#include <linux/irqdomain.h>
-#include <linux/irq.h>
-#include <linux/irqchip/chained_irq.h>
 #include <linux/microchipphy.h>
 #include <linux/phy_fixed.h>
 #include <linux/of_mdio.h>
@@ -87,38 +83,6 @@
 /* statistic update interval (mSec) */
 #define STAT_UPDATE_TIMER		(1 * 1000)
 
-/* defines interrupts from interrupt EP */
-#define MAX_INT_EP			(32)
-#define INT_EP_INTEP			(31)
-#define INT_EP_OTP_WR_DONE		(28)
-#define INT_EP_EEE_TX_LPI_START		(26)
-#define INT_EP_EEE_TX_LPI_STOP		(25)
-#define INT_EP_EEE_RX_LPI		(24)
-#define INT_EP_MAC_RESET_TIMEOUT	(23)
-#define INT_EP_RDFO			(22)
-#define INT_EP_TXE			(21)
-#define INT_EP_USB_STATUS		(20)
-#define INT_EP_TX_DIS			(19)
-#define INT_EP_RX_DIS			(18)
-#define INT_EP_PHY			(17)
-#define INT_EP_DP			(16)
-#define INT_EP_MAC_ERR			(15)
-#define INT_EP_TDFU			(14)
-#define INT_EP_TDFO			(13)
-#define INT_EP_UTX			(12)
-#define INT_EP_GPIO_11			(11)
-#define INT_EP_GPIO_10			(10)
-#define INT_EP_GPIO_9			(9)
-#define INT_EP_GPIO_8			(8)
-#define INT_EP_GPIO_7			(7)
-#define INT_EP_GPIO_6			(6)
-#define INT_EP_GPIO_5			(5)
-#define INT_EP_GPIO_4			(4)
-#define INT_EP_GPIO_3			(3)
-#define INT_EP_GPIO_2			(2)
-#define INT_EP_GPIO_1			(1)
-#define INT_EP_GPIO_0			(0)
-
 static const char lan78xx_gstrings[][ETH_GSTRING_LEN] = {
 	"RX FCS Errors",
 	"RX Alignment Errors",
@@ -350,15 +314,6 @@ struct statstage {
 	struct lan78xx_statstage64	curr_stat;
 };
 
-struct irq_domain_data {
-	struct irq_domain	*irqdomain;
-	unsigned int		phyirq;
-	struct irq_chip		*irqchip;
-	irq_flow_handler_t	irq_handler;
-	u32			irqenable;
-	struct mutex		irq_lock;		/* for irq bus access */
-};
-
 struct lan78xx_net {
 	struct net_device	*net;
 	struct usb_device	*udev;
@@ -415,8 +370,6 @@ struct lan78xx_net {
 
 	int			delta;
 	struct statstage	stats;
-
-	struct irq_domain_data	domain_data;
 };
 
 /* define external phy id */
@@ -1251,6 +1204,7 @@ static void lan78xx_defer_kevent(struct lan78xx_net *dev, int work)
 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb)
 {
 	u32 intdata;
+	struct phy_device *phydev = dev->net->phydev;
 
 	if (urb->actual_length != 4) {
 		netdev_warn(dev->net,
@@ -1264,9 +1218,7 @@ static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb)
 	if (intdata & INT_ENP_PHY_INT) {
 		netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata);
 		lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
-
-		if (dev->domain_data.phyirq > 0)
-			generic_handle_irq(dev->domain_data.phyirq);
+		phy_mac_interrupt(phydev);
 	} else
 		netdev_warn(dev->net,
 			    "unexpected interrupt: 0x%08x\n", intdata);
@@ -1875,127 +1827,6 @@ static void lan78xx_link_status_change(struct net_device *net)
 	}
 }
 
-static int irq_map(struct irq_domain *d, unsigned int irq,
-		   irq_hw_number_t hwirq)
-{
-	struct irq_domain_data *data = d->host_data;
-
-	irq_set_chip_data(irq, data);
-	irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler);
-	irq_set_noprobe(irq);
-
-	return 0;
-}
-
-static void irq_unmap(struct irq_domain *d, unsigned int irq)
-{
-	irq_set_chip_and_handler(irq, NULL, NULL);
-	irq_set_chip_data(irq, NULL);
-}
-
-static const struct irq_domain_ops chip_domain_ops = {
-	.map	= irq_map,
-	.unmap	= irq_unmap,
-};
-
-static void lan78xx_irq_mask(struct irq_data *irqd)
-{
-	struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
-
-	data->irqenable &= ~BIT(irqd_to_hwirq(irqd));
-}
-
-static void lan78xx_irq_unmask(struct irq_data *irqd)
-{
-	struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
-
-	data->irqenable |= BIT(irqd_to_hwirq(irqd));
-}
-
-static void lan78xx_irq_bus_lock(struct irq_data *irqd)
-{
-	struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
-
-	mutex_lock(&data->irq_lock);
-}
-
-static void lan78xx_irq_bus_sync_unlock(struct irq_data *irqd)
-{
-	struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd);
-	struct lan78xx_net *dev =
-			container_of(data, struct lan78xx_net, domain_data);
-	u32 buf;
-	int ret;
-
-	/* call register access here because irq_bus_lock & irq_bus_sync_unlock
-	 * are only two callbacks executed in non-atomic contex.
-	 */
-	ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf);
-	if (buf != data->irqenable)
-		ret = lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable);
-
-	mutex_unlock(&data->irq_lock);
-}
-
-static struct irq_chip lan78xx_irqchip = {
-	.name			= "lan78xx-irqs",
-	.irq_mask		= lan78xx_irq_mask,
-	.irq_unmask		= lan78xx_irq_unmask,
-	.irq_bus_lock		= lan78xx_irq_bus_lock,
-	.irq_bus_sync_unlock	= lan78xx_irq_bus_sync_unlock,
-};
-
-static int lan78xx_setup_irq_domain(struct lan78xx_net *dev)
-{
-	struct device_node *of_node;
-	struct irq_domain *irqdomain;
-	unsigned int irqmap = 0;
-	u32 buf;
-	int ret = 0;
-
-	of_node = dev->udev->dev.parent->of_node;
-
-	mutex_init(&dev->domain_data.irq_lock);
-
-	lan78xx_read_reg(dev, INT_EP_CTL, &buf);
-	dev->domain_data.irqenable = buf;
-
-	dev->domain_data.irqchip = &lan78xx_irqchip;
-	dev->domain_data.irq_handler = handle_simple_irq;
-
-	irqdomain = irq_domain_add_simple(of_node, MAX_INT_EP, 0,
-					  &chip_domain_ops, &dev->domain_data);
-	if (irqdomain) {
-		/* create mapping for PHY interrupt */
-		irqmap = irq_create_mapping(irqdomain, INT_EP_PHY);
-		if (!irqmap) {
-			irq_domain_remove(irqdomain);
-
-			irqdomain = NULL;
-			ret = -EINVAL;
-		}
-	} else {
-		ret = -EINVAL;
-	}
-
-	dev->domain_data.irqdomain = irqdomain;
-	dev->domain_data.phyirq = irqmap;
-
-	return ret;
-}
-
-static void lan78xx_remove_irq_domain(struct lan78xx_net *dev)
-{
-	if (dev->domain_data.phyirq > 0) {
-		irq_dispose_mapping(dev->domain_data.phyirq);
-
-		if (dev->domain_data.irqdomain)
-			irq_domain_remove(dev->domain_data.irqdomain);
-	}
-	dev->domain_data.phyirq = 0;
-	dev->domain_data.irqdomain = NULL;
-}
-
 static int lan8835_fixup(struct phy_device *phydev)
 {
 	int buf;
@@ -2124,16 +1955,15 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
 		return -EIO;
 	}
 
-	/* if phyirq is not set, use polling mode in phylib */
-	if (dev->domain_data.phyirq > 0)
-		phydev->irq = dev->domain_data.phyirq;
-	else
-		phydev->irq = 0;
-	netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq);
-
 	/* set to AUTOMDIX */
 	phydev->mdix = ETH_TP_MDI_AUTO;
 
+	ret = phy_read(phydev, LAN88XX_INT_STS);
+	ret = phy_write(phydev, LAN88XX_INT_MASK,
+			LAN88XX_INT_MASK_MDINTPIN_EN_ |
+			LAN88XX_INT_MASK_LINK_CHANGE_);
+	phydev->irq = PHY_IGNORE_INTERRUPT;
+
 	ret = phy_connect_direct(dev->net, phydev,
 				 lan78xx_link_status_change,
 				 dev->interface);
@@ -2571,6 +2401,11 @@ static int lan78xx_reset(struct lan78xx_net *dev)
 	}
 	ret = lan78xx_write_reg(dev, MAC_CR, buf);
 
+	/* enable PHY interrupts */
+	ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf);
+	buf |= INT_ENP_PHY_INT;
+	ret = lan78xx_write_reg(dev, INT_EP_CTL, buf);
+
 	ret = lan78xx_read_reg(dev, MAC_TX, &buf);
 	buf |= MAC_TX_TXEN_;
 	ret = lan78xx_write_reg(dev, MAC_TX, buf);
@@ -2981,13 +2816,6 @@ static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
 
 	dev->net->hw_features = dev->net->features;
 
-	ret = lan78xx_setup_irq_domain(dev);
-	if (ret < 0) {
-		netdev_warn(dev->net,
-			    "lan78xx_setup_irq_domain() failed : %d", ret);
-		goto out1;
-	}
-
 	dev->net->hard_header_len += TX_OVERHEAD;
 	dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
 
@@ -2995,13 +2823,13 @@ static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
 	ret = lan78xx_reset(dev);
 	if (ret) {
 		netdev_warn(dev->net, "Registers INIT FAILED....");
-		goto out2;
+		goto out;
 	}
 
 	ret = lan78xx_mdio_init(dev);
 	if (ret) {
 		netdev_warn(dev->net, "MDIO INIT FAILED.....");
-		goto out2;
+		goto out;
 	}
 
 	dev->net->flags |= IFF_MULTICAST;
@@ -3010,10 +2838,7 @@ static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
 
 	return ret;
 
-out2:
-	lan78xx_remove_irq_domain(dev);
-
-out1:
+out:
 	netdev_warn(dev->net, "Bind routine FAILED");
 	cancel_work_sync(&pdata->set_multicast);
 	cancel_work_sync(&pdata->set_vlan);
@@ -3025,7 +2850,6 @@ static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf)
 {
 	struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]);
 
-	lan78xx_remove_irq_domain(dev);
 
 	lan78xx_remove_mdio(dev);
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* RE: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-08  6:10 [PATCH] net: lan78xx: fix "enabled interrupts" warninig Jisheng Zhang
@ 2019-04-08  7:46 ` RaghuramChary.Jallipalli
  2019-04-08  8:07   ` Jisheng Zhang
  0 siblings, 1 reply; 12+ messages in thread
From: RaghuramChary.Jallipalli @ 2019-04-08  7:46 UTC (permalink / raw)
  To: Jisheng.Zhang, Woojung.Huh, UNGLinuxDriver, davem, netdev,
	linux-usb, linux-kernel

> 
> Per my understanding, the proper handling of PHY irq is to make use of
> PHY_IGNORE_INTERRUPT then call phy_mac_interrupt when
> INT_ENP_PHY_INT is triggered.
> 

Hi Jisheng,
Thanks for the changes.
Is this warning specific to any linux version? Why do you think PHY irq domain handling is not proper? Maybe we can fix that rather removing complete IRQ domain code changes. 
Also, Can you pls let us know how this changes fixed your warning.

Thanks
-Raghu


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-08  7:46 ` RaghuramChary.Jallipalli
@ 2019-04-08  8:07   ` Jisheng Zhang
  2019-04-08 10:46     ` RaghuramChary.Jallipalli
  0 siblings, 1 reply; 12+ messages in thread
From: Jisheng Zhang @ 2019-04-08  8:07 UTC (permalink / raw)
  To: RaghuramChary.Jallipalli, Marc Zyngier
  Cc: Woojung.Huh, UNGLinuxDriver, davem, netdev, linux-usb, linux-kernel

On Mon, 8 Apr 2019 07:46:03 +0000 wrote:

> 
> 
> >
> > Per my understanding, the proper handling of PHY irq is to make use of
> > PHY_IGNORE_INTERRUPT then call phy_mac_interrupt when
> > INT_ENP_PHY_INT is triggered.
> >  
> 
> Hi Jisheng,

Hi

> Thanks for the changes.
> Is this warning specific to any linux version? 

In theory, no. I only tested 5.0, 4.20, both can reproduce this warning.

> Why do you think PHY irq domain handling is not proper?

+ Marc

The warning comes from calling generic_handle_irq() in usb tasklet context.
This is not correct.

Per my understanding, if there's chained irq, we could introduce extra
irqdomain. E.g

GIC <--> another irqchip controller <--> HW device

But in lan78xx, this is not the case. There's no chained irq at all.
In fact, there's a bit INT_ENP_PHY_INT in MAC's Interrupt Endpoint status
word to indicate this is PHY interrupt. So this is the case
PHY_IGNORE_INTERRUPT/phy_mac_interrupt intend for.

irq experts knows irqdomain etc better, maybe they can provide more inputs

> Maybe we can fix that rather removing complete IRQ domain code changes.
> Also, Can you pls let us know how this changes fixed your warning.

The patch removes the generic_handle_irq() calling from invalid context.

Thanks

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-08  8:07   ` Jisheng Zhang
@ 2019-04-08 10:46     ` RaghuramChary.Jallipalli
  2019-04-09  1:36       ` Jisheng Zhang
  0 siblings, 1 reply; 12+ messages in thread
From: RaghuramChary.Jallipalli @ 2019-04-08 10:46 UTC (permalink / raw)
  To: Jisheng.Zhang, marc.zyngier
  Cc: Woojung.Huh, UNGLinuxDriver, davem, netdev, linux-usb, linux-kernel

> > Is this warning specific to any linux version?
> 
> In theory, no. I only tested 5.0, 4.20, both can reproduce this warning.
>
This makes me think that code is fine because it occurs in 4.20 and greater. Or maybe the problem is masked in older. I maybe wrong in assuming that. 
 
> 
> The warning comes from calling generic_handle_irq() in usb tasklet context.
> This is not correct.
> 
> Per my understanding, if there's chained irq, we could introduce extra
> irqdomain. E.g
> 
> GIC <--> another irqchip controller <--> HW device
> 
Correct, IRQ domain is generally used in chained irq controllers.
Yes, We need to check why irq domain is used in the current driver.

Thanks

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-08 10:46     ` RaghuramChary.Jallipalli
@ 2019-04-09  1:36       ` Jisheng Zhang
  2019-04-09  5:26         ` RaghuramChary.Jallipalli
  2019-04-10  9:20         ` RaghuramChary.Jallipalli
  0 siblings, 2 replies; 12+ messages in thread
From: Jisheng Zhang @ 2019-04-09  1:36 UTC (permalink / raw)
  To: RaghuramChary.Jallipalli
  Cc: marc.zyngier, Woojung.Huh, UNGLinuxDriver, davem, netdev,
	linux-usb, linux-kernel

On Mon, 8 Apr 2019 10:46:52 +0000  wrote:

> 
> 
> > > Is this warning specific to any linux version?  
> >
> > In theory, no. I only tested 5.0, 4.20, both can reproduce this warning.
> >  
> This makes me think that code is fine because it occurs in 4.20 and greater. Or maybe the problem is masked in older. I maybe wrong in assuming that.

Per my understanding, the warning should occur since commit cc89c323a30e
("lan78xx: Use irq_domain for phy interrupt from USB Int. EP")
I just bought a Raspberry Pi 3B+ a few days ago, so I didn't have chance
to check 4.19 and before.

> 
> >
> > The warning comes from calling generic_handle_irq() in usb tasklet context.
> > This is not correct.
> >
> > Per my understanding, if there's chained irq, we could introduce extra
> > irqdomain. E.g
> >
> > GIC <--> another irqchip controller <--> HW device
> >  
> Correct, IRQ domain is generally used in chained irq controllers.
> Yes, We need to check why irq domain is used in the current driver.
> 

It's introduced in the commit cc89c323a30e

Thanks


^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-09  1:36       ` Jisheng Zhang
@ 2019-04-09  5:26         ` RaghuramChary.Jallipalli
  2019-04-10  9:20         ` RaghuramChary.Jallipalli
  1 sibling, 0 replies; 12+ messages in thread
From: RaghuramChary.Jallipalli @ 2019-04-09  5:26 UTC (permalink / raw)
  To: Jisheng.Zhang
  Cc: marc.zyngier, Woojung.Huh, UNGLinuxDriver, davem, netdev,
	linux-usb, linux-kernel

> > Correct, IRQ domain is generally used in chained irq controllers.
> > Yes, We need to check why irq domain is used in the current driver.
> >
> 
> It's introduced in the commit cc89c323a30e
> 
Thanks Jisheng, Will check and get back ASAP.

Thanks

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-09  1:36       ` Jisheng Zhang
  2019-04-09  5:26         ` RaghuramChary.Jallipalli
@ 2019-04-10  9:20         ` RaghuramChary.Jallipalli
  2019-04-10  9:53           ` Jisheng Zhang
  1 sibling, 1 reply; 12+ messages in thread
From: RaghuramChary.Jallipalli @ 2019-04-10  9:20 UTC (permalink / raw)
  To: Jisheng.Zhang
  Cc: marc.zyngier, Woojung.Huh, UNGLinuxDriver, davem, netdev,
	linux-usb, linux-kernel

> > >
> > > The warning comes from calling generic_handle_irq() in usb tasklet
> context.
> > > This is not correct.
> > >
> > > Per my understanding, if there's chained irq, we could introduce
> > > extra irqdomain. E.g
> > >
> > > GIC <--> another irqchip controller <--> HW device
> > >
> > Correct, IRQ domain is generally used in chained irq controllers.
> > Yes, We need to check why irq domain is used in the current driver.
> >
> 
> It's introduced in the commit cc89c323a30e
> 
Hi Jisheng,
I had spent some time to look into the history of commit. The reason for having irq domain in driver is because of the unavailability of real hardware interrupt, here we have USB interrupt pipe which is not actual interrupt.
So changes were proposed to have pseudo phy interrupt and handlers in phy lib. But later it was suggested to implement linux interrupt controller in driver itself.
You can see the archive here https://patchwork.ozlabs.org/patch/564511/
I want to understand if there is any functionality impact with this warning? Because I'm afraid if the current changes are removed we might hit some other issues (or older ones). We have to go through rigorous testing before going ahead.

Thanks.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-10  9:20         ` RaghuramChary.Jallipalli
@ 2019-04-10  9:53           ` Jisheng Zhang
  2019-04-10 10:27             ` Marc Zyngier
  2019-04-17  3:49             ` RaghuramChary.Jallipalli
  0 siblings, 2 replies; 12+ messages in thread
From: Jisheng Zhang @ 2019-04-10  9:53 UTC (permalink / raw)
  To: RaghuramChary.Jallipalli, Andrew Lunn, Florian Fainelli
  Cc: marc.zyngier, Woojung.Huh, UNGLinuxDriver, davem, netdev,
	linux-usb, linux-kernel


On Wed, 10 Apr 2019 09:20:38 +0000 wrote:

> 
> > > >
> > > > The warning comes from calling generic_handle_irq() in usb tasklet  
> > context.  
> > > > This is not correct.
> > > >
> > > > Per my understanding, if there's chained irq, we could introduce
> > > > extra irqdomain. E.g
> > > >
> > > > GIC <--> another irqchip controller <--> HW device
> > > >  
> > > Correct, IRQ domain is generally used in chained irq controllers.
> > > Yes, We need to check why irq domain is used in the current driver.
> > >  
> >
> > It's introduced in the commit cc89c323a30e
> >  
> Hi Jisheng,

Hi,

> I had spent some time to look into the history of commit. The reason for having irq domain in driver is because of the unavailability of real hardware interrupt, here we have USB interrupt pipe which is not actual interrupt.
> So changes were proposed to have pseudo phy interrupt and handlers in phy lib. But later it was suggested to implement linux interrupt controller in driver itself.

+ Andrew, Florian

USB net is different with Andrew's case.

there's no irq at all in usb net

but in Andrew's case, interrupt is connected to a GPIO line. As is known
GPIO can behave as irq chip.

> You can see the archive here https://patchwork.ozlabs.org/patch/564511/

Per my understanding, the purpose is to avoid phy_state_machine() poll
phy_read_status() to monitor phy link. But as pointed out by Florian,
phy_mac_interrupt() is intended for that purpose. And the poll should be
fixed in phy. Since the email was sent in 2016, maybe the bug has been fixed.

> I want to understand if there is any functionality impact with this warning? Because I'm afraid if the current changes are removed we might hit some other issues (or older ones). We have to go through rigorous testing before going ahead.

Warning indicates there's something wrong in the code.

IMHO phy_mac_interrupt() and PHY_IGNORE_INTERRUPT is the correct
solution. If the phy_mac_interrupt() poll is fixed, I think maybe
old issue which commit cc89c323a30e want to fix won't exist.

Thanks

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-10  9:53           ` Jisheng Zhang
@ 2019-04-10 10:27             ` Marc Zyngier
  2019-04-17  3:49             ` RaghuramChary.Jallipalli
  1 sibling, 0 replies; 12+ messages in thread
From: Marc Zyngier @ 2019-04-10 10:27 UTC (permalink / raw)
  To: Jisheng Zhang, RaghuramChary.Jallipalli, Andrew Lunn, Florian Fainelli
  Cc: Woojung.Huh, UNGLinuxDriver, davem, netdev, linux-usb, linux-kernel

On 10/04/2019 10:53, Jisheng Zhang wrote:
> 
> On Wed, 10 Apr 2019 09:20:38 +0000 wrote:
> 
>>
>>>>>
>>>>> The warning comes from calling generic_handle_irq() in usb tasklet  
>>> context.  
>>>>> This is not correct.
>>>>>
>>>>> Per my understanding, if there's chained irq, we could introduce
>>>>> extra irqdomain. E.g
>>>>>
>>>>> GIC <--> another irqchip controller <--> HW device
>>>>>  
>>>> Correct, IRQ domain is generally used in chained irq controllers.
>>>> Yes, We need to check why irq domain is used in the current driver.
>>>>  
>>>
>>> It's introduced in the commit cc89c323a30e
>>>  
>> Hi Jisheng,
> 
> Hi,
> 
>> I had spent some time to look into the history of commit. The reason for having irq domain in driver is because of the unavailability of real hardware interrupt, here we have USB interrupt pipe which is not actual interrupt.
>> So changes were proposed to have pseudo phy interrupt and handlers in phy lib. But later it was suggested to implement linux interrupt controller in driver itself.
> 
> + Andrew, Florian
> 
> USB net is different with Andrew's case.
> 
> there's no irq at all in usb net
> 
> but in Andrew's case, interrupt is connected to a GPIO line. As is known
> GPIO can behave as irq chip.
> 
>> You can see the archive here https://patchwork.ozlabs.org/patch/564511/
> 
> Per my understanding, the purpose is to avoid phy_state_machine() poll
> phy_read_status() to monitor phy link. But as pointed out by Florian,
> phy_mac_interrupt() is intended for that purpose. And the poll should be
> fixed in phy. Since the email was sent in 2016, maybe the bug has been fixed.
> 
>> I want to understand if there is any functionality impact with this warning? Because I'm afraid if the current changes are removed we might hit some other issues (or older ones). We have to go through rigorous testing before going ahead.
> 
> Warning indicates there's something wrong in the code.

Most definitely. This code is completely busted (handling pseudo
interrupts out of a tasklet is a BUG), and things will crash or deadlock
under the right conditions.

> 
> IMHO phy_mac_interrupt() and PHY_IGNORE_INTERRUPT is the correct
> solution. If the phy_mac_interrupt() poll is fixed, I think maybe
> old issue which commit cc89c323a30e want to fix won't exist.

Please also see this[1] thread, which has a potential solution for this.

Thanks,

	M.

[1] https://www.spinics.net/lists/netdev/msg542290.html
-- 
Jazz is not dead. It just smells funny...

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-10  9:53           ` Jisheng Zhang
  2019-04-10 10:27             ` Marc Zyngier
@ 2019-04-17  3:49             ` RaghuramChary.Jallipalli
  2019-04-17  8:22               ` Jisheng Zhang
  1 sibling, 1 reply; 12+ messages in thread
From: RaghuramChary.Jallipalli @ 2019-04-17  3:49 UTC (permalink / raw)
  To: Jisheng.Zhang, andrew, f.fainelli
  Cc: marc.zyngier, Woojung.Huh, UNGLinuxDriver, davem, netdev,
	linux-usb, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 930 bytes --]

Hi Jisheng,

> > I want to understand if there is any functionality impact with this warning?
> Because I'm afraid if the current changes are removed we might hit some
> other issues (or older ones). We have to go through rigorous testing before
> going ahead.
> 
> Warning indicates there's something wrong in the code.

Agree that the code is incorrect. Just wanted to understand if you had any functionality impact too.

> 
> IMHO phy_mac_interrupt() and PHY_IGNORE_INTERRUPT is the correct
> solution. If the phy_mac_interrupt() poll is fixed, I think maybe old issue
> which commit cc89c323a30e want to fix won't exist.
> 

I tried to reproduce the problem in PC environment but did not see the warnings. 
However, I tried your patch and did plug/unplug tests(rmmod/insmod continuously) and observed call traces from kernel. I don't see these traces without your patch.
Attached log.

Thanks,
-Raghu


[-- Attachment #2: log7800_withpatch --]
[-- Type: application/octet-stream, Size: 29417 bytes --]

raghu@raghu:~/workspace/lan7800/linux/drivers/net/usb$ sudo dmesg 
[ 4286.775206] lan78xx: loading out-of-tree module taints kernel.
[ 4286.775264] lan78xx: module verification failed: signature and/or required key missing - tainting kernel
[ 4286.776541] bus: 'usb': add driver lan78xx
[ 4286.776551] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4286.776553] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4286.776556] lan78xx 2-1:1.0: no default pinctrl state
[ 4287.060308] device: 'usb-002:005': device_add
[ 4287.060318] PM: Adding info for No Bus:usb-002:005
[ 4287.061443] device: 'usb-002:005:01': device_add
[ 4287.061446] bus: 'mdio_bus': add device usb-002:005:01
[ 4287.061450] PM: Adding info for mdio_bus:usb-002:005:01
[ 4287.061458] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4287.061459] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4287.061461] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4287.062903] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4287.062912] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4287.062913] libphy: lan78xx-mdiobus: probed
[ 4287.062921] device: 'eth0': device_add
[ 4287.062943] PM: Adding info for No Bus:eth0
[ 4287.100406] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4287.100442] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4287.100469] usbcore: registered new interface driver lan78xx
[ 4287.101338] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4287.101343] net eth0: renaming to enx00800f780000
[ 4287.138107] ####### Raghu ######## link status 
[ 4289.242404] ####### Raghu ######## link status 
[ 4289.242423] IPv6: ADDRCONF(NETDEV_CHANGE): enx00800f780000: link becomes ready
[ 4325.087375] usbcore: deregistering interface driver lan78xx
[ 4325.087380] bus: 'usb': remove driver lan78xx
[ 4325.087751] ####### Raghu ######## link status 
[ 4325.088681] PM: Removing info for No Bus:enx00800f780000
[ 4325.109111] bus: 'mdio_bus': remove device usb-002:005:01
[ 4325.109159] PM: Removing info for mdio_bus:usb-002:005:01
[ 4325.109192] PM: Removing info for No Bus:usb-002:005
[ 4325.110035] driver: 'lan78xx': driver_release
[ 4325.144881] bus: 'usb': add driver lan78xx
[ 4325.144892] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4325.144895] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4325.144899] lan78xx 2-1:1.0: no default pinctrl state
[ 4325.428406] device: 'usb-002:005': device_add
[ 4325.428416] PM: Adding info for No Bus:usb-002:005
[ 4325.429535] device: 'usb-002:005:01': device_add
[ 4325.429538] bus: 'mdio_bus': add device usb-002:005:01
[ 4325.429555] PM: Adding info for mdio_bus:usb-002:005:01
[ 4325.429563] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4325.429578] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4325.429580] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4325.431079] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4325.431089] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4325.431090] libphy: lan78xx-mdiobus: probed
[ 4325.431098] device: 'eth0': device_add
[ 4325.431119] PM: Adding info for No Bus:eth0
[ 4325.468243] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4325.468280] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4325.468305] usbcore: registered new interface driver lan78xx
[ 4325.469123] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4325.469130] net eth0: renaming to enx00800f780000
[ 4325.513820] usbcore: deregistering interface driver lan78xx
[ 4325.513833] bus: 'usb': remove driver lan78xx
[ 4325.515185] PM: Removing info for No Bus:enx00800f780000
[ 4325.557374] bus: 'mdio_bus': remove device usb-002:005:01
[ 4325.557424] PM: Removing info for mdio_bus:usb-002:005:01
[ 4325.557456] PM: Removing info for No Bus:usb-002:005
[ 4325.558146] driver: 'lan78xx': driver_release
[ 4325.604185] bus: 'usb': add driver lan78xx
[ 4325.604201] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4325.604205] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4325.604211] lan78xx 2-1:1.0: no default pinctrl state
[ 4325.887876] device: 'usb-002:005': device_add
[ 4325.887885] PM: Adding info for No Bus:usb-002:005
[ 4325.888987] device: 'usb-002:005:01': device_add
[ 4325.889000] bus: 'mdio_bus': add device usb-002:005:01
[ 4325.889004] PM: Adding info for mdio_bus:usb-002:005:01
[ 4325.889012] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4325.889013] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4325.889027] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4325.890404] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4325.890415] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4325.890416] libphy: lan78xx-mdiobus: probed
[ 4325.890424] device: 'eth0': device_add
[ 4325.890445] PM: Adding info for No Bus:eth0
[ 4325.928307] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4325.928348] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4325.928378] usbcore: registered new interface driver lan78xx
[ 4325.929453] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4325.929459] net eth0: renaming to enx00800f780000
[ 4325.955837] usbcore: deregistering interface driver lan78xx
[ 4325.955842] bus: 'usb': remove driver lan78xx
[ 4325.956632] PM: Removing info for No Bus:enx00800f780000
[ 4326.013329] bus: 'mdio_bus': remove device usb-002:005:01
[ 4326.013377] PM: Removing info for mdio_bus:usb-002:005:01
[ 4326.013417] PM: Removing info for No Bus:usb-002:005
[ 4326.014204] driver: 'lan78xx': driver_release
[ 4326.072325] bus: 'usb': add driver lan78xx
[ 4326.072340] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4326.072344] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4326.072350] lan78xx 2-1:1.0: no default pinctrl state
[ 4326.355654] device: 'usb-002:005': device_add
[ 4326.355663] PM: Adding info for No Bus:usb-002:005
[ 4326.356749] device: 'usb-002:005:01': device_add
[ 4326.356753] bus: 'mdio_bus': add device usb-002:005:01
[ 4326.356759] PM: Adding info for mdio_bus:usb-002:005:01
[ 4326.356768] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4326.356769] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4326.356772] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4326.358183] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4326.358193] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4326.358194] libphy: lan78xx-mdiobus: probed
[ 4326.358203] device: 'eth0': device_add
[ 4326.358224] PM: Adding info for No Bus:eth0
[ 4326.394867] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4326.394911] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4326.394940] usbcore: registered new interface driver lan78xx
[ 4326.395887] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4326.395891] net eth0: renaming to enx00800f780000
[ 4326.439753] usbcore: deregistering interface driver lan78xx
[ 4326.439765] bus: 'usb': remove driver lan78xx
[ 4326.441821] PM: Removing info for No Bus:enx00800f780000
[ 4326.485126] bus: 'mdio_bus': remove device usb-002:005:01
[ 4326.485159] PM: Removing info for mdio_bus:usb-002:005:01
[ 4326.485194] PM: Removing info for No Bus:usb-002:005
[ 4326.485665] driver: 'lan78xx': driver_release
[ 4326.530162] bus: 'usb': add driver lan78xx
[ 4326.530175] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4326.530178] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4326.530183] lan78xx 2-1:1.0: no default pinctrl state
[ 4326.813720] device: 'usb-002:005': device_add
[ 4326.813728] PM: Adding info for No Bus:usb-002:005
[ 4326.814827] device: 'usb-002:005:01': device_add
[ 4326.814831] bus: 'mdio_bus': add device usb-002:005:01
[ 4326.814849] PM: Adding info for mdio_bus:usb-002:005:01
[ 4326.814857] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4326.814857] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4326.814859] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4326.816177] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4326.816185] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4326.816186] libphy: lan78xx-mdiobus: probed
[ 4326.816208] device: 'eth0': device_add
[ 4326.816229] PM: Adding info for No Bus:eth0
[ 4326.853157] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4326.853199] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4326.853230] usbcore: registered new interface driver lan78xx
[ 4326.854081] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4326.854085] net eth0: renaming to enx00800f780000
[ 4326.881474] usbcore: deregistering interface driver lan78xx
[ 4326.881488] bus: 'usb': remove driver lan78xx
[ 4326.883655] PM: Removing info for No Bus:enx00800f780000
[ 4326.921321] bus: 'mdio_bus': remove device usb-002:005:01
[ 4326.921362] PM: Removing info for mdio_bus:usb-002:005:01
[ 4326.921390] PM: Removing info for No Bus:usb-002:005
[ 4326.921847] driver: 'lan78xx': driver_release
[ 4326.959010] bus: 'usb': add driver lan78xx
[ 4326.959025] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4326.959029] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4326.959035] lan78xx 2-1:1.0: no default pinctrl state
[ 4327.242638] device: 'usb-002:005': device_add
[ 4327.242647] PM: Adding info for No Bus:usb-002:005
[ 4327.243824] device: 'usb-002:005:01': device_add
[ 4327.243827] bus: 'mdio_bus': add device usb-002:005:01
[ 4327.243845] PM: Adding info for mdio_bus:usb-002:005:01
[ 4327.243851] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4327.243852] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4327.243854] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4327.245151] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4327.245158] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4327.245159] libphy: lan78xx-mdiobus: probed
[ 4327.245167] device: 'eth0': device_add
[ 4327.245189] PM: Adding info for No Bus:eth0
[ 4327.284937] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4327.284952] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4327.284962] usbcore: registered new interface driver lan78xx
[ 4327.285318] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4327.285319] net eth0: renaming to enx00800f780000
[ 4327.312404] usbcore: deregistering interface driver lan78xx
[ 4327.312410] bus: 'usb': remove driver lan78xx
[ 4327.313212] PM: Removing info for No Bus:enx00800f780000
[ 4327.345371] bus: 'mdio_bus': remove device usb-002:005:01
[ 4327.345418] PM: Removing info for mdio_bus:usb-002:005:01
[ 4327.345449] PM: Removing info for No Bus:usb-002:005
[ 4327.346371] driver: 'lan78xx': driver_release
[ 4327.391013] bus: 'usb': add driver lan78xx
[ 4327.391028] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4327.391032] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4327.391038] lan78xx 2-1:1.0: no default pinctrl state
[ 4327.674601] device: 'usb-002:005': device_add
[ 4327.674610] PM: Adding info for No Bus:usb-002:005
[ 4327.675710] device: 'usb-002:005:01': device_add
[ 4327.675713] bus: 'mdio_bus': add device usb-002:005:01
[ 4327.675718] PM: Adding info for mdio_bus:usb-002:005:01
[ 4327.675737] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4327.675738] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4327.675740] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4327.677150] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4327.677159] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4327.677161] libphy: lan78xx-mdiobus: probed
[ 4327.677169] device: 'eth0': device_add
[ 4327.677200] PM: Adding info for No Bus:eth0
[ 4327.714013] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4327.714054] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4327.714081] usbcore: registered new interface driver lan78xx
[ 4327.714955] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4327.714959] net eth0: renaming to enx00800f780000
[ 4327.741006] usbcore: deregistering interface driver lan78xx
[ 4327.741021] bus: 'usb': remove driver lan78xx
[ 4327.743986] PM: Removing info for No Bus:enx00800f780000
[ 4327.777209] bus: 'mdio_bus': remove device usb-002:005:01
[ 4327.777257] PM: Removing info for mdio_bus:usb-002:005:01
[ 4327.777289] PM: Removing info for No Bus:usb-002:005
[ 4327.778019] driver: 'lan78xx': driver_release
[ 4327.809676] bus: 'usb': add driver lan78xx
[ 4327.809690] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4327.809694] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4327.809699] lan78xx 2-1:1.0: no default pinctrl state
[ 4328.092816] device: 'usb-002:005': device_add
[ 4328.092824] PM: Adding info for No Bus:usb-002:005
[ 4328.093876] device: 'usb-002:005:01': device_add
[ 4328.093879] bus: 'mdio_bus': add device usb-002:005:01
[ 4328.093883] PM: Adding info for mdio_bus:usb-002:005:01
[ 4328.093890] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4328.093891] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4328.093893] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4328.095176] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4328.095186] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4328.095187] libphy: lan78xx-mdiobus: probed
[ 4328.095194] device: 'eth0': device_add
[ 4328.095214] PM: Adding info for No Bus:eth0
[ 4328.132276] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4328.132315] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4328.132342] usbcore: registered new interface driver lan78xx
[ 4328.133264] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4328.133268] net eth0: renaming to enx00800f780000
[ 4328.173751] usbcore: deregistering interface driver lan78xx
[ 4328.173768] bus: 'usb': remove driver lan78xx
[ 4328.175733] PM: Removing info for No Bus:enx00800f780000
[ 4328.205229] bus: 'mdio_bus': remove device usb-002:005:01
[ 4328.205276] PM: Removing info for mdio_bus:usb-002:005:01
[ 4328.205315] PM: Removing info for No Bus:usb-002:005
[ 4328.206064] driver: 'lan78xx': driver_release
[ 4328.243102] bus: 'usb': add driver lan78xx
[ 4328.243118] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4328.243122] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4328.243128] lan78xx 2-1:1.0: no default pinctrl state
[ 4328.527216] device: 'usb-002:005': device_add
[ 4328.527225] PM: Adding info for No Bus:usb-002:005
[ 4328.528213] device: 'usb-002:005:01': device_add
[ 4328.528229] bus: 'mdio_bus': add device usb-002:005:01
[ 4328.528232] PM: Adding info for mdio_bus:usb-002:005:01
[ 4328.528240] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4328.528240] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4328.528242] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4328.529720] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4328.529732] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4328.529733] libphy: lan78xx-mdiobus: probed
[ 4328.529741] device: 'eth0': device_add
[ 4328.529762] PM: Adding info for No Bus:eth0
[ 4328.566952] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4328.566995] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4328.567023] usbcore: registered new interface driver lan78xx
[ 4328.568030] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4328.568034] net eth0: renaming to enx00800f780000
[ 4328.597353] usbcore: deregistering interface driver lan78xx
[ 4328.597366] bus: 'usb': remove driver lan78xx
[ 4328.600445] PM: Removing info for No Bus:enx00800f780000
[ 4328.625094] bus: 'mdio_bus': remove device usb-002:005:01
[ 4328.625137] PM: Removing info for mdio_bus:usb-002:005:01
[ 4328.625166] PM: Removing info for No Bus:usb-002:005
[ 4328.625964] driver: 'lan78xx': driver_release
[ 4328.649716] bus: 'usb': add driver lan78xx
[ 4328.649730] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4328.649733] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4328.649739] lan78xx 2-1:1.0: no default pinctrl state
[ 4328.932969] device: 'usb-002:005': device_add
[ 4328.932978] PM: Adding info for No Bus:usb-002:005
[ 4328.934069] device: 'usb-002:005:01': device_add
[ 4328.934072] bus: 'mdio_bus': add device usb-002:005:01
[ 4328.934090] PM: Adding info for mdio_bus:usb-002:005:01
[ 4328.934098] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4328.934098] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4328.934100] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4328.935508] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4328.935518] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4328.935519] libphy: lan78xx-mdiobus: probed
[ 4328.935528] device: 'eth0': device_add
[ 4328.935555] PM: Adding info for No Bus:eth0
[ 4328.974848] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4328.974863] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4328.974872] usbcore: registered new interface driver lan78xx
[ 4328.975254] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4328.975256] net eth0: renaming to enx00800f780000
[ 4329.008899] usbcore: deregistering interface driver lan78xx
[ 4329.008906] bus: 'usb': remove driver lan78xx
[ 4329.010353] PM: Removing info for No Bus:enx00800f780000
[ 4329.073355] bus: 'mdio_bus': remove device usb-002:005:01
[ 4329.073402] PM: Removing info for mdio_bus:usb-002:005:01
[ 4329.073433] PM: Removing info for No Bus:usb-002:005
[ 4329.074060] driver: 'lan78xx': driver_release
[ 4329.111401] bus: 'usb': add driver lan78xx
[ 4329.111417] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4329.111420] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4329.111426] lan78xx 2-1:1.0: no default pinctrl state
[ 4329.395865] device: 'usb-002:005': device_add
[ 4329.395874] PM: Adding info for No Bus:usb-002:005
[ 4329.396879] device: 'usb-002:005:01': device_add
[ 4329.396882] bus: 'mdio_bus': add device usb-002:005:01
[ 4329.396886] PM: Adding info for mdio_bus:usb-002:005:01
[ 4329.396892] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4329.396893] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4329.396895] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4329.398255] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4329.398264] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4329.398265] libphy: lan78xx-mdiobus: probed
[ 4329.398273] device: 'eth0': device_add
[ 4329.398293] PM: Adding info for No Bus:eth0
[ 4329.434922] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4329.434966] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4329.435002] usbcore: registered new interface driver lan78xx
[ 4329.435857] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4329.435861] net eth0: renaming to enx00800f780000
[ 4329.456438] usbcore: deregistering interface driver lan78xx
[ 4329.456451] bus: 'usb': remove driver lan78xx
[ 4329.457543] PM: Removing info for No Bus:enx00800f780000
[ 4329.489151] bus: 'mdio_bus': remove device usb-002:005:01
[ 4329.489195] PM: Removing info for mdio_bus:usb-002:005:01
[ 4329.489226] PM: Removing info for No Bus:usb-002:005
[ 4329.489670] driver: 'lan78xx': driver_release
[ 4329.544069] bus: 'usb': add driver lan78xx
[ 4329.544085] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4329.544088] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4329.544095] lan78xx 2-1:1.0: no default pinctrl state
[ 4329.827584] device: 'usb-002:005': device_add
[ 4329.827593] PM: Adding info for No Bus:usb-002:005
[ 4329.828673] device: 'usb-002:005:01': device_add
[ 4329.828677] bus: 'mdio_bus': add device usb-002:005:01
[ 4329.828681] PM: Adding info for mdio_bus:usb-002:005:01
[ 4329.828689] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4329.828690] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4329.828692] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4329.829962] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4329.829971] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4329.829972] libphy: lan78xx-mdiobus: probed
[ 4329.829981] device: 'eth0': device_add
[ 4329.830006] PM: Adding info for No Bus:eth0
[ 4329.866890] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4329.866931] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4329.866958] usbcore: registered new interface driver lan78xx
[ 4329.867845] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4329.867850] net eth0: renaming to enx00800f780000
[ 4329.917116] usbcore: deregistering interface driver lan78xx
[ 4329.917129] bus: 'usb': remove driver lan78xx
[ 4329.918456] PM: Removing info for No Bus:enx00800f780000
[ 4329.961342] bus: 'mdio_bus': remove device usb-002:005:01
[ 4329.961389] PM: Removing info for mdio_bus:usb-002:005:01
[ 4329.961421] PM: Removing info for No Bus:usb-002:005
[ 4329.962021] driver: 'lan78xx': driver_release
[ 4329.999853] bus: 'usb': add driver lan78xx
[ 4329.999870] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 4329.999874] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 4329.999880] lan78xx 2-1:1.0: no default pinctrl state
[ 4330.283875] device: 'usb-002:005': device_add
[ 4330.283884] PM: Adding info for No Bus:usb-002:005
[ 4330.284985] device: 'usb-002:005:01': device_add
[ 4330.284999] bus: 'mdio_bus': add device usb-002:005:01
[ 4330.285006] PM: Adding info for mdio_bus:usb-002:005:01
[ 4330.285027] bus: 'mdio_bus': driver_probe_device: matched device usb-002:005:01 with driver Microchip LAN88xx
[ 4330.285028] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:005:01
[ 4330.285031] Microchip LAN88xx usb-002:005:01: no default pinctrl state
[ 4330.286406] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:005:01'
[ 4330.286414] bus: 'mdio_bus': really_probe: bound device usb-002:005:01 to driver Microchip LAN88xx
[ 4330.286415] libphy: lan78xx-mdiobus: probed
[ 4330.286423] device: 'eth0': device_add
[ 4330.286445] PM: Adding info for No Bus:eth0
[ 4330.322853] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 4330.322894] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 4330.322922] usbcore: registered new interface driver lan78xx
[ 4330.323773] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 4330.323777] net eth0: renaming to enx00800f780000
[ 4330.367596] usbcore: deregistering interface driver lan78xx
[ 4330.367600] bus: 'usb': remove driver lan78xx
[ 4330.369040] PM: Removing info for No Bus:enx00800f780000
[ 4330.370588] BUG: unable to handle kernel NULL pointer dereference at 0000000000000048
[ 4330.370591] #PF error: [WRITE]
[ 4330.370592] PGD 0 P4D 0 
[ 4330.370595] Oops: 0002 [#1] SMP PTI
[ 4330.370597] CPU: 1 PID: 3424 Comm: kworker/u16:1 Tainted: G           OE     5.1.0-rc4+ #1
[ 4330.370599] Hardware name: Dell Inc. OptiPlex 7050/0D24M8, BIOS 1.7.9 01/30/2018
[ 4330.370602] Workqueue: events_power_efficient phy_state_machine
[ 4330.370606] RIP: 0010:netif_carrier_off+0x5/0x30
[ 4330.370608] Code: 5b 5d 41 5c 41 5d c3 48 c7 00 00 00 00 00 5b 5d 41 5c 41 5d e9 bc 65 89 ff 66 90 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <f0> 48 0f ba 6f 48 02 72 09 80 bf d0 04 00 00 00 75 02 f3 c3 f0 ff
[ 4330.370610] RSP: 0018:ffffbf6c439abdf8 EFLAGS: 00010246
[ 4330.370611] RAX: 0000000000000000 RBX: ffff9b5af6a43800 RCX: ffffffffbe8df230
[ 4330.370613] RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000000
[ 4330.370614] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[ 4330.370615] R10: 0000000000000001 R11: 0000000000000025 R12: ffff9b5af6a43c20
[ 4330.370617] R13: ffff9b5af6a43800 R14: ffff9b5aa57ef780 R15: 0ffff9b5afd457b0
[ 4330.370619] FS:  0000000000000000(0000) GS:ffff9b5afda40000(0000) knlGS:0000000000000000
[ 4330.370620] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 4330.370622] CR2: 0000000000000048 CR3: 000000081a97c002 CR4: 00000000003606e0
[ 4330.370623] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 4330.370625] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 4330.370626] Call Trace:
[ 4330.370629]  phy_link_change+0x22/0x50
[ 4330.370632]  phy_check_link_status+0x8a/0xe0
[ 4330.370634]  phy_start_aneg+0xe2/0x120
[ 4330.370636]  phy_state_machine+0x81/0x230
[ 4330.370639]  process_one_work+0x15e/0x3f0
[ 4330.370642]  worker_thread+0x4c/0x440
[ 4330.370645]  ? rescuer_thread+0x350/0x350
[ 4330.370647]  kthread+0xf8/0x130
[ 4330.370649]  ? kthread_destroy_worker+0x40/0x40
[ 4330.370651]  ret_from_fork+0x35/0x40
[ 4330.370653] Modules linked in: lan78xx(OE-) input_leds microchip intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_codec_hdmi kvm_intel snd_hda_codec_realtek snd_hda_codec_generic kvm ledtrig_audio snd_hda_intel snd_hda_codec irqbypass snd_hda_core snd_hwdep snd_pcm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel snd_seq_midi aesni_intel aes_x86_64 crypto_simd snd_seq_midi_event cryptd snd_rawmidi glue_helper snd_seq i2c_designware_platform i2c_designware_core intel_cstate snd_seq_device intel_rapl_perf snd_timer snd soundcore dell_wmi idma64 dell_smbios mei_me serio_raw virt_dma dcdbas dell_wmi_aio dell_wmi_descriptor wmi_bmof mei mac_hid sparse_keymap intel_lpss_pci intel_lpss acpi_pad parport_pc sunrpc ppdev lp parport autofs4 i915 hid_generic usbhid hid i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm e1000e psmouse ptp ahci pps_core libahci wmi video [last unloaded: lan78xx]
[ 4330.370681] CR2: 0000000000000048
[ 4330.370683] ---[ end trace 51cb611db65d71b2 ]---
[ 4330.370685] RIP: 0010:netif_carrier_off+0x5/0x30
[ 4330.370687] Code: 5b 5d 41 5c 41 5d c3 48 c7 00 00 00 00 00 5b 5d 41 5c 41 5d e9 bc 65 89 ff 66 90 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <f0> 48 0f ba 6f 48 02 72 09 80 bf d0 04 00 00 00 75 02 f3 c3 f0 ff
[ 4330.370688] RSP: 0018:ffffbf6c439abdf8 EFLAGS: 00010246
[ 4330.370690] RAX: 0000000000000000 RBX: ffff9b5af6a43800 RCX: ffffffffbe8df230
[ 4330.370691] RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000000
[ 4330.370693] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[ 4330.370694] R10: 0000000000000001 R11: 0000000000000025 R12: ffff9b5af6a43c20
[ 4330.370695] R13: ffff9b5af6a43800 R14: ffff9b5aa57ef780 R15: 0ffff9b5afd457b0
[ 4330.370697] FS:  0000000000000000(0000) GS:ffff9b5afda40000(0000) knlGS:0000000000000000
[ 4330.370698] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 4330.370700] CR2: 0000000000000048 CR3: 000000081a97c002 CR4: 00000000003606e0
[ 4330.370701] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 4330.370703] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 4330.413392] bus: 'mdio_bus': remove device usb-002:005:01
raghu@raghu:~/workspace/lan7800/linux/drivers/net/usb$ 
raghu@raghu:~/workspace/lan7800/linux/drivers/net/usb$ 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-17  3:49             ` RaghuramChary.Jallipalli
@ 2019-04-17  8:22               ` Jisheng Zhang
  2019-04-22  5:32                 ` RaghuramChary.Jallipalli
  0 siblings, 1 reply; 12+ messages in thread
From: Jisheng Zhang @ 2019-04-17  8:22 UTC (permalink / raw)
  To: RaghuramChary.Jallipalli
  Cc: andrew, f.fainelli, marc.zyngier, Woojung.Huh, UNGLinuxDriver,
	davem, netdev, linux-usb, linux-kernel

On Wed, 17 Apr 2019 03:49:46 +0000 <RaghuramChary.Jallipalli@microchip.com> wrote:

> 
> Hi Jisheng,

Hi,

> 
> > > I want to understand if there is any functionality impact with this warning?  
> > Because I'm afraid if the current changes are removed we might hit some
> > other issues (or older ones). We have to go through rigorous testing before
> > going ahead.
> >
> > Warning indicates there's something wrong in the code.  
> 
> Agree that the code is incorrect. Just wanted to understand if you had any functionality impact too.
> 
> >
> > IMHO phy_mac_interrupt() and PHY_IGNORE_INTERRUPT is the correct
> > solution. If the phy_mac_interrupt() poll is fixed, I think maybe old issue
> > which commit cc89c323a30e want to fix won't exist.
> >  
> 
> I tried to reproduce the problem in PC environment but did not see the warnings.
> However, I tried your patch and did plug/unplug tests(rmmod/insmod continuously) and observed call traces from kernel. I don't see these traces without your patch.
> Attached log.

I believe this is another bug in lan78xx driver: after phy_disconnect() if
there's intr urb coming, we will call phy_mac_interrupt, so trigger
phy_state_machine(), but now the phydev->attached_dev is NULL, so NULL
pointer deference. Can you please try below patch:

--->8
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 246a0d1bbc6c..27d6fbdd58c1 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -3467,6 +3467,8 @@ static void lan78xx_disconnect(struct usb_interface *intf)
 	net = dev->net;
 	phydev = net->phydev;
 
+	usb_kill_urb(dev->urb_intr);
+
 	phy_unregister_fixup_for_uid(PHY_KSZ9031RNX, 0xfffffff0);
 	phy_unregister_fixup_for_uid(PHY_LAN8835, 0xfffffff0);
 
@@ -3483,7 +3485,6 @@ static void lan78xx_disconnect(struct usb_interface *intf)
 
 	lan78xx_unbind(dev, intf);
 
-	usb_kill_urb(dev->urb_intr);
 	usb_free_urb(dev->urb_intr);
 
 	free_netdev(net);


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* RE: [PATCH] net: lan78xx: fix "enabled interrupts" warninig
  2019-04-17  8:22               ` Jisheng Zhang
@ 2019-04-22  5:32                 ` RaghuramChary.Jallipalli
  0 siblings, 0 replies; 12+ messages in thread
From: RaghuramChary.Jallipalli @ 2019-04-22  5:32 UTC (permalink / raw)
  To: Jisheng.Zhang
  Cc: andrew, f.fainelli, marc.zyngier, Woojung.Huh, UNGLinuxDriver,
	davem, netdev, linux-usb, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 377 bytes --]

> I believe this is another bug in lan78xx driver: after phy_disconnect() if
> there's intr urb coming, we will call phy_mac_interrupt, so trigger
> phy_state_machine(), but now the phydev->attached_dev is NULL, so NULL
> pointer deference. Can you please try below patch:
> 
Thanks Jisheng.
I still see the call trace even with updated patch. Log attached.

Thanks. 

[-- Attachment #2: log7800_updated_patch --]
[-- Type: application/octet-stream, Size: 18247 bytes --]

raghu@raghu:~$ sudo dmesg 
[ 1423.187994] usbcore: deregistering interface driver lan78xx
[ 1423.187998] bus: 'usb': remove driver lan78xx
[ 1423.190060] PM: Removing info for No Bus:enx00800f780000
[ 1423.238693] bus: 'mdio_bus': remove device usb-002:002:01
[ 1423.238708] PM: Removing info for mdio_bus:usb-002:002:01
[ 1423.238717] PM: Removing info for No Bus:usb-002:002
[ 1423.239009] driver: 'lan78xx': driver_release
[ 1433.729159] lan78xx: module verification failed: signature and/or required key missing - tainting kernel
[ 1433.729979] bus: 'usb': add driver lan78xx
[ 1433.729984] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 1433.729985] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 1433.729988] lan78xx 2-1:1.0: no default pinctrl state
[ 1434.013659] device: 'usb-002:002': device_add
[ 1434.013668] PM: Adding info for No Bus:usb-002:002
[ 1434.014615] device: 'usb-002:002:01': device_add
[ 1434.014619] bus: 'mdio_bus': add device usb-002:002:01
[ 1434.014625] PM: Adding info for mdio_bus:usb-002:002:01
[ 1434.014633] bus: 'mdio_bus': driver_probe_device: matched device usb-002:002:01 with driver Microchip LAN88xx
[ 1434.014634] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:002:01
[ 1434.014636] Microchip LAN88xx usb-002:002:01: no default pinctrl state
[ 1434.016151] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:002:01'
[ 1434.016162] bus: 'mdio_bus': really_probe: bound device usb-002:002:01 to driver Microchip LAN88xx
[ 1434.016164] libphy: lan78xx-mdiobus: probed
[ 1434.016187] device: 'eth0': device_add
[ 1434.016211] PM: Adding info for No Bus:eth0
[ 1434.053899] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 1434.053939] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 1434.053968] usbcore: registered new interface driver lan78xx
[ 1434.055060] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 1434.055065] net eth0: renaming to enx00800f780000
[ 1434.105190] ####### Raghu ######## link status 
[ 1436.195450] ####### Raghu ######## link status 
[ 1436.195471] IPv6: ADDRCONF(NETDEV_CHANGE): enx00800f780000: link becomes ready
[ 1489.667838] usbcore: deregistering interface driver lan78xx
[ 1489.667843] bus: 'usb': remove driver lan78xx
[ 1489.668416] ####### Raghu ######## link status 
[ 1489.669584] PM: Removing info for No Bus:enx00800f780000
[ 1489.706798] bus: 'mdio_bus': remove device usb-002:002:01
[ 1489.706834] PM: Removing info for mdio_bus:usb-002:002:01
[ 1489.706858] PM: Removing info for No Bus:usb-002:002
[ 1489.707595] driver: 'lan78xx': driver_release
[ 1489.759604] bus: 'usb': add driver lan78xx
[ 1489.759611] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 1489.759613] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 1489.759616] lan78xx 2-1:1.0: no default pinctrl state
[ 1490.043314] device: 'usb-002:002': device_add
[ 1490.043323] PM: Adding info for No Bus:usb-002:002
[ 1490.044410] device: 'usb-002:002:01': device_add
[ 1490.044427] bus: 'mdio_bus': add device usb-002:002:01
[ 1490.044432] PM: Adding info for mdio_bus:usb-002:002:01
[ 1490.044440] bus: 'mdio_bus': driver_probe_device: matched device usb-002:002:01 with driver Microchip LAN88xx
[ 1490.044441] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:002:01
[ 1490.044443] Microchip LAN88xx usb-002:002:01: no default pinctrl state
[ 1490.045728] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:002:01'
[ 1490.045737] bus: 'mdio_bus': really_probe: bound device usb-002:002:01 to driver Microchip LAN88xx
[ 1490.045738] libphy: lan78xx-mdiobus: probed
[ 1490.045747] device: 'eth0': device_add
[ 1490.045768] PM: Adding info for No Bus:eth0
[ 1490.082815] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 1490.082858] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 1490.082884] usbcore: registered new interface driver lan78xx
[ 1490.083916] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 1490.083921] net eth0: renaming to enx00800f780000
[ 1490.119485] usbcore: deregistering interface driver lan78xx
[ 1490.119501] bus: 'usb': remove driver lan78xx
[ 1490.121484] PM: Removing info for No Bus:enx00800f780000
[ 1490.163013] bus: 'mdio_bus': remove device usb-002:002:01
[ 1490.163066] PM: Removing info for mdio_bus:usb-002:002:01
[ 1490.163102] PM: Removing info for No Bus:usb-002:002
[ 1490.163972] driver: 'lan78xx': driver_release
[ 1490.209265] bus: 'usb': add driver lan78xx
[ 1490.209281] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 1490.209285] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 1490.209291] lan78xx 2-1:1.0: no default pinctrl state
[ 1490.492647] device: 'usb-002:002': device_add
[ 1490.492657] PM: Adding info for No Bus:usb-002:002
[ 1490.493773] device: 'usb-002:002:01': device_add
[ 1490.493776] bus: 'mdio_bus': add device usb-002:002:01
[ 1490.493795] PM: Adding info for mdio_bus:usb-002:002:01
[ 1490.493815] bus: 'mdio_bus': driver_probe_device: matched device usb-002:002:01 with driver Microchip LAN88xx
[ 1490.493817] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:002:01
[ 1490.493819] Microchip LAN88xx usb-002:002:01: no default pinctrl state
[ 1490.495139] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:002:01'
[ 1490.495148] bus: 'mdio_bus': really_probe: bound device usb-002:002:01 to driver Microchip LAN88xx
[ 1490.495150] libphy: lan78xx-mdiobus: probed
[ 1490.495159] device: 'eth0': device_add
[ 1490.495186] PM: Adding info for No Bus:eth0
[ 1490.531636] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 1490.531682] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 1490.531725] usbcore: registered new interface driver lan78xx
[ 1490.532625] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 1490.532630] net eth0: renaming to enx00800f780000
[ 1490.566942] usbcore: deregistering interface driver lan78xx
[ 1490.566955] bus: 'usb': remove driver lan78xx
[ 1490.569041] PM: Removing info for No Bus:enx00800f780000
[ 1490.619056] bus: 'mdio_bus': remove device usb-002:002:01
[ 1490.619108] PM: Removing info for mdio_bus:usb-002:002:01
[ 1490.619145] PM: Removing info for No Bus:usb-002:002
[ 1490.619947] driver: 'lan78xx': driver_release
[ 1490.666112] bus: 'usb': add driver lan78xx
[ 1490.666128] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 1490.666132] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 1490.666138] lan78xx 2-1:1.0: no default pinctrl state
[ 1490.950111] device: 'usb-002:002': device_add
[ 1490.950120] PM: Adding info for No Bus:usb-002:002
[ 1490.951329] device: 'usb-002:002:01': device_add
[ 1490.951333] bus: 'mdio_bus': add device usb-002:002:01
[ 1490.951353] PM: Adding info for mdio_bus:usb-002:002:01
[ 1490.951361] bus: 'mdio_bus': driver_probe_device: matched device usb-002:002:01 with driver Microchip LAN88xx
[ 1490.951362] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:002:01
[ 1490.951365] Microchip LAN88xx usb-002:002:01: no default pinctrl state
[ 1490.952702] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:002:01'
[ 1490.952711] bus: 'mdio_bus': really_probe: bound device usb-002:002:01 to driver Microchip LAN88xx
[ 1490.952713] libphy: lan78xx-mdiobus: probed
[ 1490.952723] device: 'eth0': device_add
[ 1490.952749] PM: Adding info for No Bus:eth0
[ 1490.990128] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 1490.990168] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 1490.990202] usbcore: registered new interface driver lan78xx
[ 1490.991015] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 1490.991019] net eth0: renaming to enx00800f780000
[ 1491.020659] usbcore: deregistering interface driver lan78xx
[ 1491.020669] bus: 'usb': remove driver lan78xx
[ 1491.021688] PM: Removing info for No Bus:enx00800f780000
[ 1491.058773] bus: 'mdio_bus': remove device usb-002:002:01
[ 1491.058802] PM: Removing info for mdio_bus:usb-002:002:01
[ 1491.058826] PM: Removing info for No Bus:usb-002:002
[ 1491.059534] driver: 'lan78xx': driver_release
[ 1491.106696] bus: 'usb': add driver lan78xx
[ 1491.106709] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 1491.106712] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 1491.106717] lan78xx 2-1:1.0: no default pinctrl state
[ 1491.390738] device: 'usb-002:002': device_add
[ 1491.390747] PM: Adding info for No Bus:usb-002:002
[ 1491.391805] device: 'usb-002:002:01': device_add
[ 1491.391808] bus: 'mdio_bus': add device usb-002:002:01
[ 1491.391830] PM: Adding info for mdio_bus:usb-002:002:01
[ 1491.391837] bus: 'mdio_bus': driver_probe_device: matched device usb-002:002:01 with driver Microchip LAN88xx
[ 1491.391838] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:002:01
[ 1491.391841] Microchip LAN88xx usb-002:002:01: no default pinctrl state
[ 1491.393157] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:002:01'
[ 1491.393166] bus: 'mdio_bus': really_probe: bound device usb-002:002:01 to driver Microchip LAN88xx
[ 1491.393168] libphy: lan78xx-mdiobus: probed
[ 1491.393177] device: 'eth0': device_add
[ 1491.393205] PM: Adding info for No Bus:eth0
[ 1491.431690] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 1491.431709] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 1491.431720] usbcore: registered new interface driver lan78xx
[ 1491.432218] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 1491.432220] net eth0: renaming to enx00800f780000
[ 1491.465433] usbcore: deregistering interface driver lan78xx
[ 1491.465440] bus: 'usb': remove driver lan78xx
[ 1491.466947] PM: Removing info for No Bus:enx00800f780000
[ 1491.502882] bus: 'mdio_bus': remove device usb-002:002:01
[ 1491.502925] PM: Removing info for mdio_bus:usb-002:002:01
[ 1491.502957] PM: Removing info for No Bus:usb-002:002
[ 1491.503594] driver: 'lan78xx': driver_release
[ 1491.551869] bus: 'usb': add driver lan78xx
[ 1491.551885] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 1491.551889] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 1491.551894] lan78xx 2-1:1.0: no default pinctrl state
[ 1491.835714] device: 'usb-002:002': device_add
[ 1491.835724] PM: Adding info for No Bus:usb-002:002
[ 1491.836867] device: 'usb-002:002:01': device_add
[ 1491.836872] bus: 'mdio_bus': add device usb-002:002:01
[ 1491.836893] PM: Adding info for mdio_bus:usb-002:002:01
[ 1491.836902] bus: 'mdio_bus': driver_probe_device: matched device usb-002:002:01 with driver Microchip LAN88xx
[ 1491.836920] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:002:01
[ 1491.836922] Microchip LAN88xx usb-002:002:01: no default pinctrl state
[ 1491.838482] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:002:01'
[ 1491.838490] bus: 'mdio_bus': really_probe: bound device usb-002:002:01 to driver Microchip LAN88xx
[ 1491.838491] libphy: lan78xx-mdiobus: probed
[ 1491.838500] device: 'eth0': device_add
[ 1491.838522] PM: Adding info for No Bus:eth0
[ 1491.875716] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 1491.875759] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 1491.875791] usbcore: registered new interface driver lan78xx
[ 1491.876758] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 1491.876762] net eth0: renaming to enx00800f780000
[ 1491.918379] usbcore: deregistering interface driver lan78xx
[ 1491.918392] bus: 'usb': remove driver lan78xx
[ 1491.920484] PM: Removing info for No Bus:enx00800f780000
[ 1491.950795] bus: 'mdio_bus': remove device usb-002:002:01
[ 1491.950834] PM: Removing info for mdio_bus:usb-002:002:01
[ 1491.950862] PM: Removing info for No Bus:usb-002:002
[ 1491.951280] driver: 'lan78xx': driver_release
[ 1491.999706] bus: 'usb': add driver lan78xx
[ 1491.999721] bus: 'usb': driver_probe_device: matched device 2-1:1.0 with driver lan78xx
[ 1491.999725] bus: 'usb': really_probe: probing driver lan78xx with device 2-1:1.0
[ 1491.999731] lan78xx 2-1:1.0: no default pinctrl state
[ 1492.283507] device: 'usb-002:002': device_add
[ 1492.283516] PM: Adding info for No Bus:usb-002:002
[ 1492.284531] device: 'usb-002:002:01': device_add
[ 1492.284534] bus: 'mdio_bus': add device usb-002:002:01
[ 1492.284539] PM: Adding info for mdio_bus:usb-002:002:01
[ 1492.284546] bus: 'mdio_bus': driver_probe_device: matched device usb-002:002:01 with driver Microchip LAN88xx
[ 1492.284547] bus: 'mdio_bus': really_probe: probing driver Microchip LAN88xx with device usb-002:002:01
[ 1492.284549] Microchip LAN88xx usb-002:002:01: no default pinctrl state
[ 1492.285928] driver: 'Microchip LAN88xx': driver_bound: bound to device 'usb-002:002:01'
[ 1492.285937] bus: 'mdio_bus': really_probe: bound device usb-002:002:01 to driver Microchip LAN88xx
[ 1492.285938] libphy: lan78xx-mdiobus: probed
[ 1492.285947] device: 'eth0': device_add
[ 1492.285968] PM: Adding info for No Bus:eth0
[ 1492.322860] driver: 'lan78xx': driver_bound: bound to device '2-1:1.0'
[ 1492.322903] bus: 'usb': really_probe: bound device 2-1:1.0 to driver lan78xx
[ 1492.322932] usbcore: registered new interface driver lan78xx
[ 1492.324073] lan78xx 2-1:1.0 enx00800f780000: renamed from eth0
[ 1492.324078] net eth0: renaming to enx00800f780000
[ 1492.359594] usbcore: deregistering interface driver lan78xx
[ 1492.359607] bus: 'usb': remove driver lan78xx
[ 1492.362974] PM: Removing info for No Bus:enx00800f780000
[ 1492.364088] BUG: unable to handle kernel NULL pointer dereference at 0000000000000048
[ 1492.364097] #PF error: [WRITE]
[ 1492.364102] PGD 80000007e2ba4067 P4D 80000007e2ba4067 PUD 836bb6067 PMD 0 
[ 1492.364114] Oops: 0002 [#1] SMP PTI
[ 1492.364122] CPU: 4 PID: 8319 Comm: kworker/u16:0 Tainted: G            E     5.1.0-rc4+ #1
[ 1492.364127] Hardware name: Dell Inc. OptiPlex 7050/0D24M8, BIOS 1.7.9 01/30/2018
[ 1492.364138] Workqueue: events_power_efficient phy_state_machine
[ 1492.364150] RIP: 0010:netif_carrier_off+0x5/0x30
[ 1492.364157] Code: 5b 5d 41 5c 41 5d c3 48 c7 00 00 00 00 00 5b 5d 41 5c 41 5d e9 bc 65 89 ff 66 90 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <f0> 48 0f ba 6f 48 02 72 09 80 bf d0 04 00 00 00 75 02 f3 c3 f0 ff
[ 1492.364163] RSP: 0018:ffffa5ee5649fdf8 EFLAGS: 00010246
[ 1492.364170] RAX: 0000000000000000 RBX: ffff902fe31e7000 RCX: ffffffffbc0df230
[ 1492.364174] RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000000
[ 1492.364179] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[ 1492.364183] R10: 0000000000000001 R11: 0000000000000001 R12: ffff902fe31e7420
[ 1492.364188] R13: ffff902fe31e7000 R14: ffff902fe0c82840 R15: 0ffff90303d45640
[ 1492.364194] FS:  0000000000000000(0000) GS:ffff90303db00000(0000) knlGS:0000000000000000
[ 1492.364200] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1492.364205] CR2: 0000000000000048 CR3: 00000007e1db4001 CR4: 00000000003606e0
[ 1492.364210] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 1492.364215] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 1492.364218] Call Trace:
[ 1492.364230]  phy_link_change+0x22/0x50
[ 1492.364239]  phy_check_link_status+0x8a/0xe0
[ 1492.364246]  phy_start_aneg+0xe2/0x120
[ 1492.364253]  phy_state_machine+0x81/0x230
[ 1492.364263]  process_one_work+0x15e/0x3f0
[ 1492.364272]  worker_thread+0x4c/0x440
[ 1492.364281]  ? rescuer_thread+0x350/0x350
[ 1492.364288]  kthread+0xf8/0x130
[ 1492.364295]  ? kthread_destroy_worker+0x40/0x40
[ 1492.364303]  ret_from_fork+0x35/0x40
[ 1492.364310] Modules linked in: lan78xx(E-) microchip snd_hda_codec_hdmi intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio kvm snd_hda_intel snd_hda_codec snd_hda_core irqbypass input_leds snd_hwdep snd_pcm crct10dif_pclmul snd_seq_midi crc32_pclmul snd_seq_midi_event ghash_clmulni_intel aesni_intel snd_rawmidi aes_x86_64 snd_seq crypto_simd i2c_designware_platform cryptd glue_helper snd_seq_device i2c_designware_core snd_timer intel_cstate snd intel_rapl_perf soundcore dell_wmi idma64 dell_smbios serio_raw virt_dma dell_wmi_aio dcdbas mei_me sparse_keymap intel_lpss_pci mei mac_hid dell_wmi_descriptor wmi_bmof intel_lpss acpi_pad parport_pc ppdev sunrpc lp parport autofs4 i915 hid_generic usbhid hid i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm e1000e psmouse ahci ptp libahci pps_core wmi video [last unloaded: lan78xx]
[ 1492.364390] CR2: 0000000000000048
[ 1492.364397] ---[ end trace 69c97991895beef6 ]---
[ 1492.364406] RIP: 0010:netif_carrier_off+0x5/0x30
[ 1492.364411] Code: 5b 5d 41 5c 41 5d c3 48 c7 00 00 00 00 00 5b 5d 41 5c 41 5d e9 bc 65 89 ff 66 90 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 <f0> 48 0f ba 6f 48 02 72 09 80 bf d0 04 00 00 00 75 02 f3 c3 f0 ff
[ 1492.364417] RSP: 0018:ffffa5ee5649fdf8 EFLAGS: 00010246
[ 1492.364422] RAX: 0000000000000000 RBX: ffff902fe31e7000 RCX: ffffffffbc0df230
[ 1492.364426] RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000000
[ 1492.364430] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[ 1492.364434] R10: 0000000000000001 R11: 0000000000000001 R12: ffff902fe31e7420
[ 1492.364439] R13: ffff902fe31e7000 R14: ffff902fe0c82840 R15: 0ffff90303d45640
[ 1492.364444] FS:  0000000000000000(0000) GS:ffff90303db00000(0000) knlGS:0000000000000000
[ 1492.364449] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1492.364454] CR2: 0000000000000048 CR3: 00000007e1db4001 CR4: 00000000003606e0
[ 1492.364458] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 1492.364463] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 1492.398943] bus: 'mdio_bus': remove device usb-002:002:01
raghu@raghu:~$ 
raghu@raghu:~$ 
raghu@raghu:~$ 


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2019-04-22  5:33 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-08  6:10 [PATCH] net: lan78xx: fix "enabled interrupts" warninig Jisheng Zhang
2019-04-08  7:46 ` RaghuramChary.Jallipalli
2019-04-08  8:07   ` Jisheng Zhang
2019-04-08 10:46     ` RaghuramChary.Jallipalli
2019-04-09  1:36       ` Jisheng Zhang
2019-04-09  5:26         ` RaghuramChary.Jallipalli
2019-04-10  9:20         ` RaghuramChary.Jallipalli
2019-04-10  9:53           ` Jisheng Zhang
2019-04-10 10:27             ` Marc Zyngier
2019-04-17  3:49             ` RaghuramChary.Jallipalli
2019-04-17  8:22               ` Jisheng Zhang
2019-04-22  5:32                 ` RaghuramChary.Jallipalli

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).