Re: [PATCH] acpi, pci, irq: account for early penalty assignment

Sinan Kaya
2016-02-24T14:41:23Z

On 2/24/2016 8:04 AM, Rafael J. Wysocki wrote:
> Hi,
>
> On Tue, Feb 16, 2016 at 3:15 AM, Sinan Kaya <okaya@codeaurora.org> wrote:
>> On 2/15/2016 7:26 PM, Rafael J. Wysocki wrote:
>>> On Mon, Feb 15, 2016 at 5:41 PM, Sinan Kaya <okaya@codeaurora.org> wrote:
>>>> A crash has been observed when assigning penalty on x86 systems.
>>>>
>>>> It looks like this problem happens on x86 platforms with IOAPIC and an SCI
>>>> interrupt override in the ACPI table with interrupt number greater than
>>>> 16. (22 in this example)
>>>>
>>>> The bug has been introduced by "ACPI, PCI, irq: remove interrupt count
>>>> restriction" commit. The code was using kmalloc to resize the interrupt
>>>> list. In this use case, the set penalty call is coming from early phase
>>>> and the heap is not initialized yet.
>>>>
>>>> BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
>>>> IP: [<ffffffff811e8b9d>] kmem_cache_alloc_trace+0xad/0x1c0
>>>> PGD 0
>>>> Oops: 0000 [#1] SMP
>>>> Modules linked in:
>>>> CPU: 0 PID: 0 Comm: swapper Not tainted 4.5.0-rc2Feb-3_RK #1
>>>> Hardware name: HP Superdome2 16s, BIOS Bundle: 007.006.000 SFW: 033.162.000
>>>> 10/30/2015
>>>> [<ffffffff813bc190>] acpi_irq_set_penalty+0x60/0x8e
>>>> [<ffffffff813bc1df>] acpi_irq_add_penalty+0x21/0x26
>>>> [<ffffffff813bc76d>] acpi_penalize_sci_irq+0x25/0x28
>>>> [<ffffffff81b8260d>] acpi_sci_ioapic_setup+0x68/0x78
>>>> [<ffffffff81b830fc>] acpi_boot_init+0x2cc/0x533
>>>> [<ffffffff810677c8>] ? set_pte_vaddr_pud+0x48/0x50
>>>> [<ffffffff81b828cf>] ? acpi_parse_x2apic+0x77/0x77
>>>> [<ffffffff81b82858>] ? dmi_ignore_irq0_timer_override+0x30/0x30
>>>> [<ffffffff81b77c1e>] setup_arch+0xc24/0xce9
>>>> [<ffffffff81b6e120>] ? early_idt_handler_array+0x120/0x120
>>>> [<ffffffff81b6ed94>] start_kernel+0xfc/0x506
>>>> [<ffffffff81b6e120>] ? early_idt_handler_array+0x120/0x120
>>>> [<ffffffff81b6e120>] ? early_idt_handler_array+0x120/0x120
>>>> [<ffffffff81b6e5ee>] x86_64_start_reservations+0x2a/0x2c
>>>> [<ffffffff81b6e73c>] x86_64_start_kernel+0x14c/0x16f
>>>>
>>>> Besides from the use case above, there is one more situation where
>>>> set_penalty is being called from the init context like. There is support
>>>> for setting the penalty through kernel command line.
>>>>
>>>> Adding support to be called from early context for limited number of
>>>> interrupts.
>>>>
>>>> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
>>>
>>> This looks somewhat hackish to me to be honest.
>> I know.
>
> So after an e-mail exchange with Bjorn I've decided to revert the
> problematic commit for 4.5, so please submit it again with the fix
> folded in (or a better way to address the issue if you have one).
>

OK, I'll post a new version of the removed patch with this included. We can
discuss on the list if there is a better way of doing things.

> Thanks,
> Rafael
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>

--
Sinan Kaya
Qualcomm Technologies, Inc. on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project