Revision 2be23c475af8ae4e25f8bab08d815b17593bd547 authored by Russell King on 08 September 2010, 15:27:56 UTC, committed by Russell King on 08 September 2010, 15:27:56 UTC
Dave Hylands reports: | We've observed a problem with dma_alloc_writecombine when the system | is under heavy load (heavy bus traffic). We've managed to reduce the | problem to the following snippet, which is run from a kthread in a | continuous loop: | | void *virtAddr; | dma_addr_t physAddr; | unsigned int numBytes = 256; | | for (;;) { | virtAddr = dma_alloc_writecombine(NULL, | numBytes, &physAddr, GFP_KERNEL); | if (virtAddr == NULL) { | printk(KERN_ERR "Running out of memory\n"); | break; | } | | /* access DMA memory allocated */ | tmp = virtAddr; | *tmp = 0x77; | | /* free DMA memory */ | dma_free_writecombine(NULL, | numBytes, virtAddr, physAddr); | | ...sleep here... | } | | By itself, the code will run forever with no issues. However, as we | increase our bus traffic (typically using DMA) then the *tmp = 0x77 | line will eventually cause a page fault. If we add a small delay (a | few microseconds) before the *tmp = 0x77, then we don't see a page | fault, even under heavy load. A dsb() is required after modifying the PTE entries to ensure that they will always be visible. Add this dsb(). Reported-by: Dave Hylands <dhylands@gmail.com> Tested-by: Dave Hylands <dhylands@gmail.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
1 parent a387f0f
Kconfig
#SPI drivers
menuconfig SND_SPI
bool "SPI sound devices"
depends on SPI
default y
help
Support for sound devices connected via the SPI bus.
if SND_SPI
config SND_AT73C213
tristate "Atmel AT73C213 DAC driver"
depends on ATMEL_SSC
select SND_PCM
help
Say Y here if you want to use the Atmel AT73C213 external DAC. This
DAC can be found on Atmel development boards.
This driver requires the Atmel SSC driver for sound sink, a
peripheral found on most AT91 and AVR32 microprocessors.
To compile this driver as a module, choose M here: the module will be
called snd-at73c213.
config SND_AT73C213_TARGET_BITRATE
int "Target bitrate for AT73C213"
depends on SND_AT73C213
default "48000"
range 8000 50000
help
Sets the target bitrate for the bitrate calculator in the driver.
Limited by hardware to be between 8000 Hz and 50000 Hz.
Set to 48000 Hz by default.
endif # SND_SPI
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...