On Thu, Nov 11, 2010 at 6:04 PM, Manu Abraham abraham.manu@gmail.com wrote:
On Thu, Nov 11, 2010 at 4:00 PM, Jaroslav Kysela perex@perex.cz wrote:
On Thu, 11 Nov 2010, Manu Abraham wrote:
On Wed, Nov 10, 2010 at 11:35 PM, Jaroslav Kysela perex@perex.cz wrote:
I adapted the whole thing to make the buffersize divided amongst the XS2D_BUFFERS (8):
Probably yes.
I hope the mapping of the buffers is okay ? It looks thus, now ..
From information you sent me about hw privately, I think that the period_bytes must be 4096 or multiple of this value with minumum count of periods 8 (or multiple of 8). Otherwise you get a non-continuous memory area (the hw uses only portion of system memory page, thus there'll be gaps). The problem is that we have MMAP_COMPLEX mode, but no application can handle (does not implement) this mmap mode and I'm not sure, if we can even describe the DMA buffer size layout for this case for your specific hw.
I would use:
snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 4096);
snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIODS, 8);
And define periods_min = 8 (max to multiple 8 - choose your max limit) and period_bytes_min to 4096 (max to multiple 4096 - choose your max limit).
Note that -EIO means that your driver does not called snd_pcm_period_elapsed() and/or the pointer callback returns wrong position to the audio ring buffer.
Ok, modified it, also added in code to acquire the stream, It's a bit more complete now. The crazy part that I do see now, is that I see an inconsistent lock state with the hda_intel driver which is the soundcard on my system. But I don't understand why the locking on it has to become inconsistent on loading this driver.
Ok, I found the reason: I was passing a single page for the page_table, which I guess corrupted the whole stack !!
Eventually, I fixed the same. but ran into another issue ? Should trigger not sleep or something that way ? Currently, I see the issue as follows in the log, but if the ops->run() callback is commented out I don't get that weird message/error about lock states.
Now, ops->run(), ie xs2dtl_run() is called with other other streams, such as an MPEG stream, where it doesn't show any issues.
Any idea, why uncommenting ops->run() produces that message ? Should trigger not sleep ? Confused ...
static int saa7231_hw_params(struct snd_pcm_substream *pcm, struct snd_pcm_hw_params *params) { struct saa7231_audio *audio = snd_pcm_substream_chip(pcm); struct saa7231_dev *saa7231 = audio->saa7231; struct snd_pcm_runtime *rt = pcm->runtime;
struct saa7231_dmabuf *buffer; struct saa7231_stream *stream; struct saa7231_dmabuf *dmabuf;
struct page **ptable;
void *mem; void *dma_area;
int i, j, pages, bytes, periods, bufsiz, idx;
#define MAX_ENTRIES_PER_PAGE (PAGE_SIZE / 8) #define PAGES_PER_XS2D(__pages) (__pages / XS2D_BUFFERS) #define BUFSIZE_PER_XS2D(__size) (__size / XS2D_BUFFERS)
dprintk(SAA7231_DEBUG, 1, "DEBUG: ()");
periods = params_periods(params); bytes = params_period_bytes(params); bufsiz = params_buffer_bytes(params); pages = snd_sgbuf_aligned_pages(bufsiz);
audio->bufsize = bufsiz;
dprintk(SAA7231_DEBUG, 1, "bufsiz=%d periods=%d bytes=%d pages=%d", bufsiz, periods, bytes, pages);
/* enable stream */ /* initializing 8 buffer with "pages" pages each .. */ stream = saa7231_stream_init(saa7231, AUDIO_CAPTURE, ADAPTER_INT, 0, (pages / XS2D_BUFFERS)); if (!stream) { dprintk(SAA7231_ERROR, 1, "ERROR: Registering stream"); return -ENOMEM; } audio->stream = stream; buffer = stream->dmabuf; saa7231_add_irqevent(saa7231, 43, SAA7231_EDGE_RISING, saa7231_audio_evhandler, "AS2D_AVIS"); dprintk(SAA7231_DEBUG, 1, "Mapping %d buffers with %d pages each", XS2D_BUFFERS, PAGES_PER_XS2D(pages));
dprintk(SAA7231_DEBUG, 1, "Page Table array size=%d", pages); ptable = kzalloc((sizeof (struct page) * pages), GFP_KERNEL); if (!ptable) { dprintk(SAA7231_ERROR, 1, "ERROR: No memory to allocate virtual map"); return -ENOMEM; } audio->ptable = ptable; idx = 0;
for (i = 0; i < XS2D_BUFFERS; i ++) { dmabuf = &buffer[i]; mem = dmabuf->vmalloc; for (j = 0; j < PAGES_PER_XS2D(pages); j++) { BUG_ON(idx > pages); dprintk(SAA7231_DEBUG, 1, "Mapping Page:%d from XS2D_BUFFER:%d to PTA Offset:%d", j, i, idx); ptable[idx] = virt_to_page(mem); mem += PAGE_SIZE; idx += 1; } }
dma_area = vmap(ptable, pages, VM_MAP, PAGE_KERNEL); rt->dma_area = dma_area; rt->dma_bytes = pages * PAGE_SIZE; rt->dma_addr = 0;
return 0; }
/* * saa7231_capture_trigger() * * This callback is called when the PCM is started, stoppped or paused. */ static int saa7231_capture_trigger(struct snd_pcm_substream *pcm, int cmd) { struct saa7231_audio *audio = snd_pcm_substream_chip(pcm); struct saa7231_dev *saa7231 = audio->saa7231; struct saa7231_stream *stream = audio->stream; struct stream_ops *ops = &stream->ops; int err = 0;
switch (cmd) { case SNDRV_PCM_TRIGGER_START: dprintk(SAA7231_DEBUG, 1, "Trying to START stream, cmd=%d", cmd); if (ops->run) { err = ops->run(stream); if (err) { dprintk(SAA7231_ERROR, 1, "ERROR: starting stream, err=%d", err); return -EIO; } } break; case SNDRV_PCM_TRIGGER_STOP: dprintk(SAA7231_DEBUG, 1, "Trying to STOP stream, cmd=%d", cmd); if (ops->stop) { err = ops->stop(stream); if (err) { dprintk(SAA7231_ERROR, 1, "ERROR: stopping stream, err=%d", err); return -EIO; } } break; case SNDRV_PCM_TRIGGER_PAUSE_PUSH: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: case SNDRV_PCM_TRIGGER_SUSPEND: dprintk(SAA7231_DEBUG, 1, "Trying to PAUSE stream, cmd=%d", cmd); if (ops->pause) { err = ops->pause(stream); if (err) { dprintk(SAA7231_ERROR, 1, "ERROR: pausing stream, err=%d", err); return -EIO; } } break; default: dprintk(SAA7231_DEBUG, 1, "Unknown command, cmd=%d", cmd); snd_BUG(); return -EINVAL; } return 0; }
static int saa7231_xs2dtl_run(struct saa7231_stream *stream) { unsigned long run = 0; u32 delay;
u32 reg; struct saa7231_dev *saa7231 = stream->saa7231; struct saa7231_dtl *dtl = &stream->dtl; struct saa7231_dmabuf *dmabuf = stream->dmabuf; u32 module = dtl->module; int port = stream->port_id;
SAA7231_WR(DMAADDR(0, port, dmabuf, 0), SAA7231_BAR0, module, S2D_CHx_B0_B_START_ADDRESS(0)); SAA7231_WR(DMAADDR(0, port, dmabuf, 1), SAA7231_BAR0, module, S2D_CHx_B1_B_START_ADDRESS(0));
/* tell the device that the mmu got updated */ reg = SAA7231_RD(SAA7231_BAR0, MMU, MMU_DMA_CONFIG(stream->port_id)); reg &= ~0x40; SAA7231_WR(reg, SAA7231_BAR0, MMU, MMU_DMA_CONFIG(stream->port_id)); SAA7231_WR((reg | 0x40), SAA7231_BAR0, MMU, MMU_DMA_CONFIG(stream->port_id));
dtl->addr_prev = 0xffffff;
/* * monitor PT load operation but wait a short time before * checking the PT valid. Otherwise we will see the old state. */ delay = 1000; do { if (!run) { msleep(10); delay--; } run = SAA7231_RD(SAA7231_BAR0, MMU, MMU_DMA_CONFIG(stream->port_id)) & 0x80; } while (!run && delay);
/* check status of the PTA load operation */ if (!run) { dprintk(SAA7231_ERROR, 1, "ERROR, Preload PTA failed"); return -EINVAL; }
/* read channel control register, enable channel */ reg = SAA7231_RD(SAA7231_BAR0, module, S2D_CHx_CTRL(0)); SAA7231_WR(reg | 0x1, SAA7231_BAR0, module, S2D_CHx_CTRL(0)); reg = SAA7231_RD(SAA7231_BAR0, module, S2D_S2D_CTRL);
/* clear all pending interrupts */ SAA7231_WR(0x3fff, SAA7231_BAR0, module, S2D_INT_CLR_STATUS(0));
/* enable interrupts */ SAA7231_WR(0x1800, SAA7231_BAR0, module, S2D_INT_SET_ENABLE(0));
/* enable capture */ reg |= 0x1; SAA7231_WR(reg, SAA7231_BAR0, module, S2D_S2D_CTRL); dtl->stream_run = 1;
return 0; }
testbox ~ # arecord -D plughw:2,0 --format S16_LE --rate=32000 -c 2 > ~/test_capture.wav Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 32000 Hz, Stereo arecord: pcm_read:1617: read error: Input/output error
[ 276.117516] SAA7231 0000:05:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 276.117524] SAA7231 0000:05:00.0: setting latency timer to 64 [ 276.117547] saa7231_pci_init (0): BAR 0 Offset: 04 BAR 2 Offset: 04 [ 276.117549] saa7231_pci_init (0): BAR0 Start=fc800000 length=4M [ 276.117551] saa7231_pci_init (0): BAR2 Start=fc400000 length=4M [ 276.118754] SAA7231GE [14c7:3595], irq: 16, [ 276.118757] mmio(0): 0xf8800000 mmio(2): 0xf9e00000 [ 276.118771] SAA7231 64Bit, MSI Disabled, MSI-X=1 msgs [ 276.118778] saa7231_get_version (0): SAA7231 PCI Express V1A found [ 276.118780] saa7231_cgu_init (0): Initializing CGU [ 276.118782] saa7231_cgu_init (0): Using 54MHz RootClock [ 276.118803] saa7231_cgu_init (0): PLL Status CDEC160: 00 REF550: 00 ADPLL: 00 DSP: 00 [ 276.118805] saa7231_set_clk (0): clk_output=0 clk_frequency=2 [ 276.118807] saa7231_set_clk (0): clk_output=1 clk_frequency=2 [ 276.118809] saa7231_set_clk (0): clk_output=2 clk_frequency=2 [ 276.118810] saa7231_set_clk (0): clk_output=3 clk_frequency=2 [ 276.118812] saa7231_set_clk (0): clk_output=4 clk_frequency=2 [ 276.118814] saa7231_set_clk (0): clk_output=5 clk_frequency=2 [ 276.118815] saa7231_set_clk (0): clk_output=6 clk_frequency=2 [ 276.118817] saa7231_set_clk (0): clk_output=7 clk_frequency=2 [ 276.118819] saa7231_set_clk (0): clk_output=8 clk_frequency=2 [ 276.118820] saa7231_set_clk (0): clk_output=9 clk_frequency=2 [ 276.118822] saa7231_set_clk (0): clk_output=10 clk_frequency=2 [ 276.118824] saa7231_set_clk (0): clk_output=11 clk_frequency=2 [ 276.118826] saa7231_set_clk (0): clk_output=12 clk_frequency=2 [ 276.118827] saa7231_set_clk (0): clk_output=13 clk_frequency=2 [ 276.118829] saa7231_set_clk (0): clk_output=14 clk_frequency=2 [ 276.118831] saa7231_set_clk (0): clk_output=15 clk_frequency=2 [ 276.118832] saa7231_set_clk (0): clk_output=16 clk_frequency=2 [ 276.118834] saa7231_set_clk (0): clk_output=17 clk_frequency=2 [ 276.118836] saa7231_set_clk (0): clk_output=18 clk_frequency=2 [ 276.170029] saa7231_cgu_init (0): DEBUG: RGU_RESET_ACTIVE0 7c02001f [ 276.271028] saa7231_cgu_init (0): DEBUG: RGU_RESET_ACTIVE0 ffffffff [ 276.271033] saa7231_cgu_init (0): DEBUG: RGU_RESET_ACTIVE1 2e1f [ 276.271035] saa7231_set_clk (0): clk_output=17 clk_frequency=0 [ 276.277053] saa7231_i2c_init (0): Initializing SAA7231 I2C Core [ 276.277057] saa7231_i2c_init (0): Initializing adapter (0) SAA7231 I2C:0 [ 276.277344] saa7231_i2c_hwinit (0): Adapter (109000) SAA7231 I2C:0 RESET [ 276.277347] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 I2C:0 @ 100k [ 276.277355] saa7231_i2c_init (0): Initializing adapter (1) SAA7231 12C:1 [ 276.277625] saa7231_i2c_hwinit (0): Adapter (10a000) SAA7231 12C:1 RESET [ 276.277627] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 12C:1 @ 100k [ 276.277635] saa7231_i2c_init (0): Initializing adapter (2) SAA7231 I2C:2 [ 276.277703] saa7231_i2c_hwinit (0): Adapter (10b000) SAA7231 I2C:2 RESET [ 276.277705] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 I2C:2 @ 100k [ 276.277713] saa7231_i2c_init (0): Initializing adapter (3) SAA7231 I2C:3 [ 276.277973] saa7231_i2c_hwinit (0): Adapter (10c000) SAA7231 I2C:3 RESET [ 276.277976] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 I2C:3 @ 100k [ 276.277983] saa7231_i2c_init (0): SAA7231 I2C Core succesfully initialized [ 276.277985] saa7231_alsa_init (0): Initializing Audio .. [ 276.283197] saa7231_pci_probe (0): SAA7231 device:0 initialized [ 285.973561] saa7231_capture_open (0): () [ 285.974297] saa7231_hw_params (0): DEBUG: () [ 285.974299] saa7231_hw_params (0): bufsiz=131072 periods=8 bytes=16384 pages=32 [ 285.974302] saa7231_stream_init (0): DEBUG: Initializing Stream with MODE=0x01 [ 285.974305] saa7231_xs2dtl_init (0): XS2DTL engine Initializing ..... [ 285.974307] saa7231_xs2dtl_init (0): Allocated 8 XS2DTL Buffer @0xf42dc200 [ 285.974309] saa7231_xs2dtl_init (0): Allocating DMA Buffers ... [ 285.974311] saa7231_xs2dtl_init (0): Allocating DMA buffer:0 @0xf42dc200.. [ 285.974322] saa7231_allocate_ptable (0): Virtual 0xf38dc000 to Phys 0x338dc000 mapped page [ 285.974338] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974361] 6c763000 6c762000 6f8bd000 6f810000 [ 285.974367] saa7231_xs2dtl_init (0): Allocating DMA buffer:1 @0xf42dc228.. [ 285.974375] saa7231_allocate_ptable (0): Virtual 0xf38dd000 to Phys 0x338dd000 mapped page [ 285.974381] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974401] 6fa10000 6c6b0000 6c6b5000 6c6b4000 [ 285.974406] saa7231_xs2dtl_init (0): Allocating DMA buffer:2 @0xf42dc250.. [ 285.974414] saa7231_allocate_ptable (0): Virtual 0xf3832000 to Phys 0x33832000 mapped page [ 285.974421] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974441] 6c6b8000 6c6b3000 6c6b2000 6c581000 [ 285.974445] saa7231_xs2dtl_init (0): Allocating DMA buffer:3 @0xf42dc278.. [ 285.974453] saa7231_allocate_ptable (0): Virtual 0xf3927000 to Phys 0x33927000 mapped page [ 285.974459] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974479] 6c783000 6c782000 6c699000 6c698000 [ 285.974484] saa7231_xs2dtl_init (0): Allocating DMA buffer:4 @0xf42dc2a0.. [ 285.974491] saa7231_allocate_ptable (0): Virtual 0xf38a9000 to Phys 0x338a9000 mapped page [ 285.974498] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974517] 6c6bc000 6c879000 6fbf5000 6c777000 [ 285.974522] saa7231_xs2dtl_init (0): Allocating DMA buffer:5 @0xf42dc2c8.. [ 285.974529] saa7231_allocate_ptable (0): Virtual 0xf538e000 to Phys 0x3538e000 mapped page [ 285.974535] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974555] 6c77c000 6c593000 6fbf6000 6c58d000 [ 285.974560] saa7231_xs2dtl_init (0): Allocating DMA buffer:6 @0xf42dc2f0.. [ 285.974568] saa7231_allocate_ptable (0): Virtual 0xf3974000 to Phys 0x33974000 mapped page [ 285.974573] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974593] 6fbe2000 6fbe0000 6c6a2000 6c6b7000 [ 285.974599] saa7231_xs2dtl_init (0): Allocating DMA buffer:7 @0xf42dc318.. [ 285.974606] saa7231_allocate_ptable (0): Virtual 0xf38a5000 to Phys 0x338a5000 mapped page [ 285.974612] saa7231_dmabuf_sgalloc (0): Virtual contiguous 16384 byte region with 4 4k pages [ 285.974632] 6c692000 6c60a000 6c75b000 6f825000 [ 285.974637] saa7231_xs2dtl_init (0): Initializing PTA ... [ 285.974639] saa7231_init_ptables (0): DEBUG: Initializing PORT:6 DMA_CH:7 with 8 Buffers [ 285.974641] saa7231_xs2dtl_init (0): Setting up PORT Gates ... [ 285.974644] saa7231_stream_init (0): INFO: Initialized MODE:0x01 for PORT:6 [ 285.974646] saa7231_add_irqevent (0): Adding AS2D_AVIS IRQ Event:43 ... [ 285.974648] saa7231_setup_vector (0): Adding Vector:43 [ 285.974652] saa7231_setup_vector (0): Enabling Vector:43 [ 285.974656] saa7231_add_irqevent (0): Succesfully added AS2D_AVIS as Event handler:43 [ 285.974658] saa7231_hw_params (0): Mapping 8 buffers with 4 pages each [ 285.974659] saa7231_hw_params (0): Page Table array size=32 [ 285.974662] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:0 to PTA Offset:0 [ 285.974664] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:0 to PTA Offset:1 [ 285.974666] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:0 to PTA Offset:2 [ 285.974668] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:0 to PTA Offset:3 [ 285.974670] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:1 to PTA Offset:4 [ 285.974673] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:1 to PTA Offset:5 [ 285.974675] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:1 to PTA Offset:6 [ 285.974677] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:1 to PTA Offset:7 [ 285.974679] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:2 to PTA Offset:8 [ 285.974681] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:2 to PTA Offset:9 [ 285.974683] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:2 to PTA Offset:10 [ 285.974685] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:2 to PTA Offset:11 [ 285.974687] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:3 to PTA Offset:12 [ 285.974689] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:3 to PTA Offset:13 [ 285.974691] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:3 to PTA Offset:14 [ 285.974693] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:3 to PTA Offset:15 [ 285.974695] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:4 to PTA Offset:16 [ 285.974697] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:4 to PTA Offset:17 [ 285.974699] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:4 to PTA Offset:18 [ 285.974701] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:4 to PTA Offset:19 [ 285.974704] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:5 to PTA Offset:20 [ 285.974706] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:5 to PTA Offset:21 [ 285.974708] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:5 to PTA Offset:22 [ 285.974710] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:5 to PTA Offset:23 [ 285.974712] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:6 to PTA Offset:24 [ 285.974714] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:6 to PTA Offset:25 [ 285.974716] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:6 to PTA Offset:26 [ 285.974718] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:6 to PTA Offset:27 [ 285.974720] saa7231_hw_params (0): Mapping Page:0 from XS2D_BUFFER:7 to PTA Offset:28 [ 285.974722] saa7231_hw_params (0): Mapping Page:1 from XS2D_BUFFER:7 to PTA Offset:29 [ 285.974724] saa7231_hw_params (0): Mapping Page:2 from XS2D_BUFFER:7 to PTA Offset:30 [ 285.974726] saa7231_hw_params (0): Mapping Page:3 from XS2D_BUFFER:7 to PTA Offset:31 [ 285.974749] saa7231_capture_prepare (0): () [ 285.974751] saa7231_capture_prepare (0): Trying to Acquire stream with 4096 lines per stream buffer [ 285.974753] saa7231_xs2dtl_acquire (0): Activating clock .. mode=0x01, port_id=0x06 [ 285.974756] saa7231_activate_clocks (0): DEBUG: Activating Clock for Mode=0x01, port=0x06 [ 285.974758] tmGetClockInstance (0): DEBUG: Mode=0x01, dmaport=0x06 [ 285.974760] tmGetClockInstance (0): ret=0 [ 285.974766] saa7231_activate_clocks (0): INFO: activate use case index 0 [ 285.974768] saa7231_init_ptables (0): DEBUG: Initializing PORT:6 DMA_CH:7 with 8 Buffers [ 285.974871] saa7231_capture_trigger (0): Trying to START stream, cmd=1 [ 285.985285] [ 285.985286] ================================= [ 285.985289] [ INFO: inconsistent lock state ] [ 285.985291] 2.6.34.7 #2 [ 285.985293] --------------------------------- [ 285.985295] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. [ 285.985297] arecord/6052 [HC0[0]:SC0[0]:HE1:SE1] takes: [ 285.985299] (&(&substream->self_group.lock)->rlock){?.....}, at: [<c13271b5>] snd_pcm_stream_lock_irq+0x20/0x23 [ 285.985309] {IN-HARDIRQ-W} state was registered at: [ 285.985311] [<c105a27c>] __lock_acquire+0x23e/0xb47 [ 285.985318] [<c105ac11>] lock_acquire+0x8c/0xab [ 285.985322] [<c144a8bb>] _raw_spin_lock+0x20/0x2f [ 285.985326] [<c132811e>] snd_pcm_period_elapsed+0x39/0xb4 [ 285.985329] [<f843040f>] azx_interrupt+0x8e/0x106 [snd_hda_intel] [ 285.985336] [<c1079a16>] handle_IRQ_event+0x4b/0xf1 [ 285.985340] [<c107b469>] handle_fasteoi_irq+0x86/0xbd [ 285.985344] irq event stamp: 4550 [ 285.985346] hardirqs last enabled at (4549): [<c100287b>] sysenter_exit+0xf/0x16 [ 285.985350] hardirqs last disabled at (4550): [<c144ac7b>] _raw_read_lock_irq+0x11/0x35 [ 285.985353] softirqs last enabled at (3756): [<c1039b96>] __do_softirq+0x15a/0x169 [ 285.985357] softirqs last disabled at (3731): [<c10042fc>] do_softirq+0x63/0xaf [ 285.985360] [ 285.985361] other info that might help us debug this: [ 285.985363] 2 locks held by arecord/6052: [ 285.985364] #0: (snd_pcm_link_rwlock){.?....}, at: [<c13271aa>] snd_pcm_stream_lock_irq+0x15/0x23 [ 285.985369] #1: (&(&substream->self_group.lock)->rlock){?.....}, at: [<c13271b5>] snd_pcm_stream_lock_irq+0x20/0x23 [ 285.985374] [ 285.985375] stack backtrace: [ 285.985378] Pid: 6052, comm: arecord Not tainted 2.6.34.7 #2 [ 285.985379] Call Trace: [ 285.985383] [<c1448b56>] ? printk+0x14/0x16 [ 285.985385] [<c105938f>] valid_state+0x12a/0x13d [ 285.985388] [<c1059493>] mark_lock+0xf1/0x1d9 [ 285.985391] [<c1059b3c>] ? check_usage_backwards+0x0/0x68 [ 285.985394] [<c10595be>] mark_held_locks+0x43/0x5b [ 285.985396] [<c144ad98>] ? _raw_spin_unlock_irq+0x27/0x2b [ 285.985399] [<c10597d7>] trace_hardirqs_on_caller+0xe7/0x121 [ 285.985402] [<c105981c>] trace_hardirqs_on+0xb/0xd [ 285.985405] [<c144ad98>] _raw_spin_unlock_irq+0x27/0x2b [ 285.985409] [<c102d6ac>] finish_task_switch+0x5c/0x86 [ 285.985412] [<c102d650>] ? finish_task_switch+0x0/0x86 [ 285.985415] [<c144925d>] schedule+0x53d/0x5b4 [ 285.985417] [<c14495ec>] schedule_timeout+0x7e/0x9b [ 285.985422] [<c103f3ea>] ? process_timeout+0x0/0xf [ 285.985425] [<c1449623>] schedule_timeout_uninterruptible+0x1a/0x1c [ 285.985428] [<c103f8e9>] msleep+0x15/0x1b [ 285.985439] [<f83b5974>] saa7231_xs2dtl_run+0x93/0x123 [saa7231_core] [ 285.985447] [<f83b9746>] saa7231_capture_trigger+0x59/0xed [saa7231_core] [ 285.985450] [<c13226e3>] snd_pcm_do_start+0x23/0x26 [ 285.985453] [<c132263a>] snd_pcm_action_single+0x2a/0x50 [ 285.985455] [<c1323ce8>] snd_pcm_action+0x6f/0x7b [ 285.985458] [<c1323d8a>] snd_pcm_start+0x19/0x1b [ 285.985461] [<c13283a0>] snd_pcm_lib_read1+0x61/0x1ff [ 285.985464] [<c13285be>] snd_pcm_lib_read+0x33/0x54 [ 285.985467] [<c13273e5>] ? snd_pcm_lib_read_transfer+0x0/0x70 [ 285.985469] [<c1325ec1>] snd_pcm_capture_ioctl1+0x8e/0x2ed [ 285.985472] [<c1326148>] snd_pcm_capture_ioctl+0x28/0x35 [ 285.985477] [<c10c7ec5>] vfs_ioctl+0x2c/0x96 [ 285.985480] [<c1326120>] ? snd_pcm_capture_ioctl+0x0/0x35 [ 285.985483] [<c10c843f>] do_vfs_ioctl+0x46c/0x4aa [ 285.985486] [<c10bd0f3>] ? fsnotify_modify+0x54/0x5f [ 285.985489] [<c10bd1fe>] ? do_sync_write+0x0/0xca [ 285.985491] [<c10be3e3>] ? fget_light+0xe/0xaf [ 285.985494] [<c10c84b0>] sys_ioctl+0x33/0x4d [ 285.985497] [<c100284c>] sysenter_do_call+0x12/0x32 [ 296.977014] saa7231_xs2dtl_run (0): ERROR, Preload PTA failed [ 296.977019] saa7231_capture_trigger (0): ERROR: starting stream, err=-22 [ 296.977022] saa7231_capture_trigger (0): Trying to STOP stream, cmd=0 [ 296.977182] saa7231_hw_free (0): DEBUG: Removing IRQ event .. [ 296.977184] saa7231_remove_irqevent (0): Removing IRQ Event:43 ...... [ 296.977187] saa7231_remove_irqevent (0): IRQ Event 43 <AS2D_AVIS> removed [ 296.977191] saa7231_hw_free (0): DEBUG: Unmap Virtual memory region .. [ 296.977204] saa7231_hw_free (0): DEBUG: Stream exiting .. [ 296.977207] saa7231_stream_exit (0): INFO: Freeing MODE:0x01 for PORT=0x06 [ 296.977209] saa7231_xs2dtl_exit (0): Free XS2DTL engine .. [ 296.977211] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977216] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977218] saa7231_dmabuf_sgfree (0): SG free [ 296.977224] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977226] saa7231_free_ptable (0): SG Page table free [ 296.977229] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977233] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977234] saa7231_dmabuf_sgfree (0): SG free [ 296.977240] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977242] saa7231_free_ptable (0): SG Page table free [ 296.977245] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977249] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977250] saa7231_dmabuf_sgfree (0): SG free [ 296.977256] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977258] saa7231_free_ptable (0): SG Page table free [ 296.977261] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977265] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977266] saa7231_dmabuf_sgfree (0): SG free [ 296.977272] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977274] saa7231_free_ptable (0): SG Page table free [ 296.977277] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977281] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977282] saa7231_dmabuf_sgfree (0): SG free [ 296.977288] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977290] saa7231_free_ptable (0): SG Page table free [ 296.977293] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977297] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977298] saa7231_dmabuf_sgfree (0): SG free [ 296.977304] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977306] saa7231_free_ptable (0): SG Page table free [ 296.977309] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977313] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977314] saa7231_dmabuf_sgfree (0): SG free [ 296.977320] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977322] saa7231_free_ptable (0): SG Page table free [ 296.977325] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped [ 296.977329] saa7231_dmabuf_free (0): INFO: Scatterlist free [ 296.977331] saa7231_dmabuf_sgfree (0): SG free [ 296.977337] saa7231_dmabuf_free (0): INFO: Page table free [ 296.977338] saa7231_free_ptable (0): SG Page table free [ 296.977342] saa7231_hw_free (0): DEBUG: Freeing ptable ... [ 296.977344] saa7231_capture_close (0): DEBUG: Closing stream
Regards, Manu