Linux-ACPI Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v1] ACPI / platform: Unregister stale platform devices
@ 2019-08-30 14:34 Andy Shevchenko
  2019-09-02  6:38 ` kbuild test robot
  2019-09-02  7:19 ` kbuild test robot
  0 siblings, 2 replies; 6+ messages in thread
From: Andy Shevchenko @ 2019-08-30 14:34 UTC (permalink / raw)
  To: Rafael J . Wysocki, Len Brown, linux-acpi, Ferry Toth
  Cc: Andy Shevchenko, Mika Westerberg

When the commit 68bdb6773289

  ("ACPI: add support for ACPI reconfiguration notifiers")

introduced reconfiguration notifiers it misses the point that the ACPI table,
which may be loaded and then unloaded via ConfigFS, can contain devices that are
not enumerated by their parents.

In such case the stale platform device is dangling in the system while the rest
of the devices from the same table are already gone.

Introduce acpi_platform_device_remove_notify() notifier that, in similar way to
I²C or SPI buses, unregisters the platform devices on table removal event.

Depends-on: 00500147cbd3 ("drivers: Introduce device lookup variants by ACPI_COMPANION device")
Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/acpi/acpi_platform.c | 43 ++++++++++++++++++++++++++++++++++++
 drivers/acpi/scan.c          |  1 +
 2 files changed, 44 insertions(+)

diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index 00ec4f2bf015..dfcd6210828e 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -31,6 +31,44 @@ static const struct acpi_device_id forbidden_id_list[] = {
 	{"", 0},
 };
 
+static struct platform_device *acpi_platform_device_find_by_adev(struct acpi_device *adev)
+{
+	struct device *dev;
+
+	dev = bus_find_device_by_acpi_dev(&platform_bus_type, adev);
+	return dev ? to_platform_device(dev) : NULL;
+}
+
+static int acpi_platform_device_remove_notify(struct notifier_block *nb,
+					      unsigned long value, void *arg)
+{
+	struct acpi_device *adev = arg;
+	struct platform_device *pdev;
+
+	switch (value) {
+	case ACPI_RECONFIG_DEVICE_ADD:
+		/* Nothing to do here */
+		break;
+	case ACPI_RECONFIG_DEVICE_REMOVE:
+		if (!acpi_device_enumerated(adev))
+			break;
+
+		pdev = acpi_platform_device_find_by_adev(adev);
+		if (!pdev)
+			break;
+
+		platform_device_unregister(pdev);
+		put_device(&pdev->dev);
+		break;
+	}
+
+	return NOTIFY_OK;
+}
+
+static struct notifier_block acpi_platform_notifier = {
+	.notifier_call = acpi_platform_device_remove_notify,
+};
+
 static void acpi_platform_fill_resource(struct acpi_device *adev,
 	const struct resource *src, struct resource *dest)
 {
@@ -130,3 +168,8 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
 	return pdev;
 }
 EXPORT_SYMBOL_GPL(acpi_create_platform_device);
+
+void __init acpi_platform_init(void)
+{
+	acpi_reconfig_notifier_register(&acpi_platform_notifier);
+}
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index aad6be5c0af0..915650bf519f 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -2174,6 +2174,7 @@ int __init acpi_scan_init(void)
 	acpi_pci_root_init();
 	acpi_pci_link_init();
 	acpi_processor_init();
+	acpi_platform_init();
 	acpi_lpss_init();
 	acpi_apd_init();
 	acpi_cmos_rtc_init();
-- 
2.23.0.rc1


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

* Re: [PATCH v1] ACPI / platform: Unregister stale platform devices
  2019-08-30 14:34 [PATCH v1] ACPI / platform: Unregister stale platform devices Andy Shevchenko
