at91: input overruns question

Aras Vaichas arasv at magellan-technology.com
Mon Nov 1 19:33:33 EDT 2010


On 31 October 2010 22:19, Remy Bohmer <linux at bohmer.net> wrote:
> 2010/10/28 Aras Vaichas <arasv at magellan-technology.com>:
>> On 26 October 2010 17:19, Aras Vaichas <arasv at magellan-technology.com> wrote:
<SNIP>
>>
>> Configuration settings CONFIG_NO_HZ and CONFIG_HIGH_RES_TIMERS cause
>> the overrun(s) problems to get worse.
>
> Indeed. high-res timers and no-hz have a longer interrupt handling
> compared to the old fashioned ticking kernel.

<SNIP>

Thank you for that, I suspected as much, but I don't have trace
capability on my target to verify it.

Luckily the DBGU port is only used infrequently, most of the time the
connection to our product is via ethernet/usb.

I did manage to get ithe DBGU to work by changing the IRQ request flag
to NODELAY.

#ifndef CONFIG_RTC_DRV_AT91RM9200
    if ( machine_is_at91rm9200() && port->irq == 1 )
        retval = request_irq(port->irq, atmel_interrupt, IRQF_NODELAY,
            tty ? tty->name : "atmel_serial", port);
    else
#endif
        retval = request_irq(port->irq, atmel_interrupt, IRQF_SHARED,
            tty ? tty->name : "atmel_serial", port);

I understand the warnings and limitations of NODELAY for an RT kernel,
but this is a quick fix which allows me to continue to use the DBGU
for my development and I can remove it once I get to production
status.

There is a comment in the atmel_serial.c file which says that
"Transmit is IRQF_NODELAY safe" but I don't know if the Receive is as
well. Maybe the Receive isn't deemed safe because it is shared with
the RTC? If it is not shared, then maybe it is safe? I intend
investigate this myself I have any further problems.

Thanks again!

Aras



More information about the linux-arm-kernel mailing list