• Sricharan R's avatar
    i2c: qup: Fix broken dma when CONFIG_DEBUG_SG is enabled · 685983f4
    Sricharan R authored
    With CONFIG_DEBUG_SG is enabled and when dma mode is used, below dump is seen,
    
    ------------[ cut here ]------------
    kernel BUG at include/linux/scatterlist.h:140!
    Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.4.0-00459-g9f087b9-dirty #7
    Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
    task: ffffffc036868000 ti: ffffffc036870000 task.ti: ffffffc036870000
    PC is at qup_sg_set_buf.isra.13+0x138/0x154
    LR is at qup_sg_set_buf.isra.13+0x50/0x154
    pc : [<ffffffc0005a0ed8>] lr : [<ffffffc0005a0df0>] pstate: 60000145
    sp : ffffffc0368735c0
    x29: ffffffc0368735c0 x28: ffffffc036873752
    x27: ffffffc035233018 x26: ffffffc000c4e000
    x25: 0000000000000000 x24: 0000000000000004
    x23: 0000000000000000 x22: ffffffc035233668
    x21: ffffff80004e3000 x20: ffffffc0352e0018
    x19: 0000004000000000 x18: 0000000000000028
    x17: 0000000000000004 x16: ffffffc0017a39c8
    x15: 0000000000001cdf x14: ffffffc0019929d8
    x13: ffffffc0352e0018 x12: 0000000000000000
    x11: 0000000000000001 x10: 0000000000000001
    x9 : ffffffc0012b2d70 x8 : ffffff80004e3000
    x7 : 0000000000000018 x6 : 0000000030000000
    x5 : ffffffc00199f018 x4 : ffffffc035233018
    x3 : 0000000000000004 x2 : 00000000c0000000
    x1 : 0000000000000003 x0 : 0000000000000000
    
    Process swapper/0 (pid: 1, stack limit = 0xffffffc036870020)
    Stack: (0xffffffc0368735c0 to 0xffffffc036874000)
    
    sg_set_bug expects that the buf parameter passed in should be from
    lowmem and a valid pageframe. This is not true for pages from
    dma_alloc_coherent which can be carveouts, hence the check fails.
    Change allocation of sg buffers from dma_coherent memory to kzalloc
    to fix the issue. Note that now dma_map/unmap is used to make the
    kzalloc'ed buffers coherent before passing it to the dmaengine.
    Signed-off-by: default avatarSricharan R <sricharan@codeaurora.org>
    Reviewed-by: default avatarAndy Gross <andy.gross@linaro.org>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    685983f4
i2c-qup.c 35.8 KB