
On Saturday, November 02, 2013 11:18:31 PM Rafael J. Wysocki wrote:
On Friday, November 01, 2013 02:35:54 PM Jarkko Nikula wrote:
We may find use for struct acpi_device and acpi_bus_get_device() in generic code without wanting to add #if IS_ENABLED(CONFIG_ACPI) churn there.
Code can use ACPI_HANDLE() test to let compiler optimize out code blocks that are not used in !CONFIG_ACPI builds but structure definitions and function stubs must be available.
This patch moves CONFIG_ACPI test so that struct acpi_device definition is available for all builds that include acpi_bus.h and provides a stub for acpi_bus_get_device().
Signed-off-by: Jarkko Nikula jarkko.nikula@linux.intel.com
This turns out the cause build problems to happen on some architectures.
I guess it's sufficient to simply define a stub struct acpi_device as
struct acpi_device { struct device dev; };
for !CONFIG_ACPI instead.
Generally, it is a bad idea to #include acpi_bus.h for !CONFIG_ACPI.
The appended patch works for me, sorry for stealing part of your changelog.
Thanks, Rafael
--- From: Rafael J. Wysocki rafael.j.wysocki@intel.com Subject: ACPI: Define struct acpi_device for CONFIG_ACPI unset
We may find use for struct acpi_device and acpi_bus_get_device() in generic code without wanting to add #if IS_ENABLED(CONFIG_ACPI) churn there.
Code can use ACPI_HANDLE() test to let compiler optimize out code blocks that are not used in !CONFIG_ACPI builds but structure definitions and function stubs must be available.
Define a stub struct acpi_device for CONFIG_ACPI unset containing dev as the only member and a stub acpi_bus_get_device() always returning an error code.
Signed-off-by: Rafael J. Wysocki rafael.j.wysocki@intel.com --- include/linux/acpi.h | 10 ++++++++++ 1 file changed, 10 insertions(+)
Index: linux-pm/include/linux/acpi.h =================================================================== --- linux-pm.orig/include/linux/acpi.h +++ linux-pm/include/linux/acpi.h @@ -472,7 +472,17 @@ static inline bool acpi_driver_match_dev }
#define ACPI_PTR(_ptr) (NULL) +typedef void * acpi_handle;
+struct acpi_device { + struct device dev; +}; + +static inline int acpi_bus_get_device(acpi_handle handle, + struct acpi_device **device) +{ + return -ENODEV; +} #endif /* !CONFIG_ACPI */
#ifdef CONFIG_ACPI