[PATCH] x86, lpc, Allow only one load of lpc_ich Please use $SUBJECT format corresponding to the subsystem.
This is not an X86 patch, it's an MFD one. I would expecte to see something along the lines of: mfd: lpc_ich: Prevent LCP devices from probing twice On Tue, 02 Sep 2014, Prarit Bhargava wrote: > On multi-socket systems the following confusing splats are seen: > > ACPI: If an ACPI driver is available for this device, you should use it > instead of the native driver > lpc_ich: Resource conflict(s) found affecting gpio_ich > ------------[ cut here ]------------ > WARNING: CPU: 7 PID: 1813 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x64/0x80() > sysfs: cannot create duplicate filename '/bus/platform/devices/iTCO_wdt' All this from here ------------------8<-------------------- > Modules linked in: lpc_ich(+) crc32c_intel shpchp mfd_core acpi_cpufreq > i2c_i801 dca xfs libcrc32c sd_mod crc_t10dif crct10dif_common ata_generic > pata_acpi mgag200 syscopyarea sysfillrect sysimgblt i2c_algo_bit > drm_kms_helper ttm mptsas drm scsi_transport_sas ata_piix mptscsih i2ccore > libata mptbase dm_mirror dm_region_hash dm_log dm_mod > CPU: 7 PID: 1813 Comm: systemd-udevd Not tainted 3.17.0-rc3+ #1 > Hardware name: IBM System x3950 M3 -[7145AC1]-/Node 1, Processor Card, BIOS > -[G0E130WUS-1.31]- 07/23/2010 > 0000000000000000 00000000f205abcf ffff88066bb7b8d0 ffffffff81647056 > ffff88066bb7b918 ffff88066bb7b908 ffffffff81072c9d ffff880273d05000 > ffff88027349d110 ffff880874c5cc30 0000000000000001 ffffffffffffffef > Call Trace: > [<ffffffff81647056>] dump_stack+0x45/0x56 > [<ffffffff81072c9d>] warn_slowpath_common+0x7d/0xa0 > [<ffffffff81072d1c>] warn_slowpath_fmt+0x5c/0x80 > [<ffffffff81256598>] ? kernfs_path+0x48/0x60 > [<ffffffff81259e34>] sysfs_warn_dup+0x64/0x80 > [<ffffffff8125a1b1>] sysfs_do_create_link_sd.isra.2+0xc1/0xd0 > [<ffffffff8125a1e5>] sysfs_create_link+0x25/0x50 > [<ffffffff81401689>] bus_add_device+0x119/0x200 > [<ffffffff813ff4b8>] device_add+0x498/0x630 > [<ffffffff810778f6>] ? __insert_resource+0x26/0x150 > [<ffffffff81404391>] platform_device_add+0xd1/0x2d0 > [<ffffffffa050b3f5>] mfd_add_device+0x285/0x320 [mfd_core] > [<ffffffffa050b705>] mfd_add_devices+0xb5/0x9b0 [mfd_core] > [<ffffffffa0abf55b>] lpc_ich_probe+0x3cb/0x600 [lpc_ich] > [<ffffffff8132eb55>] local_pci_probe+0x45/0xa0 > [<ffffffff8132fd45>] ? pci_match_device+0xe5/0x110 > [<ffffffff8132fea9>] pci_device_probe+0xf9/0x150 > [<ffffffff814024b0>] driver_probe_device+0x90/0x3c0 > [<ffffffff814028b3>] __driver_attach+0x93/0xa0 > [<ffffffff81402820>] ? __device_attach+0x40/0x40 > [<ffffffff814003f3>] bus_for_each_dev+0x73/0xc0 > [<ffffffff81401f4e>] driver_attach+0x1e/0x20 > [<ffffffff81401b30>] bus_add_driver+0x180/0x250 > [<ffffffffa0acb000>] ? 0xffffffffa0acb000 > [<ffffffff81403094>] driver_register+0x64/0xf0 > [<ffffffff8132e4ec>] __pci_register_driver+0x4c/0x50 > [<ffffffffa0acb01e>] lpc_ich_driver_init+0x1e/0x1000 [lpc_ich] > [<ffffffff81002144>] do_one_initcall+0xd4/0x210 > [<ffffffff811c2fed>] ? kfree+0xfd/0x140 > [<ffffffff811a8b42>] ? __vunmap+0xb2/0x100 > [<ffffffff810f2839>] load_module+0x1619/0x1a70 > [<ffffffff810edde0>] ? store_uevent+0x70/0x70 > [<ffffffff810eea39>] ? copy_module_from_fd.isra.44+0x129/0x180 > [<ffffffff810f2e46>] SyS_finit_module+0xa6/0xd0 > [<ffffffff8164f069>] system_call_fastpath+0x16/0x1b > ---[ end trace 1429eb73c1995841 ]--- > ------------[ cut here ]------------ ------------------8<-------------------- To here. > WARNING: CPU: 71 PID: 1813 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x64/0x80() > sysfs: cannot create duplicate filename '/bus/platform/devices/gpio_ich' And from here: ------------------8<-------------------- > Modules linked in: serio_raw lpc_ich(+) crc32c_intel shpchp mfd_core > acpi_cpufreq i2c_i801 dca xfs libcrc32c sd_mod crc_t10dif crct10dif_common > ata_generic pata_acpi mgag200 syscopyarea sysfillrect sysimgblt i2c_algo_bit > drm_kms_helper ttm mptsas drm scsi_transport_sas ata_piix mptscsih i2ccore > libata mptbase dm_mirror dm_region_hash dm_log dm_mod > CPU: 71 PID: 1813 Comm: systemd-udevd Tainted: G W 3.17.0-rc3+ #1 > Hardware name: IBM System x3950 M3 -[7145AC1]-/Node 1, Processor Card, BIOS > -[G0E130WUS-1.31]- 07/23/2010 > 0000000000000000 00000000f205abcf ffff88066bb7b8d0 ffffffff81647056 > ffff88066bb7b918 ffff88066bb7b908 ffffffff81072c9d ffff88027382d000 > ffff880273640030 ffff880874c5cc30 0000000000000001 ffffffffffffffef > Call Trace: > [<ffffffff81647056>] dump_stack+0x45/0x56 > [<ffffffff81072c9d>] warn_slowpath_common+0x7d/0xa0 > [<ffffffff81072d1c>] warn_slowpath_fmt+0x5c/0x80 > [<ffffffff81256598>] ? kernfs_path+0x48/0x60 > [<ffffffff81259e34>] sysfs_warn_dup+0x64/0x80 > [<ffffffff8125a1b1>] sysfs_do_create_link_sd.isra.2+0xc1/0xd0 > [<ffffffff8125a1e5>] sysfs_create_link+0x25/0x50 > [<ffffffff81401689>] bus_add_device+0x119/0x200 > [<ffffffff813ff4b8>] device_add+0x498/0x630 > [<ffffffff810778f6>] ? __insert_resource+0x26/0x150 > [<ffffffff81404391>] platform_device_add+0xd1/0x2d0 > [<ffffffffa050b3f5>] mfd_add_device+0x285/0x320 [mfd_core] > [<ffffffffa050b705>] mfd_add_devices+0xb5/0x9b0 [mfd_core] > [<ffffffffa0abf464>] lpc_ich_probe+0x2d4/0x600 [lpc_ich] > [<ffffffff8132eb55>] local_pci_probe+0x45/0xa0 > [<ffffffff8132fd45>] ? pci_match_device+0xe5/0x110 > [<ffffffff8132fea9>] pci_device_probe+0xf9/0x150 > [<ffffffff814024b0>] driver_probe_device+0x90/0x3c0 > [<ffffffff814028b3>] __driver_attach+0x93/0xa0 > [<ffffffff81402820>] ? __device_attach+0x40/0x40 > [<ffffffff814003f3>] bus_for_each_dev+0x73/0xc0 > [<ffffffff81401f4e>] driver_attach+0x1e/0x20 > [<ffffffff81401b30>] bus_add_driver+0x180/0x250 > [<ffffffffa0acb000>] ? 0xffffffffa0acb000 > [<ffffffff81403094>] driver_register+0x64/0xf0 > [<ffffffff8132e4ec>] __pci_register_driver+0x4c/0x50 > [<ffffffffa0acb01e>] lpc_ich_driver_init+0x1e/0x1000 [lpc_ich] > [<ffffffff81002144>] do_one_initcall+0xd4/0x210 > [<ffffffff811c2fed>] ? kfree+0xfd/0x140 > [<ffffffff811a8b42>] ? __vunmap+0xb2/0x100 > [<ffffffff810f2839>] load_module+0x1619/0x1a70 > [<ffffffff810edde0>] ? store_uevent+0x70/0x70 > [<ffffffff810eea39>] ? copy_module_from_fd.isra.44+0x129/0x180 > [<ffffffff810f2e46>] SyS_finit_module+0xa6/0xd0 > [<ffffffff8164f069>] system_call_fastpath+0x16/0x1b > ---[ end trace 1429eb73c1995842 ]--- > lpc_ich 0000:80:1f.0: No MFD cells added ------------------8<-------------------- To here - should be removed from the commit log. > This occurs because there are two LPC devices on the system: > > 00:1f.0 ISA bridge: Intel Corporation 82801JIB (ICH10) LPC Interface > Controller > 80:1f.0 ISA bridge: Intel Corporation 82801JIB (ICH10) LPC Interface > Controller > > which AFAICT is a hardware configuration error that can be resolved in > firmware by hiding the second LPC device. Having two of these results in > two GPIO mappings and two Watchdog Timers which doesn't make much sense. > > An end user has no idea what the splats mean. We should inform the user that > the issue lies with the hardware and that they should contact their vendor > for resolution. Why is it a problem for 2 of these devices to exist on a single system? Shouldn't the driver just be able to handle 2 devices? > After the patch, the following warning is displayed: > > lpc_ich 0000:80:1f.0: [Firmware Bug]: This system has two LPC devices. > Additional driver loads would result in multiple GPIO and Watchdog Devices > being initialized. Please report this problem to your hardware vendor. Your commit log goes way over 72 chars here. > Cc: Peter Tyser <[email protected]> > Cc: Samuel Ortiz <[email protected]> > Cc: Lee Jones <[email protected]> > Signed-off-by: Prarit Bhargava <[email protected]> > --- > drivers/mfd/lpc_ich.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c > index 7d8482f..eba66bc 100644 > --- a/drivers/mfd/lpc_ich.c > +++ b/drivers/mfd/lpc_ich.c > @@ -998,12 +998,17 @@ wdt_done: > return ret; > } > > +static bool cell_added; Why have you globalised this? > static int lpc_ich_probe(struct pci_dev *dev, > const struct pci_device_id *id) > { > struct lpc_ich_priv *priv; > int ret; > - bool cell_added = false; > + > + if (cell_added) { > + dev_warn(&dev->dev, FW_BUG "This system has two LPC devices. > Additional driver loads would result in multiple GPIO and Watchdog Devices > being initialized. Please report this problem to your hardware vendor.\n"); Did you run this patch through checkpatch.pl? > + return -EBUSY; You print a warning, but return an error here. One of them is wrong. But why is it a problem for two of these devices to exist anyway? > + } > > priv = devm_kzalloc(&dev->dev, > sizeof(struct lpc_ich_priv), GFP_KERNEL); -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

