Messages in this thread | | | Date | Mon, 13 Sep 1999 07:51:36 -0600 | From | yodaiken@chelm ... | Subject | Re: Lockups - lost interrupt |
| |
On Mon, Sep 13, 1999 at 04:39:32PM +0200, mingo@chiara.csoma.elte.hu wrote: > > On Mon, 13 Sep 1999 yodaiken@chelm.cs.nmt.edu wrote: > > > > what labels do you mean? > > > > If you look at the build irq macros, you will see that common irq > > has a label on the line of code that does "call do_IRQ" [...] > > oh, ok, i see it. > > > #define __cli() irq_control.do_cli() > > i'm not sure wether this will ever be accepted into the main kernel - > __cli()/__sti()/etc. right now is heavily used and inlined (mostly via
The price is paid only if you select RTL in config. my idea is that system.h does
#define do_not_use_this_cli_directly() __asm__("cli") #ifndef RTL_CONFIG #define __cli() do_not_use_this_clu_directly() ... #else struct irq_control ...
Even with the indirect jump Lmbench can't detect any performance loss -- remember that cli and sti are not cheap instructions anyways. RTL should actually show a slight gain, because in operation __cli and __sti will be call x set memory value return
which is cheaper on a modern processor than __asm__("cli");
> spinlocks) and it's a single instruction. Maybe building a table of 'cli, > sti, popfl, pushfl' addresses into a special section can do the trick > without interfering with the 'normal' kernel? A single-instruction 'int 3' > could be patched into those places, or something like that.
The "int" would cost too much in the rtl case. On the other hand, I had thought of of a section. Not sure what the advantage would be. With the structure, the compiler generates
movel N+irq_desc,%eax call *%eax
> > -- mingo
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |