mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@osdl.org>
To: David Howells <dhowells@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>
Cc: torvalds@osdl.org, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org, Dmitry Torokhov <dtor@mail.ru>,
	Greg KH <greg@kroah.com>, David Brownell <david-b@pacbell.net>,
	Alan Stern <stern@rowland.harvard.edu>
Subject: Re: [PATCH 3/3] IRQ: Maintain regs pointer globally rather than passing to IRQ handlers
Date: Mon, 2 Oct 2006 13:21:16 -0700	[thread overview]
Message-ID: <20061002132116.2663d7a3.akpm@osdl.org> (raw)
In-Reply-To: <20061002162053.17763.26032.stgit@warthog.cambridge.redhat.com>

On Mon, 02 Oct 2006 17:21:09 +0100
David Howells <dhowells@redhat.com> wrote:

> Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
> of passing regs around manually through all ~1800 interrupt handlers in the
> Linux kernel.
>
> ...
>
>  1086 files changed, 2634 insertions(+), 2968 deletions(-)
>

heh.

It's presumably too large a lump for vger to swallow so I put a copy at
http://userweb.kernel.org/~akpm/irq-maintain-regs-pointer-globally-rather-than-passing-to-irq-handlers.patch

I disagree with the implementation of get_irq_regs() and set_irq_regs():

+DECLARE_PER_CPU(struct pt_regs *, __irq_regs);
+
+static inline struct pt_regs *get_irq_regs(void)
+{
+	struct pt_regs *regs = get_cpu_var(__irq_regs);
+	put_cpu_var(__irq_regs);
+	return regs;
+}
+
+#define irq_regs (get_irq_regs())
+
+static inline struct pt_regs *set_irq_regs(struct pt_regs *new_regs)
+{
+	struct pt_regs *old_regs, **pp_regs = &get_cpu_var(__irq_regs);
+
+	old_regs = *pp_regs;
+	*pp_regs = new_regs;
+	put_cpu_var(__irq_regs);
+	return old_regs;
+}

These should just use __get_cpu_var().  If someone calls these from
preemptible code, they're already buggy, because they now have a pointer to
possibly-another-cpus registers.  Using get_cpu_var() simply covers that
bug up.

And could we please remove the irq_regs macro?  It's only used in three
places so simply open-coding that is simpler.


Patches #1 and #2 don't come vaguely close to applying on top of all the
IRQ changes we still have queued for 2.6.19 so that will need redoing
please.  I'd expect to have that lot sent Linuswards around 48 hours from
now.

I think the change is good.  But I don't want to maintain this whopper
out-of-tree for two months!  If we want to do this, we should just smash it
in and grit our teeth.  But I am a bit concerned about the non-x86
architectures.  I assume they'll continue to compile-and-work?

What does Ingo think?

