AnsweredAssumed Answered

dma_alloc_coherent irqs off too long

Question asked by Don Weingarden on Dec 6, 2013
Latest reply on Dec 17, 2013 by Yuri Muhin


We are using the IMX6Dual and during startup we are missing characters on one of the Uarts.

We tried using DMA for the Uart and adjusting the receive threshold but no luck.

We noticed that it happens during the insmod of the galcore.ko driver.

Finally ran ftrace for irqsoff and discovered the irqs are off for 1165us and as much as 1700us.

The Uart is running at 230kbaud which translates to 43us/char with a 32 byte fifo.  Overrun occurs at 1419us.

Why is this taking so long?

 

# tracer: irqsoff

#

  insmod-291     0d..1    0us!: __raw_spin_lock_irqsave

  insmod-291     0d..1 1163us+: _raw_spin_unlock_irqrestore

  insmod-291     0d..1 1165us : trace_hardirqs_on <-_raw_spin_unlock_irqrestore

  insmod-291     0d..1 1166us : <stack trace>

=> __dma_alloc

=> dma_alloc_coherent

=> gckOS_AllocateNonPagedMemory

=> gckOS_AllocateContiguous

=> _Construct

=> gckMMU_Construct

=> gckKERNEL_Construct

=> gckGALDEVICE_Construct

Outcomes