• Tomoya MORINAGA's avatar
    pch_dma: Fix suspend issue · c43f1508
    Tomoya MORINAGA authored
    Currently, executing suspend/hibernation,
    memory access violation occurs.
    
    In pch_dma_save_regs() called by suspend(),
    you can see the following code.
    
    static void pch_dma_save_regs(struct pch_dma *pd)
    {
    snip...
            list_for_each_entry_safe(chan, _c, &pd->dma.channels, device_node) {
                    pd_chan = to_pd_chan(chan);
    
                    pd->ch_regs[i].dev_addr = channel_readl(pd_chan, DEV_ADDR);
                    pd->ch_regs[i].mem_addr = channel_readl(pd_chan, MEM_ADDR);
                    pd->ch_regs[i].size = channel_readl(pd_chan, SIZE);
                    pd->ch_regs[i].next = channel_readl(pd_chan, NEXT);
    
                    i++;
            }
    }
    
    Max loop count is 12 defined at pci_table.
    So, this caused memory access violation.
    
    This patch fixes the issue
     - Modify array size (MAX_CHAN_NR)
    Signed-off-by: default avatarTomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com>
    Signed-off-by: default avatarVinod Koul <vinod.koul@linux.intel.com>
    c43f1508
pch_dma.c 26.5 KB