lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230925144842.586829-2-michal.wilczynski@intel.com>
Date:   Mon, 25 Sep 2023 17:48:34 +0300
From:   Michal Wilczynski <michal.wilczynski@...el.com>
To:     linux-acpi@...r.kernel.org, linux-kernel@...r.kernel.org,
        nvdimm@...ts.linux.dev
Cc:     rafael.j.wysocki@...el.com, andriy.shevchenko@...el.com,
        lenb@...nel.org, dan.j.williams@...el.com,
        vishal.l.verma@...el.com, ira.weiny@...el.com, rui.zhang@...el.com,
        Michal Wilczynski <michal.wilczynski@...el.com>,
        Andy Shevchenko <andy.shevchenko@...il.com>
Subject: [PATCH v1 1/9] ACPI: bus: Make notify wrappers more generic

acpi_dev_install_notify_handler() and acpi_dev_remove_notify_handler()
are wrappers around ACPICA installers. They are meant to save some
duplicated code from drivers. However as we're moving towards drivers
operating on platform_device they become a bit inconvenient to use as
inside the driver code we mostly want to use driver data of platform
device instead of ACPI device.

Make notify handlers installer wrappers more generic, while still
saving some code that would be duplicated otherwise.

Reviewed-by: Andy Shevchenko <andy.shevchenko@...il.com>
Signed-off-by: Michal Wilczynski <michal.wilczynski@...el.com>
---

Notes:
    So one solution could be to just replace acpi_device with
    platform_device as an argument in those functions. However I don't
    believe this is a correct solution, as it is very often the case that
    drivers declare their own private structures which gets allocated during
    the .probe() callback, and become the heart of the driver. When drivers
    do that it makes much more sense to just pass the private structure
    to the notify handler instead of forcing user to dance with the
    platform_device or acpi_device.

 drivers/acpi/ac.c         |  6 +++---
 drivers/acpi/acpi_video.c |  6 +++---
 drivers/acpi/battery.c    |  6 +++---
 drivers/acpi/bus.c        | 14 ++++++--------
 drivers/acpi/hed.c        |  6 +++---
 drivers/acpi/nfit/core.c  |  6 +++---
 drivers/acpi/thermal.c    |  6 +++---
 include/acpi/acpi_bus.h   |  9 ++++-----
 8 files changed, 28 insertions(+), 31 deletions(-)

diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
index 225dc6818751..0b245f9f7ec8 100644
--- a/drivers/acpi/ac.c
+++ b/drivers/acpi/ac.c
@@ -256,8 +256,8 @@ static int acpi_ac_add(struct acpi_device *device)
 	ac->battery_nb.notifier_call = acpi_ac_battery_notify;
 	register_acpi_notifier(&ac->battery_nb);
 
-	result = acpi_dev_install_notify_handler(device, ACPI_ALL_NOTIFY,
-						 acpi_ac_notify);
+	result = acpi_dev_install_notify_handler(device->handle, ACPI_ALL_NOTIFY,
+						 acpi_ac_notify, device);
 	if (result)
 		goto err_unregister;
 
@@ -306,7 +306,7 @@ static void acpi_ac_remove(struct acpi_device *device)
 
 	ac = acpi_driver_data(device);
 
-	acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY,
+	acpi_dev_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY,
 				       acpi_ac_notify);
 	power_supply_unregister(ac->charger);
 	unregister_acpi_notifier(&ac->battery_nb);
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index 948e31f7ce6e..025c17890127 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -2059,8 +2059,8 @@ static int acpi_video_bus_add(struct acpi_device *device)
 
 	acpi_video_bus_add_notify_handler(video);
 
-	error = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY,
-						acpi_video_bus_notify);
+	error = acpi_dev_install_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
+						acpi_video_bus_notify, device);
 	if (error)
 		goto err_remove;
 
@@ -2092,7 +2092,7 @@ static void acpi_video_bus_remove(struct acpi_device *device)
 
 	video = acpi_driver_data(device);
 
-	acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY,
+	acpi_dev_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
 				       acpi_video_bus_notify);
 
 	mutex_lock(&video_list_lock);
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index 969bf81e8d54..45dae32a8646 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -1213,8 +1213,8 @@ static int acpi_battery_add(struct acpi_device *device)
 
 	device_init_wakeup(&device->dev, 1);
 
-	result = acpi_dev_install_notify_handler(device, ACPI_ALL_NOTIFY,
-						 acpi_battery_notify);
+	result = acpi_dev_install_notify_handler(device->handle, ACPI_ALL_NOTIFY,
+						 acpi_battery_notify, device);
 	if (result)
 		goto fail_pm;
 
@@ -1241,7 +1241,7 @@ static void acpi_battery_remove(struct acpi_device *device)
 
 	battery = acpi_driver_data(device);
 
-	acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY,
+	acpi_dev_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY,
 				       acpi_battery_notify);
 
 	device_init_wakeup(&device->dev, 0);
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index f41dda2d3493..479fe888d629 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -554,14 +554,13 @@ static void acpi_device_remove_notify_handler(struct acpi_device *device,
 	acpi_os_wait_events_complete();
 }
 
