From: ebiederm@xmission.com (Eric W. Biederman)
To: <linux-arch@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Andi Kleen <ak@suse.de>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Ingo Molnar <mingo@elte.hu>, Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: [RFC] killing the NR_IRQS arrays.
Date: Fri, 16 Feb 2007 05:10:46 -0700 [thread overview]
Message-ID: <m1ire2e20p.fsf@ebiederm.dsl.xmission.com> (raw)
Looking at irq handling in the kernel from a generic perspective I
see two problems.
- There are a huge number of possible interrupt sources but in
practice very few of them are used. So we need a large
irq_desc[NR_IRQS] array that mostly goes unused. If we try for
tighter pacing we get into all kinds of weird issues with irq
remaping and confusing human beings and sometimes the code.
Even with a large enough NR_IRQS we still get weird issues of
allocating and freeing elements in the array which is just needless
complexity.
- When dealing with interrupts we have no universal value that means
we don't have an irq. Inside the arch code we have to do
something different then in drivers because 0 is valid interrupt and
even at the level of drivers there are cases where the type is made
int irq and negative numbers are used.
So I propose we remove all assumptions from the code that we actually
have an array of irqs. That will allow for irq_desc to be dynamically
allocated instead of statically allocated saving memory and reducing
kernel complexity.
To do this I believe will require a s/unsigned int irq/struct irq_desc *irq/
throughout the entire kernel. Getting the arch specific code and the
generic kernel infrastructure fixed and ready for that change looks
like a pain but pretty doable.
Getting the drivers changed actually looks to be pretty straight
forward it will just be a very large mechanical change. We change the
type where of variables where appropriate and every once in a while
introduce an irq_nr(irq) to get the actual irq number for the places
that care (ISA or print statements).
Beyond that I did a quick test compile with just the interrupt.h and
pci.h changed and big chunks of the drivers compiled without errors.
Other drivers had more issues that mostly looked like they had an
internal irq number variable that needed updating.
I think we can make this change fairly smoothly if before the code is
merged into Linus's tree we have a patchset prepared with a all of the
core infrastructure changes and a best effort at all of the driver
changes. Then early some merge window we merge the patchset, and
fixup the drivers that were missed.
Andrew, Linus if you think this is a horrible idea I clearly cannot
pull this off, but if not I will start working up patches for 2.6.22
or more likely 2.6.23.
I expect the most it makes sense to aim for 2.6.22 are the genirq
changes so the internal arch code is passing struct irq_desc
everywhere internally.
Hopefully with this I can get the irq code in a shape where you don't
have to have been staring at the code for years to make sense of.
Eric
next reply other threads:[~2007-02-16 12:11 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-16 12:10 Eric W. Biederman [this message]
2007-02-16 12:16 ` [RFC] killing the NR_IRQS arrays Andi Kleen
2007-02-16 15:35 ` Eric W. Biederman
2007-02-16 12:41 ` Ingo Molnar
2007-02-16 15:23 ` Eric W. Biederman
2007-02-16 15:49 ` Eric W. Biederman
2007-02-16 22:33 ` Benjamin Herrenschmidt
2007-02-18 21:24 ` Arjan van de Ven
2007-02-19 0:25 ` Benjamin Herrenschmidt
2007-02-27 20:29 ` Eric W. Biederman
2007-02-28 0:41 ` Arnd Bergmann
2007-02-28 7:20 ` Eric W. Biederman
2007-02-28 8:09 ` Benjamin Herrenschmidt
2007-02-28 13:28 ` Eric W. Biederman
2007-02-28 12:24 ` Arnd Bergmann
2007-02-28 13:02 ` Segher Boessenkool
2007-02-28 13:53 ` Eric W. Biederman
2007-03-01 10:47 ` Benjamin Herrenschmidt
2007-02-16 18:07 ` Jeremy Fitzhardinge
2007-02-16 19:01 ` Eric W. Biederman
2007-02-16 19:06 ` Jeremy Fitzhardinge
2007-02-16 19:45 ` Arnd Bergmann
2007-02-16 19:52 ` Russell King
2007-02-16 20:43 ` Arnd Bergmann
2007-02-16 20:59 ` Russell King
2007-02-16 22:37 ` Benjamin Herrenschmidt
2007-02-17 1:37 ` Arnd Bergmann
2007-02-17 4:00 ` Benjamin Herrenschmidt
2007-02-17 9:06 ` Eric W. Biederman
2007-02-17 21:15 ` Benjamin Herrenschmidt
2007-02-18 6:30 ` Eric W. Biederman
2007-02-18 20:01 ` Benjamin Herrenschmidt
2007-02-17 9:34 ` Eric W. Biederman
2007-02-17 21:20 ` Benjamin Herrenschmidt
2007-02-18 3:58 ` Eric W. Biederman
2007-02-16 22:29 ` Benjamin Herrenschmidt
2007-02-17 8:51 ` Eric W. Biederman
2007-02-17 21:04 ` Benjamin Herrenschmidt
2007-02-18 4:58 ` Eric W. Biederman
2007-02-18 19:58 ` Benjamin Herrenschmidt
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=m1ire2e20p.fsf@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=benh@kernel.crashing.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=torvalds@linux-foundation.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