2021-06-22 12:53:58

by Andre Przywara

[permalink] [raw]
Subject: [PATCH] r8169: Avoid duplicate sysfs entry creation error

From: Sayanta Pattanayak <[email protected]>

When registering the MDIO bus for a r8169 device, we use the PCI B/D/F
specifier as a (seemingly) unique device identifier.
However the very same BDF number can be used on another PCI segment,
which makes the driver fail probing:

[ 27.544136] r8169 0002:07:00.0: enabling device (0000 -> 0003)
[ 27.559734] sysfs: cannot create duplicate filename '/class/mdio_bus/r8169-700'
....…
[ 27.684858] libphy: mii_bus r8169-700 failed to register
[ 27.695602] r8169: probe of 0002:07:00.0 failed with error -22

Add the segment number to the device name to make it more unique.

This fixes operation on an ARM N1SDP board, where two boards might be
connected together to form an SMP system, and all on-board devices show
up twice, just on different PCI segments.

Signed-off-by: Sayanta Pattanayak <[email protected]>
[Andre: expand commit message]
Signed-off-by: Andre Przywara <[email protected]>
---
drivers/net/ethernet/realtek/r8169_main.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 2c89cde7da1e..209dee295ce2 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -5086,7 +5086,8 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
new_bus->priv = tp;
new_bus->parent = &pdev->dev;
new_bus->irq[0] = PHY_MAC_INTERRUPT;
- snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x", pci_dev_id(pdev));
+ snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x-%x",
+ pdev->bus->domain_nr, pci_dev_id(pdev));

new_bus->read = r8169_mdio_read_reg;
new_bus->write = r8169_mdio_write_reg;
--
2.17.5


2021-06-23 14:17:07

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] r8169: Avoid duplicate sysfs entry creation error