@ 2019-09-02  6:38 ` kbuild test robot
  2019-09-02  9:52   ` Andy Shevchenko
  2019-09-02  7:19 ` kbuild test robot
  1 sibling, 1 reply; 6+ messages in thread
From: kbuild test robot @ 2019-09-02  6:38 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: kbuild-all, Rafael J . Wysocki, Len Brown, linux-acpi,
	Ferry Toth, Andy Shevchenko, Mika Westerberg

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

Hi Andy,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[cannot apply to v5.3-rc6 next-20190830]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Andy-Shevchenko/ACPI-platform-Unregister-stale-platform-devices/20190902-001307
config: x86_64-lkp (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers//acpi/acpi_platform.c: In function 'acpi_platform_device_find_by_adev':
>> drivers//acpi/acpi_platform.c:38:8: error: implicit declaration of function 'bus_find_device_by_acpi_dev'; did you mean 'bus_find_device_by_name'? [-Werror=implicit-function-declaration]
     dev = bus_find_device_by_acpi_dev(&platform_bus_type, adev);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
           bus_find_device_by_name
   drivers//acpi/acpi_platform.c:38:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     dev = bus_find_device_by_acpi_dev(&platform_bus_type, adev);
         ^
   cc1: some warnings being treated as errors

vim +38 drivers//acpi/acpi_platform.c

    33	
    34	static struct platform_device *acpi_platform_device_find_by_adev(struct acpi_device *adev)
    35	{
    36		struct device *dev;
    37	
  > 38		dev = bus_find_device_by_acpi_dev(&platform_bus_type, adev);
    39		return dev ? to_platform_device(dev) : NULL;
    40	}
    41	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28166 bytes --]

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

* Re: [PATCH v1] ACPI / platform: Unregister stale platform devices
  2019-08-30 14:34 [PATCH v1] ACPI / platform: Unregister stale platform devices Andy Shevchenko
  2019-09-02  6:38 ` kbuild test robot
@ 2019-09-02  7:19 ` kbuild test robot
  2019-09-02  9:55   ` Andy Shevchenko
  1 sibling, 1 reply; 6+ messages in thread
From: kbuild test robot @ 2019-09-02  7:19 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: kbuild-all, Rafael J . Wysocki, Len Brown, linux-acpi,
	Ferry Toth, Andy Shevchenko, Mika Westerberg

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

Hi Andy,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[cannot apply to v5.3-rc6 next-20190830]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Andy-Shevchenko/ACPI-platform-Unregister-stale-platform-devices/20190902-001307
config: x86_64-rhel (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/acpi/acpi_platform.c: In function 'acpi_platform_device_find_by_adev':
>> drivers/acpi/acpi_platform.c:38:8: error: implicit declaration of function 'bus_find_device_by_acpi_dev'; did you mean 'bus_find_device_by_name'? [-Werror=implicit-function-declaration]
     dev = bus_find_device_by_acpi_dev(&platform_bus_type, adev);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
           bus_find_device_by_name
   drivers/acpi/acpi_platform.c:38:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     dev = bus_find_device_by_acpi_dev(&platform_bus_type, adev);
         ^
   cc1: some warnings being treated as errors

vim +38 drivers/acpi/acpi_platform.c

    33	
    34	static struct platform_device *acpi_platform_device_find_by_adev(struct acpi_device *adev)
    35	{
    36		struct device *dev;
    37	
  > 38		dev = bus_find_device_by_acpi_dev(&platform_bus_type, adev);
    39		return dev ? to_platform_device(dev) : NULL;
    40	}
    41	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 43497 bytes --]

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

* Re: [PATCH v1] ACPI / platform: Unregister stale platform devices
  2019-09-02  6:38 ` kbuild test robot
@ 2019-09-02  9:52   ` Andy Shevchenko
  2019-09-04  8:46     ` [kbuild-all] " Rong Chen
  0 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2019-09-02  9:52 UTC (permalink / raw)
  To: kbuild test robot
  Cc: kbuild-all, Rafael J . Wysocki, Len Brown, linux-acpi,
	Ferry Toth, Mika Westerberg

On Mon, Sep 02, 2019 at 02:38:05PM +0800, kbuild test robot wrote:
> Hi Andy,
> 
> I love your patch! Yet something to improve:
> 
> [auto build test ERROR on linus/master]
> [cannot apply to v5.3-rc6 next-20190830]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
> 
> url:    https://github.com/0day-ci/linux/commits/Andy-Shevchenko/ACPI-platform-Unregister-stale-platform-devices/20190902-001307
> config: x86_64-lkp (attached as .config)
> compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=x86_64 
> 
> If you fix the issue, kindly add following tag
> Reported-by: kbuild test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>    drivers//acpi/acpi_platform.c: In function 'acpi_platform_device_find_by_adev':
> >> drivers//acpi/acpi_platform.c:38:8: error: implicit declaration of function 'bus_find_device_by_acpi_dev'; did you mean 'bus_find_device_by_name'? [-Werror=implicit-function-declaration]

False positive, it has Depends-on tag for the dependency which is not yet in
upstream.

Btw, have you noticed double slash in the paths in your scripts for LKP?
(Look above)

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v1] ACPI / platform: Unregister stale platform devices
  2019-09-02  7:19 ` kbuild test robot
