public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@zytor.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
	Jesse Brandeburg <jesse.brandeburg@gmail.com>,
	Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	NetDEV list <netdev@vger.kernel.org>,
	Jesse Brandeburg <jesse.brandeburg@intel.com>,
	Suresh Siddha <suresh.b.siddha@intel.com>
Subject: Re: Subject: [PATCH 1/2] x86: get back 15 vectors
Date: Mon, 04 Jan 2010 15:03:48 -0800	[thread overview]
Message-ID: <4B4273D4.2080709@zytor.com> (raw)
In-Reply-To: <4B426550.6000209@kernel.org>

[-- Attachment #1: Type: text/plain, Size: 1383 bytes --]

On 01/04/2010 02:01 PM, Yinghai Lu wrote:
>>
>>>  /*
>>> + * First APIC vector available to drivers: (vectors 0x30-0xee) we
>>> + * start at 0x31 to spread out vectors evenly between priority
>>> + * levels. (0x80 is the syscall vector)
>>> + */
>>> +#define FIRST_DEVICE_VECTOR		(IRQ15_VECTOR + 2)
>>> +
>>
>> We really should fix that so we can do +1 here instead of +2; that
>> presumably means fixing the logic so we do something smarter than just
>> jump over 0x80.
> 
> we already use used_vectors to skip 0x80. so we could change that to +1?
> 

Yes, but the problem is that we *skip* 0x80, which leads to suboptimal
allocation on systems with only a handful of vectors.

The easy solution to accomplishing what we want without wasting vector
0x30 is obviously to start allocation at 0x31, but not by artificially
limiting the vector space; see the attached patch.

For what it's worth, this code(__assign_irq_vector() in
arch/x86/kernel/apic/io_apic.c) has me somewhat confused about the use
of the constant 8:

		vector += 8;

The only justification that I can immediately think of is to try to
assign exactly two sources to each priority level (since early APICs
started losing interrupts with more than two sources per priority level.)

This is ancient code -- predates not just the git but the bk history --
and as such I would assume that that is the motivation.

	-hpa

[-- Attachment #2: 0001-x86-irq-Don-t-waste-a-vector-to-improve-vector-sprea.patch --]
[-- Type: text/x-patch, Size: 2372 bytes --]

>From 6e586d7d1da44360b16d2c0ac2bea623c1fcfa6e Mon Sep 17 00:00:00 2001
From: H. Peter Anvin <hpa@zytor.com>
Date: Mon, 4 Jan 2010 15:00:57 -0800
Subject: [PATCH] x86, irq: Don't waste a vector to improve vector spread

We want to use a vector-assignment sequence that avoids stumbling onto
0x80 earlier in the sequence, in order to improve the spread of
vectors across priority levels on machines with a small number of
interrupt sources.  Right now, this is done by simply making the first
vector (0x31 or 0x41) completely unusable.  This is unnecessary; all
we need is to start assignment at a +1 offset, we don't actually need
to prohibit the usage of this vector once we have wrapped around.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/include/asm/irq_vectors.h |    9 +++++----
 arch/x86/kernel/apic/io_apic.c     |    3 ++-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_vectors.h
index 4611f08..718dcdd 100644
--- a/arch/x86/include/asm/irq_vectors.h
+++ b/arch/x86/include/asm/irq_vectors.h
@@ -121,11 +121,12 @@
 #define MCE_SELF_VECTOR			0xeb
 
 /*
- * First APIC vector available to drivers: (vectors 0x30-0xee) we
- * start at 0x31(0x41) to spread out vectors evenly between priority
- * levels. (0x80 is the syscall vector)
+ * First APIC vector available to drivers: (vectors 0x30-0xee).  We
+ * start allocating at 0x31(0x41) to spread out vectors evenly between
+ * priority levels. (0x80 is the syscall vector)
  */
-#define FIRST_DEVICE_VECTOR		(IRQ15_VECTOR + 2)
+#define FIRST_DEVICE_VECTOR		(IRQ15_VECTOR + 1)
+#define VECTOR_OFFSET_START		1
 
 #define NR_VECTORS			 256
 
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index de00c46..e289148 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1162,7 +1162,8 @@ __assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask)
 	 * Also, we've got to be careful not to trash gate
 	 * 0x80, because int 0x80 is hm, kind of importantish. ;)
 	 */
