• Yu Zhao's avatar
    Revert "ASoC: Intel: Skylake: Acquire irq after RIRB allocation" · 542cedec
    Yu Zhao authored
    This reverts commit 12eeeb4f.
    
    The patch doesn't fix accessing memory with null pointer in
    skl_interrupt().
    
    There are two problems: 1) skl_init_chip() is called twice, before
    and after dma buffer is allocate. The first call sets bus->chip_init
    which prevents the second from initializing bus->corb.buf and
    rirb.buf from bus->rb.area. 2) snd_hdac_bus_init_chip() enables
    interrupt before snd_hdac_bus_init_cmd_io() initializing dma buffers.
    There is a small window which skl_interrupt() can be called if irq
    has been acquired. If so, it crashes when using null dma buffer
    pointers.
    
    Will fix the problems in the following patches. Also attaching the
    crash for future reference.
    
    [   16.949148] general protection fault: 0000 [#1] PREEMPT SMP KASAN PTI
    <snipped>
    [   16.950903] Call Trace:
    [   16.950906]  <IRQ>
    [   16.950918]  skl_interrupt+0x19e/0x2d6 [snd_soc_skl]
    [   16.950926]  ? dma_supported+0xb5/0xb5 [snd_soc_skl]
    [   16.950933]  __handle_irq_event_percpu+0x27a/0x6c8
    [   16.950937]  ? __irq_wake_thread+0x1d1/0x1d1
    [   16.950942]  ? __do_softirq+0x57a/0x69e
    [   16.950944]  handle_irq_event_percpu+0x95/0x1ba
    [   16.950948]  ? _raw_spin_unlock+0x65/0xdc
    [   16.950951]  ? __handle_irq_event_percpu+0x6c8/0x6c8
    [   16.950953]  ? _raw_spin_unlock+0x65/0xdc
    [   16.950957]  ? time_cpufreq_notifier+0x483/0x483
    [   16.950959]  handle_irq_event+0x89/0x123
    [   16.950962]  handle_fasteoi_irq+0x16f/0x425
    [   16.950965]  handle_irq+0x1fe/0x28e
    [   16.950969]  do_IRQ+0x6e/0x12e
    [   16.950972]  common_interrupt+0x7a/0x7a
    [   16.950974]  </IRQ>
    <snipped>
    [   16.951031] RIP: snd_hdac_bus_update_rirb+0x19b/0x4cf [snd_hda_core] RSP: ffff88015c807c08
    [   16.951036] ---[ end trace 58bf9ece1775bc92 ]---
    
    Fixes: 2eeeb4f4733b ("ASoC: Intel: Skylake: Acquire irq after RIRB allocation")
    Signed-off-by: default avatarYu Zhao <yuzhao@google.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    542cedec
skl.c 24.2 KB