• Seungwon Jeon's avatar
    mmc: dw_mmc: fix error handling on response error · 71abb133
    Seungwon Jeon authored
    Even if response error is detected in case data command, data transfer
    is continued. It means that data can live in FIFO. Current handling
    just breaks out the request when seeing the command error. This causes
    kernel panic in dw_mci_read_data_pio() [host->data = NULL]. And also,
    FIFO should be guaranteed to be empty.
    
    Unable to handle kernel NULL pointer dereference at virtual address 00000018
    <...>
    [<c02af814>] (dw_mci_read_data_pio+0x68/0x198) from [<c02b04b4>] (dw_mci_interrupt+0x374/0x3a0)
    [<c02b04b4>] (dw_mci_interrupt+0x374/0x3a0) from [<c006b094>] (handle_irq_event_percpu+0x50/0x194)
    [<c006b094>] (handle_irq_event_percpu+0x50/0x194) from [<c006b214>] (handle_irq_event+0x3c/0x5c)
    [<c006b214>] (handle_irq_event+0x3c/0x5c) from [<c006de1c>] (handle_fasteoi_irq+0xa4/0x148)
    [<c006de1c>] (handle_fasteoi_irq+0xa4/0x148) from [<c006aa88>] (generic_handle_irq+0x20/0x30)
    [<c006aa88>] (generic_handle_irq+0x20/0x30) from [<c000f154>] (handle_IRQ+0x38/0x90)
    [<c000f154>] (handle_IRQ+0x38/0x90) from [<c00085bc>] (gic_handle_irq+0x34/0x68)
    [<c00085bc>] (gic_handle_irq+0x34/0x68) from [<c0011f40>] (__irq_svc+0x40/0x70)
    Exception stack(0xef0b1c00 to 0xef0b1c48)
    1c00: 000eb0cf ffffffff 00001300 c01a7738 ef295e10 0000000a c04df298 ef0b1dc0
    1c20: ef295ec0 00000000 00000000 00000006 00000000 ef0b1c48 c02b1274 c01a7764
    1c40: 20000113 ffffffff
    [<c0011f40>] (__irq_svc+0x40/0x70) from 	[<c01a7764>] (__loop_delay+0x0/0xc)
    Code: e1a00005 e0891006 e0662004 e12fff33 (e59a3018)
    ---[ end trace a7043b9ba9aed1db ]---
    Kernel panic - not syncing: Fatal exception in interrupt
    Signed-off-by: default avatarSeungwon Jeon <tgih.jun@samsung.com>
    Tested-by: default avatarAlim Akhtar <alim.akhtar@samsung.com>
    Signed-off-by: default avatarChris Ball <cjb@laptop.org>
    71abb133
dw_mmc.c 66.8 KB