On Wed, 12 Feb 2020 14:05:39 +0300, Mika Westerberg wrote: > ACPI Generic Address Structure (GAS) access_width field is not in bytes > as the driver seems to expect in few places so fix this by using the > newly introduced macro ACPI_ACCESS_BIT_WIDTH(). > > Reported-by: Jean Delvare <jdelvare@xxxxxxx> > Signed-off-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx> > --- > Not sure if this is stable material since there is no user visible issues > without the fix. If this needs to go stable then the ACPICA change need to > be taken there as well (or we make separate fix for stable without the > macro). I thought about it too and I don't think it qualifies for stable because we have no proof it affects any user in pratcice. You may want to add a "Fixes:" tag though to track where the bug was introduced and let distributions backport the fix if they want to. > > drivers/acpi/acpi_watchdog.c | 3 +-- > drivers/watchdog/wdat_wdt.c | 2 +- > 2 files changed, 2 insertions(+), 3 deletions(-) > > diff --git a/drivers/acpi/acpi_watchdog.c b/drivers/acpi/acpi_watchdog.c > index b5516b04ffc0..ef0832999892 100644 > --- a/drivers/acpi/acpi_watchdog.c > +++ b/drivers/acpi/acpi_watchdog.c > @@ -126,12 +126,11 @@ void __init acpi_watchdog_init(void) > gas = &entries[i].register_region; > > res.start = gas->address; > + res.end = res.start + ACPI_ACCESS_BIT_WIDTH(gas->access_width) - 1; > if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) { > res.flags = IORESOURCE_MEM; > - res.end = res.start + ALIGN(gas->access_width, 4) - 1; > } else if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO) { > res.flags = IORESOURCE_IO; > - res.end = res.start + gas->access_width - 1; > } else { > pr_warn("Unsupported address space: %u\n", > gas->space_id); > diff --git a/drivers/watchdog/wdat_wdt.c b/drivers/watchdog/wdat_wdt.c > index b069349b52f5..2132018f031d 100644 > --- a/drivers/watchdog/wdat_wdt.c > +++ b/drivers/watchdog/wdat_wdt.c > @@ -389,7 +389,7 @@ static int wdat_wdt_probe(struct platform_device *pdev) > > memset(&r, 0, sizeof(r)); > r.start = gas->address; > - r.end = r.start + gas->access_width - 1; > + r.end = r.start + ACPI_ACCESS_BIT_WIDTH(gas->access_width) - 1; > if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) { > r.flags = IORESOURCE_MEM; > } else if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO) { You are using ACPI_ACCESS_BIT_WIDTH() where you clearly meant to use ACPI_ACCESS_BYTE_WIDTH(). -- Jean Delvare SUSE L3 Support