-int acpi_dev_install_notify_handler(struct acpi_device *adev,
-				    u32 handler_type,
-				    acpi_notify_handler handler)
+int acpi_dev_install_notify_handler(acpi_handle handle, u32 handler_type,
+				    acpi_notify_handler handler, void *context)
 {
 	acpi_status status;
 
-	status = acpi_install_notify_handler(adev->handle, handler_type,
-					     handler, adev);
+	status = acpi_install_notify_handler(handle, handler_type,
+					     handler, context);
 	if (ACPI_FAILURE(status))
 		return -ENODEV;
 
@@ -569,11 +568,10 @@ int acpi_dev_install_notify_handler(struct acpi_device *adev,
 }
 EXPORT_SYMBOL_GPL(acpi_dev_install_notify_handler);
 
-void acpi_dev_remove_notify_handler(struct acpi_device *adev,
-				    u32 handler_type,
+void acpi_dev_remove_notify_handler(acpi_handle handle, u32 handler_type,
 				    acpi_notify_handler handler)
 {
-	acpi_remove_notify_handler(adev->handle, handler_type, handler);
+	acpi_remove_notify_handler(handle, handler_type, handler);
 	acpi_os_wait_events_complete();
 }
 EXPORT_SYMBOL_GPL(acpi_dev_remove_notify_handler);
diff --git a/drivers/acpi/hed.c b/drivers/acpi/hed.c
index 46c6f8c35b43..e7e274c5cc9e 100644
--- a/drivers/acpi/hed.c
+++ b/drivers/acpi/hed.c
@@ -56,8 +56,8 @@ static int acpi_hed_add(struct acpi_device *device)
 		return -EINVAL;
 	hed_handle = device->handle;
 
-	err = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY,
-					      acpi_hed_notify);
+	err = acpi_dev_install_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
+					      acpi_hed_notify, device);
 	if (err)
 		hed_handle = NULL;
 
@@ -66,7 +66,7 @@ static int acpi_hed_add(struct acpi_device *device)
 
 static void acpi_hed_remove(struct acpi_device *device)
 {
-	acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY,
+	acpi_dev_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
 				       acpi_hed_notify);
 	hed_handle = NULL;
 }
diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index f0e6738ae3c9..821870f57862 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -3295,7 +3295,7 @@ static void acpi_nfit_remove_notify_handler(void *data)
 {
 	struct acpi_device *adev = data;
 
-	acpi_dev_remove_notify_handler(adev, ACPI_DEVICE_NOTIFY,
+	acpi_dev_remove_notify_handler(adev->handle, ACPI_DEVICE_NOTIFY,
 				       acpi_nfit_notify);
 }
 
@@ -3390,8 +3390,8 @@ static int acpi_nfit_add(struct acpi_device *adev)
 	if (rc)
 		return rc;
 
-	rc = acpi_dev_install_notify_handler(adev, ACPI_DEVICE_NOTIFY,
-					     acpi_nfit_notify);
+	rc = acpi_dev_install_notify_handler(adev->handle, ACPI_DEVICE_NOTIFY,
+					     acpi_nfit_notify, adev);
 	if (rc)
 		return rc;
 
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 10720a038846..0218c34c16b9 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -978,8 +978,8 @@ static int acpi_thermal_add(struct acpi_device *device)
 	pr_info("%s [%s] (%ld C)\n", acpi_device_name(device),
 		acpi_device_bid(device), deci_kelvin_to_celsius(tz->temperature));
 
-	result = acpi_dev_install_notify_handler(device, ACPI_DEVICE_NOTIFY,
-						 acpi_thermal_notify);
+	result = acpi_dev_install_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
+						 acpi_thermal_notify, device);
 	if (result)
 		goto flush_wq;
 
@@ -1005,7 +1005,7 @@ static void acpi_thermal_remove(struct acpi_device *device)
 
 	tz = acpi_driver_data(device);
 
-	acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY,
+	acpi_dev_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
 				       acpi_thermal_notify);
 
 	flush_workqueue(acpi_thermal_pm_queue);
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 254685085c82..95d5193f236f 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -515,11 +515,10 @@ void acpi_bus_private_data_handler(acpi_handle, void *);
 int acpi_bus_get_private_data(acpi_handle, void **);
 int acpi_bus_attach_private_data(acpi_handle, void *);
 void acpi_bus_detach_private_data(acpi_handle);
-int acpi_dev_install_notify_handler(struct acpi_device *adev,
-				    u32 handler_type,
-				    acpi_notify_handler handler);
-void acpi_dev_remove_notify_handler(struct acpi_device *adev,
-				    u32 handler_type,
+int acpi_dev_install_notify_handler(acpi_handle handle, u32 handler_type,
+				    acpi_notify_handler handler,
+				    void *context);
+void acpi_dev_remove_notify_handler(acpi_handle handle, u32 handler_type,
 				    acpi_notify_handler handler);
 extern int acpi_notifier_call_chain(struct acpi_device *, u32, u32);
 extern int register_acpi_notifier(struct notifier_block *);
-- 
2.41.0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