[patch] cli()/sti() cleanup, 2.5.27-A2

From: Ingo Molnar (mingo@elte.hu)
Date: Mon Jul 22 2002 - 08:01:48 EST


On Mon, 22 Jul 2002, Russell King wrote:

> On Mon, Jul 22, 2002 at 02:31:16AM +0200, Ingo Molnar wrote:
> > +drivers that want to disable local interrupts (interrupts on the
> > +current CPU), can use the following four macros:
> > +
> > + __cli(), __sti(), __save_flags(flags), __restore_flags(flags)
>
> Last mail before zzz (hopefully) - what about
> local_irq_{enable,disable,save,restore} ?
>
> With the exception of local_irq_save() which is actually
> local_irq_save_disable(), I find these to be more "descriptive" of their
> function.

i actually had something much more drastic in mind! :-) Now that the
global IRQ lock is no more, there's no 'local' and 'global' distinction
anymore between various irq disabling mechanizms.

So what i did in my tree was to introduce the following 5 core means of
manipulating the local interrupt flags:

        irq_off()
        irq_on()
        irq_save(flags)
        irq_save_off(flags)
        irq_restore(flags)

the equivalencies are:

        local_irq_save(flags) == irq_save_off(flags)
        local_irq_restore(flags) == irq_restore(flags)
        local_irq_disable() == irq_off()
        local_irq_enable() == irq_on()
        __cli() == irq_off()
        __sti() == irq_on()
        __save_flags(flags) == irq_save(flags)
        __restore_flags(flags) == irq_restore(flags)
        __save_and_cli(flags) == irq_save_off(flags)

the advantages this rename has:

- consistency - no dual naming for the same thing, we had 9 names for 5
  entities.

- __cli, __sti are based on similarly named x86 instruction names which
  are often named differently on other architectures. 'irq_off()' and
  'irq_on()' on the other hand is a generic description. Also, cli and sti
  are more cryptic than need to be.

- the names are actually shorter, more compact, making the source easier
  to read and understand.

- there's no conceptual confusion between local_irq_disable() and
  irq_disable(), or local_irq_enable() and irq_enable(), which are a
  completely separate set of APIs.

- there's no local_ prefix either - we know that interrupts can only be
  disabled locally.

- the confusion wrt. local_irq_save() is fixed too. local_irq_save() used
  to disable interrupt, although intuition tells that it saves flags only.

- the 5 new names do not create any namespace collision either.

some of these advantages are pretty 'small' in scope - but they all add
up. So in my opinion this is something we should do.

to ease the decision further, here's a patch against Linus' latest BK tree
that does all of this, in the whole kernel tree, for every architecture
and driver:

  http://redhat.com/~mingo/remove-irqlock-patches/cli-sti-cleanup-2.5.27-A2

(the patch also cleans up every architecture's include/asm/system.h's irq
macros.)

the patch shaves off a total of 4 KB from the kernel source code size. It
compiles, boots & works just fine on x86 UP and SMP.

        Ingo

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Jul 23 2002 - 22:00:38 EST