-	static int current_vector = FIRST_DEVICE_VECTOR, current_offset = 0;
+	static int current_vector = FIRST_DEVICE_VECTOR + VECTOR_OFFSET_START;
+	static int current_offset = VECTOR_OFFSET_START % 8;
 	unsigned int old_vector;
 	int cpu, err;
 	cpumask_var_t tmp_mask;
-- 
1.6.5.2


  reply	other threads:[~2010-01-04 23:04 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-25  8:42 [PATCH] x86: increase NR_IRQS and nr_irqs Yinghai Lu
2009-12-28  9:47 ` Ingo Molnar
2009-12-29  5:08   ` [PATCH -v2] " Yinghai Lu
2009-12-30 12:21     ` [tip:x86/apic] x86: Increase " tip-bot for Yinghai Lu
2010-01-04  3:06     ` [PATCH -v2] x86: increase " Jesse Brandeburg
2010-01-04  3:20       ` Yinghai Lu
2010-01-04  6:56         ` Subject: [PATCH 1/2] x86: get back 15 vectors Yinghai Lu
2010-01-04 16:18           ` Eric W. Biederman
2010-01-04 18:40             ` Yinghai Lu
2010-01-04 19:04               ` Eric W. Biederman
2010-01-04 19:14                 ` H. Peter Anvin
2010-01-04 19:01             ` H. Peter Anvin
2010-01-04 19:09               ` Eric W. Biederman
2010-01-04 19:35                 ` Yinghai Lu
2010-01-04 19:45                   ` Suresh Siddha
2010-01-04 19:50                     ` H. Peter Anvin
2010-01-05  0:05                       ` Suresh Siddha
2010-01-05  0:16                         ` Yinghai Lu
2010-01-05  5:30                           ` [tip:x86/apic] x86, apic: Reclaim IDT vectors 0x20-0x2f tip-bot for H. Peter Anvin
2010-01-04 19:48                   ` Subject: [PATCH 1/2] x86: get back 15 vectors H. Peter Anvin
2010-01-04 20:06                     ` Yinghai Lu
2010-01-04 20:14                       ` Eric W. Biederman
2010-01-04 20:33                         ` Yinghai Lu
2010-01-04 21:10                           ` H. Peter Anvin
2010-01-04 21:20                             ` Yinghai Lu
2010-01-04 21:33                               ` H. Peter Anvin
2010-01-04 22:01                                 ` Yinghai Lu
2010-01-04 23:03                                   ` H. Peter Anvin [this message]
2010-01-04 23:32                                     ` Yinghai Lu
2010-01-04 23:38                                       ` H. Peter Anvin
2010-01-04 23:42                                         ` Yinghai Lu
2010-01-04 23:49                                         ` Yinghai Lu
2010-01-04 23:59                                           ` H. Peter Anvin
2010-01-05  5:30                                   ` [tip:x86/apic] x86, apic: Don't waste a vector to improve vector spread tip-bot for H. Peter Anvin
2010-01-04 20:08                   ` Subject: [PATCH 1/2] x86: get back 15 vectors Eric W. Biederman
2010-01-04  6:58         ` [PATCH 2/2] x86: get more exact nr_irqs Yinghai Lu
2010-01-04 16:55           ` Eric W. Biederman
2010-01-04 19:03             ` Yinghai Lu
2010-01-04 19:16               ` Eric W. Biederman
2010-01-04 19:30                 ` H. Peter Anvin
2010-01-04 19:47                   ` Yinghai Lu
2010-01-04 20:05                   ` Eric W. Biederman
2010-01-04 21:50                     ` H. Peter Anvin
2010-01-04  6:59         ` [PATCH 1/2] x86: get back 15 vectors Yinghai Lu

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=4B4273D4.2080709@zytor.com \
    --to=hpa@zytor.com \
    --cc=akpm@linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=jesse.brandeburg@gmail.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=netdev@vger.kernel.org \
    --cc=suresh.b.siddha@intel.com \
    --cc=tglx@linutronix.de \
    --cc=yinghai@kernel.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