2006-03-29 12:23:34

by Peter Korsgaard

[permalink] [raw]
Subject: serial/8250: Platform override of is_real_interrupt

Hi,

I'm using the serial/8250 driver on a ML300 based PPC board which uses
interrupt vector 0 for the UART.

is_real_interrupt() unfortunately interpretes IRQ0 as meaning no
interrupt, so performance is kinda crap.

How to fix? 8250.c is setup so that asm/serial.h is included after the
definition of is_real_interrupt and the idea is that you can redefine
it in your platform header if needed. Now, this doesn't work on PPC as
the platform headers are included in asm/io.h AND asm/serial.h so they
won't be reparsed the second time.

I see 3 options:

1) Put an #ifndef is_real_interrupt around the is_real_interrupt
definition so the platform header can define it's own version
independent of inclusion order.

2) A lot of platforms (but not all) define NO_IRQ to something
sensible (-1). Define is_real_interrupt in terms of NO_IRQ instead
of testing against 0. For the remaining platforms we could locally
define NO_IRQ to 0 to keep the old behavior.

3) Put the redefine directly in asm/serial.h surrounded by an #ifdef
CONFIG_XILINX_ML300 (ugly)

Which solution is preferable?

--
Bye, Peter Korsgaard


2006-03-29 14:05:30

by Alan

[permalink] [raw]
Subject: Re: serial/8250: Platform override of is_real_interrupt

On Mer, 2006-03-29 at 14:23 +0200, Peter Korsgaard wrote:
> is_real_interrupt() unfortunately interpretes IRQ0 as meaning no
> interrupt, so performance is kinda crap.

This was discussed some time ago and the answer is "none of the below"

http://lkml.org/lkml/2005/11/21/211

Your hardware platform should be mapping interrupts so that the cookie
dev->irq is not 0 for a valid IRQ.

Alan

2006-03-30 06:42:08

by Peter Korsgaard

[permalink] [raw]
Subject: Re: serial/8250: Platform override of is_real_interrupt

On 3/29/06, Alan Cox <[email protected]> wrote:

> Your hardware platform should be mapping interrupts so that the cookie
> dev->irq is not 0 for a valid IRQ.

Thanks. I'll do that instead then.

--
Bye, Peter Korsgaard