@ 2019-09-02  9:55   ` Andy Shevchenko
  0 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2019-09-02  9:55 UTC (permalink / raw)
  To: kbuild test robot
  Cc: kbuild-all, Rafael J . Wysocki, Len Brown, linux-acpi,
	Ferry Toth, Mika Westerberg

On Mon, Sep 02, 2019 at 03:19:11PM +0800, kbuild test robot wrote:
>    drivers/acpi/acpi_platform.c: In function 'acpi_platform_device_find_by_adev':
> >> drivers/acpi/acpi_platform.c:38:8: error: implicit declaration of function 'bus_find_device_by_acpi_dev'; did you mean 'bus_find_device_by_name'? [-Werror=implicit-function-declaration]

Same false positive.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [kbuild-all] [PATCH v1] ACPI / platform: Unregister stale platform devices
  2019-09-02  9:52   ` Andy Shevchenko
@ 2019-09-04  8:46     ` " Rong Chen
  0 siblings, 0 replies; 6+ messages in thread
From: Rong Chen @ 2019-09-04  8:46 UTC (permalink / raw)
  To: Andy Shevchenko, kbuild test robot
  Cc: Rafael J . Wysocki, Ferry Toth, linux-acpi, kbuild-all,
	Mika Westerberg, Len Brown



On 9/2/19 5:52 PM, Andy Shevchenko wrote:
> On Mon, Sep 02, 2019 at 02:38:05PM +0800, kbuild test robot wrote:
>> Hi Andy,
>>
>> I love your patch! Yet something to improve:
>>
>> [auto build test ERROR on linus/master]
>> [cannot apply to v5.3-rc6 next-20190830]
>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>>
>> url:    https://github.com/0day-ci/linux/commits/Andy-Shevchenko/ACPI-platform-Unregister-stale-platform-devices/20190902-001307
>> config: x86_64-lkp (attached as .config)
>> compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
>> reproduce:
>>          # save the attached .config to linux build tree
>>          make ARCH=x86_64
>>
>> If you fix the issue, kindly add following tag
>> Reported-by: kbuild test robot <lkp@intel.com>
>>
>> All errors (new ones prefixed by >>):
>>
>>     drivers//acpi/acpi_platform.c: In function 'acpi_platform_device_find_by_adev':
>>>> drivers//acpi/acpi_platform.c:38:8: error: implicit declaration of function 'bus_find_device_by_acpi_dev'; did you mean 'bus_find_device_by_name'? [-Werror=implicit-function-declaration]
> False positive, it has Depends-on tag for the dependency which is not yet in
> upstream.
>
> Btw, have you noticed double slash in the paths in your scripts for LKP?
> (Look above)

Hi Andy,

Thanks for the new finding, The double slash not always appears .
I think the double slash is not from our scripts.

Best Regards,
Rong Chen

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

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-30 14:34 [PATCH v1] ACPI / platform: Unregister stale platform devices Andy Shevchenko
2019-09-02  6:38 ` kbuild test robot
2019-09-02  9:52   ` Andy Shevchenko
2019-09-04  8:46     ` [kbuild-all] " Rong Chen
2019-09-02  7:19 ` kbuild test robot
2019-09-02  9:55   ` Andy Shevchenko

Linux-ACPI Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-acpi/0 linux-acpi/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-acpi linux-acpi/ https://lore.kernel.org/linux-acpi \
		linux-acpi@vger.kernel.org linux-acpi@archiver.kernel.org
	public-inbox-index linux-acpi


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-acpi


AGPL code for this site: git clone https://public-inbox.org/ public-inbox