mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-28 16:53:49 +00:00
ACPI: allow building without CONFIG_HAS_IOPORT
CONFIG_HAS_IOPORT will soon become optional and cause a build time failure when it is disabled but a driver calls inb()/outb(). At the moment, all architectures that can support ACPI have port I/O, but this is not necessarily the case in the future on non-x86 architectures. The result is a set of errors like: drivers/acpi/osl.c: In function 'acpi_os_read_port': include/asm-generic/io.h:542:14: error: call to '_inb' declared with attribute error: inb()) requires CONFIG_HAS_IOPORT Nothing should actually call these functions in this configuration, and if it does, the result would be undefined behavior today, possibly a NULL pointer dereference. Change the low-level functions to return a proper error code when HAS_IOPORT is disabled. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://patch.msgid.link/20241030123701.1538919-2-arnd@kernel.org Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
59b723cd2a
commit
4435a12501
@ -1017,7 +1017,8 @@ static int cpc_read(int cpu, struct cpc_register_resource *reg_res, u64 *val)
|
||||
*val = 0;
|
||||
size = GET_BIT_WIDTH(reg);
|
||||
|
||||
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
|
||||
if (IS_ENABLED(CONFIG_HAS_IOPORT) &&
|
||||
reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
|
||||
u32 val_u32;
|
||||
acpi_status status;
|
||||
|
||||
@ -1091,7 +1092,8 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
|
||||
|
||||
size = GET_BIT_WIDTH(reg);
|
||||
|
||||
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
|
||||
if (IS_ENABLED(CONFIG_HAS_IOPORT) &&
|
||||
reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
|
||||
acpi_status status;
|
||||
|
||||
status = acpi_os_write_port((acpi_io_address)reg->address,
|
||||
|
@ -642,6 +642,15 @@ acpi_status acpi_os_read_port(acpi_io_address port, u32 *value, u32 width)
|
||||
{
|
||||
u32 dummy;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_HAS_IOPORT)) {
|
||||
/*
|
||||
* set all-1 result as if reading from non-existing
|
||||
* I/O port
|
||||
*/
|
||||
*value = GENMASK(width, 0);
|
||||
return AE_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
if (value)
|
||||
*value = 0;
|
||||
else
|
||||
@ -665,6 +674,9 @@ EXPORT_SYMBOL(acpi_os_read_port);
|
||||
|
||||
acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_HAS_IOPORT))
|
||||
return AE_NOT_IMPLEMENTED;
|
||||
|
||||
if (width <= 8) {
|
||||
outb(value, port);
|
||||
} else if (width <= 16) {
|
||||
|
Loading…
Reference in New Issue
Block a user