On Thu, Nov 11, 2010 at 6:04 PM, Manu Abraham <abraham.manu@xxxxxxxxx> wrote: > On Thu, Nov 11, 2010 at 4:00 PM, Jaroslav Kysela <perex@xxxxxxxx> wrote: >> On Thu, 11 Nov 2010, Manu Abraham wrote: >> >>> On Wed, Nov 10, 2010 at 11:35 PM, Jaroslav Kysela <perex@xxxxxxxx> 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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel