alistair23-linux/arch/mips/include/asm/mach-au1x00
Manuel Lauss 22f4bb68b3 MIPS: Alchemy: Fix dbdma ring destruction memory debugcheck.
DBDMA descriptors need to be located at 32-byte aligned addresses;
however kmalloc in conjunction with the SLAB allocator and
CONFIG_DEBUG_SLUB enabled doesn't deliver any.  The dbdma code works
around that by allocating a larger area and realigning the start
address within it.

When freeing a channel however this adjustment is not taken into
account which results in an oops:

Kernel bug detected[#1]:
[...]
Call Trace:
[<80186010>] cache_free_debugcheck+0x284/0x318
[<801869d8>] kfree+0xe8/0x2a0
[<8010b31c>] au1xxx_dbdma_chan_free+0x2c/0x7c
[<80388dc8>] au1x_pcm_dbdma_free+0x34/0x4c
[<80388fa8>] au1xpsc_pcm_close+0x28/0x38
[<80383cb8>] soc_codec_close+0x14c/0x1cc
[<8036dbb4>] snd_pcm_release_substream+0x60/0xac
[<8036dc40>] snd_pcm_release+0x40/0xa0
[<8018c7a8>] __fput+0x11c/0x228
[<80188f60>] filp_close+0x7c/0x98
[<80189018>] sys_close+0x9c/0xe4
[<801022a0>] stack_done+0x20/0x3c

Fix this by recording the address delivered by kmalloc() and using
it as parameter to kfree().

This fix is only necessary with the SLAB allocator and CONFIG_DEBUG_SLAB
enabled;  non-debug SLAB, SLUB do return nicely aligned addresses,
debug-enabled SLUB currently panics early in the boot process.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
To: Linux-MIPS <linux-mips@linux-mips.org>
Cc: Manuel Lauss <manuel.lauss@gmail.com>
Patchwork: http://patchwork.linux-mips.org/patch/878/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2010-02-01 20:30:25 +01:00
..
au1xxx.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00
au1xxx_dbdma.h MIPS: Alchemy: Fix dbdma ring destruction memory debugcheck. 2010-02-01 20:30:25 +01:00
au1xxx_ide.h MIPS: au1xxx-ide: Fix build with CONFIG_PM 2009-05-14 13:50:24 +01:00
au1xxx_psc.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00
au1000.h MIPS: Alchemy: Add missing Au1200 GPIO203 interrupt 2009-05-14 13:50:24 +01:00
au1000_dma.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00
au1100_mmc.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00
au1550_spi.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00
cpu-feature-overrides.h MIPS: Alchemy: provide cpu feature overrides. 2009-03-30 14:49:46 +02:00
gpio-au1000.h MIPS: AU1000: Fix build failure for db1x00 configured for Au1100 SoC 2009-11-02 12:00:03 +01:00
gpio.h MIPS: Alchemy: Rewrite GPIO support. 2009-06-17 11:06:28 +01:00
ioremap.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00
prom.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00
war.h MIPS: Move headfiles to new location below arch/mips/include 2008-10-11 16:18:52 +01:00