> Some notes on the interrupt handling in the drivers:
> 
>  (*) input_dev() is now gone entirely.  The regs pointer is no longer stored in
>      the input_dev struct.
> 
>  (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking.  It does
>      something different depending on whether it's been supplied with a regs
>      pointer or not.
> 
>  (*) Various IRQ handler function pointers have been moved to type
>      irq_handler_t.
> 

Cc's added.

  parent reply	other threads:[~2006-10-02 20:25 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-02 16:20 [PATCH 1/3] IRQ: Typedef the IRQ flow handler function type David Howells
2006-10-02 16:20 ` [PATCH 2/3] IRQ: Typedef the IRQ " David Howells
     [not found] ` <20061002162053.17763.26032.stgit@warthog.cambridge.redhat.com>
2006-10-02 20:21   ` Andrew Morton [this message]
2006-10-02 20:18     ` [PATCH 3/3] IRQ: Maintain regs pointer globally rather than passing to IRQ handlers Ingo Molnar
2006-10-02 20:54       ` Linus Torvalds
2006-10-02 21:01         ` Andrew Morton
2006-10-02 21:12           ` Linus Torvalds
2006-10-02 21:19             ` Andi Kleen
2006-10-02 21:46               ` Linus Torvalds
2006-10-02 21:47                 ` Ingo Molnar
2006-10-02 21:59                 ` Andi Kleen
2006-10-02 22:33                   ` Linus Torvalds
2006-10-03 10:43           ` Ingo Molnar
     [not found]           ` <fa.v9OUIBlFjbmpdm2jHjUOj/6fm5Y@ifi.uio.no>
2006-10-07 18:44             ` Bill Waddington
2006-10-02 21:12         ` David Miller
2006-10-02 21:18           ` Thomas Gleixner
2006-10-02 22:59         ` Karsten Wiese
2006-10-03  0:36         ` Dave Airlie
2006-10-05  8:01         ` David Woodhouse
2006-10-03 10:21       ` David Howells
2006-10-02 20:43     ` Dmitry Torokhov
2006-10-02 20:56       ` Andrew Morton
2006-10-02 23:52       ` Greg KH
2006-10-02 20:46     ` David Brownell
2006-10-02 20:58       ` Andrew Morton
2006-10-02 21:34       ` Alan Stern
2006-10-02 23:00         ` David Brownell
2006-10-03 18:03           ` Alan Stern
2006-10-06  3:45             ` David Brownell
2006-10-06 17:42               ` Alan Stern
2006-10-03 10:01     ` David Howells
2006-10-03 10:30     ` David Howells
2006-10-05 14:22   ` David Howells
2006-10-05 19:46     ` Andrew Morton
2006-10-05 20:19       ` Thomas Gleixner
2006-10-05 20:20       ` Dmitry Torokhov
2006-10-05 20:34       ` Greg KH
2006-10-05 23:35     ` Linus Torvalds
2006-10-06  1:31       ` [PATCH] powerpc: irq change build breaks Olof Johansson
2006-10-06  4:22         ` Benjamin Herrenschmidt
2006-10-06 16:42       ` [PATCH 3/3] IRQ: Maintain regs pointer globally rather than passing to IRQ handlers Russell King
2006-10-06 18:01         ` Linus Torvalds
2006-10-07  2:54           ` Matthew Wilcox
2006-10-07 14:44             ` Matthew Wilcox
2006-10-06 18:53       ` [PATCH] fix mesh compile errors after irq changes Olaf Hering
2006-10-06 19:09         ` Geert Uytterhoeven
2006-10-06 20:34       ` [PATCH] powerpc: fixup " Olaf Hering
2006-10-06 20:52         ` [PATCH] powerpc: spu " Olaf Hering
2006-10-06 21:06           ` [PATCH] ppc: PReP " Olaf Hering
2006-10-07  0:19         ` [PATCH] powerpc: " Paul Mackerras
2006-10-07 12:25           ` Paul Mackerras
2006-10-06  0:52     ` [PATCH 3/3] IRQ: Maintain regs pointer globally rather than passing to IRQ handlers Jeff Garzik
2006-10-06 11:25       ` Alan Cox
2006-10-06 11:15         ` Jeff Garzik
2006-10-06 11:11           ` Ingo Molnar
2006-10-06 11:27             ` Jeff Garzik
2006-10-06 11:25               ` Ingo Molnar
2006-10-06 14:07                 ` Dmitry Torokhov
2006-10-06 14:16                   ` Jeff Garzik
2006-10-06 15:18               ` [PATCH, RAW] IRQ: Maintain irq number " Jeff Garzik
2006-10-06 15:20                 ` Jeff Garzik
2006-10-06 15:47                 ` Linus Torvalds
2006-10-06 16:21                   ` Dmitry Torokhov
2006-10-06 16:40                     ` Linus Torvalds
2006-10-06 16:38                   ` Jeff Garzik
2006-10-06  8:03     ` [PATCH 3/3] IRQ: Maintain regs pointer " Gregor Jasny
     [not found] <fa.FU9k10MvHKEiGBkmyRa0N7lIvX4@ifi.uio.no>
     [not found] ` <fa.YmeJPP3GwSahgI09Gcaha4kqm84@ifi.uio.no>
     [not found]   ` <fa.qbSmIOXP3NtOgNMHs5oazelaSJs@ifi.uio.no>
     [not found]     ` <fa.AB8rZ1kwd3vQ1HCbYfV1438E4A0@ifi.uio.no>

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061002132116.2663d7a3.akpm@osdl.org \
    --to=akpm@osdl.org \
    --cc=david-b@pacbell.net \
    --cc=dhowells@redhat.com \
    --cc=dtor@mail.ru \
    --cc=greg@kroah.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=stern@rowland.harvard.edu \
    --cc=tglx@linutronix.de \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome