Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: ravb: Fix registered interrupt names

As interrupts are now requested from ravb_probe(), before calling
register_netdev(), ndev->name still contains the template "eth%d",
leading to funny names in /proc/interrupts. E.g. on R-Car E3:

89: 0 0 GICv2 93 Level eth%d:ch22:multi
90: 0 3 GICv2 95 Level eth%d:ch24:emac
91: 0 23484 GICv2 71 Level eth%d:ch0:rx_be
92: 0 0 GICv2 72 Level eth%d:ch1:rx_nc
93: 0 13735 GICv2 89 Level eth%d:ch18:tx_be
94: 0 0 GICv2 90 Level eth%d:ch19:tx_nc

Worse, on platforms with multiple RAVB instances (e.g. R-Car V4H), all
interrupts have similar names.

Fix this by using the device name instead, like is done in several other
drivers:

89: 0 0 GICv2 93 Level e6800000.ethernet:ch22:multi
90: 0 1 GICv2 95 Level e6800000.ethernet:ch24:emac
91: 0 28578 GICv2 71 Level e6800000.ethernet:ch0:rx_be
92: 0 0 GICv2 72 Level e6800000.ethernet:ch1:rx_nc
93: 0 14044 GICv2 89 Level e6800000.ethernet:ch18:tx_be
94: 0 0 GICv2 90 Level e6800000.ethernet:ch19:tx_nc

Rename the local variable dev_name, as it shadows the dev_name()
function, and pre-initialize it, to simplify the code.

Fixes: 32f012b8c01ca9fd ("net: ravb: Move getting/requesting IRQs in the probe() method")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Tested-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> # on RZ/G3S
Link: https://lore.kernel.org/r/cde67b68adf115b3cf0b44c32334ae00b2fbb321.1713944647.git.geert+renesas@glider.be
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Geert Uytterhoeven and committed by
Jakub Kicinski
0c81ea5a 6e965eba

+5 -6
+5 -6
drivers/net/ethernet/renesas/ravb_main.c
··· 2722 2722 struct platform_device *pdev = priv->pdev; 2723 2723 struct net_device *ndev = priv->ndev; 2724 2724 struct device *dev = &pdev->dev; 2725 - const char *dev_name; 2725 + const char *devname = dev_name(dev); 2726 2726 unsigned long flags; 2727 2727 int error, irq_num; 2728 2728 2729 2729 if (irq_name) { 2730 - dev_name = devm_kasprintf(dev, GFP_KERNEL, "%s:%s", ndev->name, ch); 2731 - if (!dev_name) 2730 + devname = devm_kasprintf(dev, GFP_KERNEL, "%s:%s", devname, ch); 2731 + if (!devname) 2732 2732 return -ENOMEM; 2733 2733 2734 2734 irq_num = platform_get_irq_byname(pdev, irq_name); 2735 2735 flags = 0; 2736 2736 } else { 2737 - dev_name = ndev->name; 2738 2737 irq_num = platform_get_irq(pdev, 0); 2739 2738 flags = IRQF_SHARED; 2740 2739 } ··· 2743 2744 if (irq) 2744 2745 *irq = irq_num; 2745 2746 2746 - error = devm_request_irq(dev, irq_num, handler, flags, dev_name, ndev); 2747 + error = devm_request_irq(dev, irq_num, handler, flags, devname, ndev); 2747 2748 if (error) 2748 - netdev_err(ndev, "cannot request IRQ %s\n", dev_name); 2749 + netdev_err(ndev, "cannot request IRQ %s\n", devname); 2749 2750 2750 2751 return error; 2751 2752 }