On Wed, 30 Jan 2008 00:12:23 +0100Yes, is with DMA disabled
michael <trimarchi@xxxxxxxxxxxxxxxx> wrote:
- Voluntary Kernel Preemption the system (crash)
- Preemptible Kernel (crash)
Ouch. I'm assuming this is with DMA disabled?
I explain it bad:/*
* Drop the lock here since it might end up calling
* uart_start(), which takes the lock.
spin_unlock(&port->lock);
*/
tty_flip_buffer_push(port->info->tty);
/*
spin_lock(&port->lock);
*/
The same code with this comments out runs
Now, _that_ is strange. I can't see anything that needs protection
across that call; in fact, I think we can lock a lot less than what we
currently do.
In the complete preemption yes.Complete Preemption (Real-Time) ok but the serials is just unusable due
to too many overruns (just using lrz)
Is it worse than before? IIRC Remy mentioned something about
IRQF_NODELAY being the reason for moving all this code to softirq
context in the first place; does the interrupt handler run in hardirq
context?
I just change it because I have corruption on receiving buffer. AllThe system is stable and doesn't crash reverting this patch.
I don't test with the thread hardirqs active.
Ok.
Is the kmalloc correct?
maybe:
data = kmalloc(ATMEL_SERIAL_RINGSIZE * sizeof(struct atmel_uart_char), GFP_KERNEL);
I think you're right. Can you change it and see if it helps?
I guess I didn't test it thoroughly enough with DMAI just test it I don't have
disabled...slub_debug ought to catch such things, but not until we
receive enough data to actually overflow the buffer.
Ok
Why should it be? If it should, we must move the call to tasklet_init
into atmel_startup too, and I don't really see the point.