Hi Andre,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.13-rc7 next-20210622]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Andre-Przywara/r8169-Avoid-duplicate-sysfs-entry-creation-error/20210622-205319
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git a96bfed64c8986d6404e553f18203cae1f5ac7e6
config: x86_64-rhel-8.3-kselftests (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/d832a81ab997133a25b71a3066a51708edf39054
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Andre-Przywara/r8169-Avoid-duplicate-sysfs-entry-creation-error/20210622-205319
git checkout d832a81ab997133a25b71a3066a51708edf39054
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=x86_64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

drivers/net/ethernet/realtek/r8169_main.c: In function 'r8169_mdio_register':
>> drivers/net/ethernet/realtek/r8169_main.c:5090:13: error: 'struct pci_bus' has no member named 'domain_nr'
5090 | pdev->bus->domain_nr, pci_dev_id(pdev));
| ^~
--
452 | void run_dax(struct dax_device *dax_dev)
| ^~~~~~~
drivers/dax/super.c:227: warning: Function parameter or member 'list' not described in 'dax_device'
drivers/dax/super.c:227: warning: Function parameter or member 'ops' not described in 'dax_device'
drivers/gpu/drm/drm_file.c:789:6: warning: no previous prototype for 'drm_send_event_helper' [-Wmissing-prototypes]
789 | void drm_send_event_helper(struct drm_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/acpi/dock.c:388: warning: Function parameter or member 'ds' not described in 'handle_eject_request'
drivers/acpi/dock.c:388: warning: Function parameter or member 'event' not described in 'handle_eject_request'
lib/iov_iter.c:752: warning: Function parameter or member 'i' not described in '_copy_mc_to_iter'
lib/iov_iter.c:752: warning: Excess function parameter 'iter' description in '_copy_mc_to_iter'
lib/iov_iter.c:888: warning: Function parameter or member 'i' not described in '_copy_from_iter_flushcache'
lib/iov_iter.c:888: warning: Excess function parameter 'iter' description in '_copy_from_iter_flushcache'
fs/d_path.c:315:7: warning: no previous prototype for 'simple_dname' [-Wmissing-prototypes]
315 | char *simple_dname(struct dentry *dentry, char *buffer, int buflen)
| ^~~~~~~~~~~~
arch/x86/kernel/smpboot.c:298: warning: Function parameter or member 'phys_pkg' not described in 'topology_phys_to_logical_pkg'
arch/x86/kernel/smpboot.c:316: warning: Function parameter or member 'die_id' not described in 'topology_phys_to_logical_die'
arch/x86/kernel/smpboot.c:316: warning: Function parameter or member 'cur_cpu' not described in 'topology_phys_to_logical_die'
kernel/context_tracking.c:63: warning: Function parameter or member 'state' not described in '__context_tracking_enter'
kernel/context_tracking.c:63: warning: expecting prototype for context_tracking_enter(). Prototype was for __context_tracking_enter() instead
kernel/context_tracking.c:147: warning: Function parameter or member 'state' not described in '__context_tracking_exit'
kernel/context_tracking.c:147: warning: expecting prototype for context_tracking_exit(). Prototype was for __context_tracking_exit() instead
drivers/base/module.c: In function 'module_add_driver':
drivers/base/module.c:36:6: warning: variable 'no_warn' set but not used [-Wunused-but-set-variable]
36 | int no_warn;
| ^~~~~~~
fs/nsfs.c:264: warning: Function parameter or member 'ns' not described in 'ns_match'
fs/nsfs.c:264: warning: Excess function parameter 'ns_common' description in 'ns_match'
fs/fs_context.c:145: warning: Function parameter or member 'fc' not described in 'vfs_parse_fs_string'
fs/fs_context.c:145: warning: Function parameter or member 'key' not described in 'vfs_parse_fs_string'
fs/fs_context.c:145: warning: Function parameter or member 'value' not described in 'vfs_parse_fs_string'
fs/fs_context.c:145: warning: Function parameter or member 'v_size' not described in 'vfs_parse_fs_string'
fs/fs_context.c:179: warning: Function parameter or member 'fc' not described in 'generic_parse_monolithic'
fs/fs_context.c:179: warning: Excess function parameter 'ctx' description in 'generic_parse_monolithic'
fs/fs_context.c:317: warning: expecting prototype for vfs_dup_fc_config(). Prototype was for vfs_dup_fs_context() instead
fs/fs_context.c:363: warning: Function parameter or member 'log' not described in 'logfc'
fs/fs_context.c:363: warning: Function parameter or member 'prefix' not described in 'logfc'
fs/fs_context.c:363: warning: Function parameter or member 'level' not described in 'logfc'
fs/fs_context.c:363: warning: Excess function parameter 'fc' description in 'logfc'
drivers/firewire/init_ohci1394_dma.c:178: warning: Function parameter or member 'ohci' not described in 'init_ohci1394_wait_for_busresets'
drivers/firewire/init_ohci1394_dma.c:196: warning: Function parameter or member 'ohci' not described in 'init_ohci1394_enable_physical_dma'
drivers/firewire/init_ohci1394_dma.c:207: warning: Function parameter or member 'ohci' not described in 'init_ohci1394_reset_and_init_dma'
drivers/firewire/init_ohci1394_dma.c:236: warning: Function parameter or member 'num' not described in 'init_ohci1394_controller'
drivers/firewire/init_ohci1394_dma.c:236: warning: Function parameter or member 'slot' not described in 'init_ohci1394_controller'
drivers/firewire/init_ohci1394_dma.c:236: warning: Function parameter or member 'func' not described in 'init_ohci1394_controller'
drivers/firewire/init_ohci1394_dma.c:258: warning: expecting prototype for debug_init_ohci1394_dma(). Prototype was for init_ohci1394_dma_on_all_controllers() instead
drivers/firewire/init_ohci1394_dma.c:289: warning: Function parameter or member 'opt' not described in 'setup_ohci1394_dma'
drivers/firewire/init_ohci1394_dma.c:289: warning: expecting prototype for setup_init_ohci1394_early(). Prototype was for setup_ohci1394_dma() instead
arch/x86/kernel/crash_dump_64.c:70: warning: Function parameter or member 'pfn' not described in 'copy_oldmem_page_encrypted'
arch/x86/kernel/crash_dump_64.c:70: warning: Function parameter or member 'buf' not described in 'copy_oldmem_page_encrypted'
arch/x86/kernel/crash_dump_64.c:70: warning: Function parameter or member 'csize' not described in 'copy_oldmem_page_encrypted'
arch/x86/kernel/crash_dump_64.c:70: warning: Function parameter or member 'offset' not described in 'copy_oldmem_page_encrypted'
arch/x86/kernel/crash_dump_64.c:70: warning: Function parameter or member 'userbuf' not described in 'copy_oldmem_page_encrypted'
fs/kernel_read_file.c:38: warning: Function parameter or member 'file' not described in 'kernel_read_file'
fs/kernel_read_file.c:38: warning: Function parameter or member 'offset' not described in 'kernel_read_file'
fs/kernel_read_file.c:38: warning: Function parameter or member 'buf' not described in 'kernel_read_file'
fs/kernel_read_file.c:38: warning: Function parameter or member 'buf_size' not described in 'kernel_read_file'
fs/kernel_read_file.c:38: warning: Function parameter or member 'file_size' not described in 'kernel_read_file'
fs/kernel_read_file.c:38: warning: Function parameter or member 'id' not described in 'kernel_read_file'
lib/errname.c:16:67: warning: initialized field overwritten [-Woverride-init]
16 | #define E(err) [err + BUILD_BUG_ON_ZERO(err <= 0 || err > 300)] = "-" #err
| ^~~
lib/errname.c:173:2: note: in expansion of macro 'E'
173 | E(EDEADLK), /* EDEADLOCK */
| ^
lib/errname.c:16:67: note: (near initialization for 'names_0[35]')
16 | #define E(err) [err + BUILD_BUG_ON_ZERO(err <= 0 || err > 300)] = "-" #err
| ^~~
lib/errname.c:173:2: note: in expansion of macro 'E'
173 | E(EDEADLK), /* EDEADLOCK */
| ^
drivers/rtc/sysfs.c:115: warning: expecting prototype for rtc_sysfs_show_hctosys(). Prototype was for hctosys_show() instead
drivers/acpi/x86/apple.c:27:6: warning: no previous prototype for 'acpi_extract_apple_properties' [-Wmissing-prototypes]
27 | void acpi_extract_apple_properties(struct acpi_device *adev)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/nlattr.c:648: warning: Function parameter or member 'p' not described in 'nla_policy_len'
lib/nlattr.c:648: warning: Excess function parameter 'policy' description in 'nla_policy_len'
drivers/usb/typec/ucsi/ucsi.c:1288: warning: expecting prototype for ucsi_get_drvdata(). Prototype was for ucsi_set_drvdata() instead
drivers/acpi/acpi_lpit.c:148:6: warning: no previous prototype for 'acpi_init_lpit' [-Wmissing-prototypes]
148 | void acpi_init_lpit(void)
| ^~~~~~~~~~~~~~
drivers/usb/host/xhci.c: In function 'xhci_unmap_temp_buf':
drivers/usb/host/xhci.c:1349:15: warning: variable 'len' set but not used [-Wunused-but-set-variable]
1349 | unsigned int len;
| ^~~
drivers/acpi/acpi_watchdog.c:85: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
* Returns true if this system should prefer ACPI based watchdog instead of
drivers/usb/host/xhci.c:1425: warning: Function parameter or member 'desc' not described in 'xhci_get_endpoint_index'
drivers/acpi/processor_idle.c:1097:12: warning: no previous prototype for 'acpi_processor_ffh_lpi_probe' [-Wmissing-prototypes]
1097 | int __weak acpi_processor_ffh_lpi_probe(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/acpi/processor_idle.c:1102:12: warning: no previous prototype for 'acpi_processor_ffh_lpi_enter' [-Wmissing-prototypes]
1102 | int __weak acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/posix_acl.c: In function 'get_acl':
fs/posix_acl.c:127:22: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
127 | /* fall through */ ;
| ^
drivers/net/ethernet/realtek/r8169_main.c: In function 'r8169_mdio_register':
>> drivers/net/ethernet/realtek/r8169_main.c:5090:13: error: 'struct pci_bus' has no member named 'domain_nr'
5090 | pdev->bus->domain_nr, pci_dev_id(pdev));
| ^~
drivers/thermal/thermal_core.c:1376: warning: expecting prototype for thermal_device_unregister(). Prototype was for thermal_zone_device_unregister() instead
make[5]: *** [scripts/Makefile.build:272: drivers/net/ethernet/realtek/r8169_main.o] Error 1
make[5]: Target '__build' not remade because of errors.
make[4]: *** [scripts/Makefile.build:515: drivers/net/ethernet/realtek] Error 2
drivers/acpi/ioapic.c:212:6: warning: no previous prototype for 'pci_ioapic_remove' [-Wmissing-prototypes]
212 | void pci_ioapic_remove(struct acpi_pci_root *root)
| ^~~~~~~~~~~~~~~~~
drivers/acpi/ioapic.c:229:5: warning: no previous prototype for 'acpi_ioapic_remove' [-Wmissing-prototypes]
229 | int acpi_ioapic_remove(struct acpi_pci_root *root)
| ^~~~~~~~~~~~~~~~~~
drivers/cpuidle/sysfs.c:511: warning: expecting prototype for cpuidle_remove_driver_sysfs(). Prototype was for cpuidle_remove_state_sysfs() instead
drivers/leds/led-class.c:521: warning: Function parameter or member 'dev' not described in 'devm_led_classdev_unregister'
drivers/leds/led-class.c:521: warning: Excess function parameter 'parent' description in 'devm_led_classdev_unregister'
drivers/firmware/efi/efi.c:166:16: warning: no previous prototype for 'efi_attr_is_visible' [-Wmissing-prototypes]
166 | umode_t __weak efi_attr_is_visible(struct kobject *kobj, struct attribute *attr,
| ^~~~~~~~~~~~~~~~~~~
drivers/acpi/cppc_acpi.c:573: warning: Function parameter or member 'pcc_ss_id' not described in 'pcc_data_alloc'
drivers/acpi/cppc_acpi.c:1356: warning: Function parameter or member 'cpu_num' not described in 'cppc_get_transition_latency'
drivers/firmware/efi/memmap.c:201: warning: Function parameter or member 'addr' not described in 'efi_memmap_init_late'
drivers/firmware/efi/memmap.c:201: warning: Excess function parameter 'phys_addr' description in 'efi_memmap_init_late'
drivers/firmware/efi/memmap.c:236: warning: Function parameter or member 'data' not described in 'efi_memmap_install'
drivers/firmware/efi/memmap.c:236: warning: Excess function parameter 'ctx' description in 'efi_memmap_install'
make[4]: Target '__build' not remade because of errors.
make[3]: *** [scripts/Makefile.build:515: drivers/net/ethernet] Error 2
make[3]: Target '__build' not remade because of errors.
make[2]: *** [scripts/Makefile.build:515: drivers/net] Error 2
drivers/cpufreq/intel_pstate.c:257: warning: Function parameter or member 'epp_cached' not described in 'cpudata'
drivers/firmware/efi/efi-pstore.c:225: warning: Function parameter or member 'record' not described in 'efi_pstore_read'
drivers/firmware/efi/cper.c:587:6: warning: no previous prototype for 'cper_estatus_print' [-Wmissing-prototypes]
587 | void cper_estatus_print(const char *pfx,
| ^~~~~~~~~~~~~~~~~~
drivers/firmware/efi/cper.c:610:5: warning: no previous prototype for 'cper_estatus_check_header' [-Wmissing-prototypes]
610 | int cper_estatus_check_header(const struct acpi_hest_generic_status *estatus)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/firmware/efi/cper.c:623:5: warning: no previous prototype for 'cper_estatus_check' [-Wmissing-prototypes]
623 | int cper_estatus_check(const struct acpi_hest_generic_status *estatus)
| ^~~~~~~~~~~~~~~~~~
drivers/mailbox/pcc.c:179: warning: Function parameter or member 'irq' not described in 'pcc_mbox_irq'
drivers/mailbox/pcc.c:179: warning: Function parameter or member 'p' not described in 'pcc_mbox_irq'
drivers/mailbox/pcc.c:378: warning: expecting prototype for parse_pcc_subspaces(). Prototype was for parse_pcc_subspace() instead
drivers/hwspinlock/hwspinlock_core.c:208: warning: Function parameter or member 'to' not described in '__hwspin_lock_timeout'
drivers/hwspinlock/hwspinlock_core.c:208: warning: Excess function parameter 'timeout' description in '__hwspin_lock_timeout'
drivers/hwspinlock/hwspinlock_core.c:318: warning: Excess function parameter 'bank' description in 'of_hwspin_lock_simple_xlate'
drivers/hwspinlock/hwspinlock_core.c:647: warning: Function parameter or member 'hwlock' not described in '__hwspin_lock_request'
drivers/hid/hid-magicmouse.c:135: warning: Function parameter or member 'hdev' not described in 'magicmouse_sc'
drivers/hid/hid-magicmouse.c:135: warning: Function parameter or member 'work' not described in 'magicmouse_sc'
make[2]: Target '__build' not remade because of errors.
make[1]: *** [Makefile:1847: drivers] Error 2
make[1]: Target 'vmlinux' not remade because of errors.
make: *** [Makefile:215: __sub-make] Error 2
make: Target 'vmlinux' not remade because of errors.


vim +5090 drivers/net/ethernet/realtek/r8169_main.c

5074
5075 static int r8169_mdio_register(struct rtl8169_private *tp)
5076 {
5077 struct pci_dev *pdev = tp->pci_dev;
5078 struct mii_bus *new_bus;
5079 int ret;
5080
5081 new_bus = devm_mdiobus_alloc(&pdev->dev);
5082 if (!new_bus)
5083 return -ENOMEM;
5084
5085 new_bus->name = "r8169";
5086 new_bus->priv = tp;
5087 new_bus->parent = &pdev->dev;
5088 new_bus->irq[0] = PHY_MAC_INTERRUPT;
5089 snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x-%x",
> 5090 pdev->bus->domain_nr, pci_dev_id(pdev));
5091
5092 new_bus->read = r8169_mdio_read_reg;
5093 new_bus->write = r8169_mdio_write_reg;
5094
5095 ret = devm_mdiobus_register(&pdev->dev, new_bus);
5096 if (ret)
5097 return ret;
5098
5099 tp->phydev = mdiobus_get_phy(new_bus, 0);
5100 if (!tp->phydev) {
5101 return -ENODEV;
5102 } else if (!tp->phydev->drv) {
5103 /* Most chip versions fail with the genphy driver.
5104 * Therefore ensure that the dedicated PHY driver is loaded.
5105 */
5106 dev_err(&pdev->dev, "no dedicated PHY driver found for PHY ID 0x%08x, maybe realtek.ko needs to be added to initramfs?\n",
5107 tp->phydev->phy_id);
5108 return -EUNATCH;
5109 }
5110
5111 tp->phydev->mac_managed_pm = 1;
5112
5113 phy_support_asym_pause(tp->phydev);
5114
5115 /* PHY will be woken up in rtl_open() */
5116 phy_suspend(tp->phydev);
5117
5118 return 0;
5119 }
5120

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (17.48 kB)
.config.gz (40.92 kB)
Download all attachments

2021-06-23 19:50:48

by Heiner Kallweit

[permalink] [raw]
Subject: Re: [PATCH] r8169: Avoid duplicate sysfs entry creation error

On 22.06.2021 14:52, Andre Przywara wrote:
> From: Sayanta Pattanayak <[email protected]>
>
> When registering the MDIO bus for a r8169 device, we use the PCI B/D/F
> specifier as a (seemingly) unique device identifier.
> However the very same BDF number can be used on another PCI segment,
> which makes the driver fail probing:
>
> [ 27.544136] r8169 0002:07:00.0: enabling device (0000 -> 0003)
> [ 27.559734] sysfs: cannot create duplicate filename '/class/mdio_bus/r8169-700'
> ....…
> [ 27.684858] libphy: mii_bus r8169-700 failed to register
> [ 27.695602] r8169: probe of 0002:07:00.0 failed with error -22
>
> Add the segment number to the device name to make it more unique.
>
> This fixes operation on an ARM N1SDP board, where two boards might be
> connected together to form an SMP system, and all on-board devices show
> up twice, just on different PCI segments.
>
> Signed-off-by: Sayanta Pattanayak <[email protected]>
> [Andre: expand commit message]
> Signed-off-by: Andre Przywara <[email protected]>
> ---
> drivers/net/ethernet/realtek/r8169_main.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
> index 2c89cde7da1e..209dee295ce2 100644
> --- a/drivers/net/ethernet/realtek/r8169_main.c
> +++ b/drivers/net/ethernet/realtek/r8169_main.c
> @@ -5086,7 +5086,8 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
> new_bus->priv = tp;
> new_bus->parent = &pdev->dev;
> new_bus->irq[0] = PHY_MAC_INTERRUPT;
> - snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x", pci_dev_id(pdev));
> + snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x-%x",
> + pdev->bus->domain_nr, pci_dev_id(pdev));
>
I think you saw the error mail from kernel test robot.
You have to use pci_domain_nr() instead of member domain_nr directly.

> new_bus->read = r8169_mdio_read_reg;
> new_bus->write = r8169_mdio_write_reg;
>

2021-06-23 21:45:38

by Andre Przywara

[permalink] [raw]
Subject: Re: [PATCH] r8169: Avoid duplicate sysfs entry creation error

On Wed, 23 Jun 2021 21:48:14 +0200
Heiner Kallweit <[email protected]> wrote:

Hi Heiner,

> On 22.06.2021 14:52, Andre Przywara wrote:
> > From: Sayanta Pattanayak <[email protected]>
> >
> > When registering the MDIO bus for a r8169 device, we use the PCI B/D/F
> > specifier as a (seemingly) unique device identifier.
> > However the very same BDF number can be used on another PCI segment,
> > which makes the driver fail probing:
> >
> > [ 27.544136] r8169 0002:07:00.0: enabling device (0000 -> 0003)
> > [ 27.559734] sysfs: cannot create duplicate filename '/class/mdio_bus/r8169-700'
> > ....…
> > [ 27.684858] libphy: mii_bus r8169-700 failed to register
> > [ 27.695602] r8169: probe of 0002:07:00.0 failed with error -22
> >
> > Add the segment number to the device name to make it more unique.
> >
> > This fixes operation on an ARM N1SDP board, where two boards might be
> > connected together to form an SMP system, and all on-board devices show
> > up twice, just on different PCI segments.
> >
> > Signed-off-by: Sayanta Pattanayak <[email protected]>
> > [Andre: expand commit message]
> > Signed-off-by: Andre Przywara <[email protected]>
> > ---
> > drivers/net/ethernet/realtek/r8169_main.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
> > index 2c89cde7da1e..209dee295ce2 100644
> > --- a/drivers/net/ethernet/realtek/r8169_main.c
> > +++ b/drivers/net/ethernet/realtek/r8169_main.c
> > @@ -5086,7 +5086,8 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
> > new_bus->priv = tp;
> > new_bus->parent = &pdev->dev;
> > new_bus->irq[0] = PHY_MAC_INTERRUPT;
> > - snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x", pci_dev_id(pdev));
> > + snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x-%x",
> > + pdev->bus->domain_nr, pci_dev_id(pdev));
> >
> I think you saw the error mail from kernel test robot.
> You have to use pci_domain_nr() instead of member domain_nr directly.

Yeah, thanks, I figured already. I actually missed test-compiling for
x86 :-(

Will send v2 ASAP.

Cheers,
Andre

>
> > new_bus->read = r8169_mdio_read_reg;
> > new_bus->write = r8169_mdio_write_reg;
> >
>