Re: [PATCH] resource: Prevent irqresource_disabled() from erasing flags

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 8, 2021 at 12:38 PM Angela Czubak <acz@xxxxxxxxxxxx> wrote:
>
> Do not overwrite flags as it leads to erasing triggering and polarity
> information which might be useful in case of hard-coded interrupts.
> This way the information can be read later on even though mapping to
> APIC domain failed.
>
> Signed-off-by: Angela Czubak <acz@xxxxxxxxxxxx>
> ---
> Some Chromebooks use hard-coded interrupts in their ACPI tables.
> This is an excerpt as dumped on Relm:
>
> ...
>             Name (_HID, "ELAN0001")  // _HID: Hardware ID
>             Name (_DDN, "Elan Touchscreen ")  // _DDN: DOS Device Name
>             Name (_UID, 0x05)  // _UID: Unique ID
>             Name (ISTP, Zero)
>             Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
>             {
>                 Name (BUF0, ResourceTemplate ()
>                 {
>                     I2cSerialBusV2 (0x0010, ControllerInitiated, 0x00061A80,
>                         AddressingMode7Bit, "\\_SB.I2C1",
>                         0x00, ResourceConsumer, , Exclusive,
>                         )
>                     Interrupt (ResourceConsumer, Edge, ActiveLow, Exclusive, ,, )
>                     {
>                         0x000000B8,
>                     }
>                 })
>                 Return (BUF0) /* \_SB_.I2C1.ETSA._CRS.BUF0 */
>             }
> ...
>
> This interrupt is hard-coded to 0xB8 = 184 which is too high to be mapped
> to IO-APIC, so no triggering information is propagated as acpi_register_gsi()
> fails and irqresource_disabled() is issued, which leads to erasing triggering
> and polarity information.
> If that function added its flags instead of overwriting them the correct IRQ
> type would be set even for the hard-coded interrupts, which allows device driver
> to retrieve it.
> This patch was originaly sent to linux-kernel@xxxxxxxxxxxxxxx.
> I am resending it to linux-acpi@xxxxxxxxxxxxxxx as per request of
> Rafael J. Wysocki to gather more visibility.
> Please let us know if you see possible issues with not erasing the flags or this
> modification seems acceptable.

I've applied the patch as 5.13 material, thanks!

>  include/linux/ioport.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/ioport.h b/include/linux/ioport.h
> index 55de385c839cf..647744d8514e0 100644
> --- a/include/linux/ioport.h
> +++ b/include/linux/ioport.h
> @@ -331,7 +331,7 @@ static inline void irqresource_disabled(struct resource *res, u32 irq)
>  {
>         res->start = irq;
>         res->end = irq;
> -       res->flags = IORESOURCE_IRQ | IORESOURCE_DISABLED | IORESOURCE_UNSET;
> +       res->flags |= IORESOURCE_IRQ | IORESOURCE_DISABLED | IORESOURCE_UNSET;
>  }
>
>  extern struct address_space *iomem_get_mapping(void);
> --
> 2.17.1
>



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux