From: Jack Steiner <steiner@sgi.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Dean Nelson <dcn@sgi.com>, Ingo Molnar <mingo@elte.hu>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Alan Mayer <ajm@sgi.com>,
jeremy@goop.org, rusty@rustcorp.com.au,
suresh.b.siddha@intel.com, torvalds@linux-foundation.org,
linux-kernel@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>,
Yinghai Lu <Yinghai.lu@amd.com>
Subject: Re: [RFC 0/4] dynamically allocate arch specific system vectors
Date: Wed, 17 Sep 2008 15:21:02 -0500 [thread overview]
Message-ID: <20080917202102.GA166524@sgi.com> (raw)
In-Reply-To: <48D1575E.1050306@zytor.com>
On Wed, Sep 17, 2008 at 12:15:42PM -0700, H. Peter Anvin wrote:
> Dean Nelson wrote:
> >
> > sgi-gru driver
> >
> >The GRU is not an actual external device that is connected to an IOAPIC.
> >The gru is a hardware mechanism that is embedded in the node controller
> >(UV hub) that directly connects to the cpu socket. Any cpu (with
> >permission)
> >can do direct loads and stores to the gru. Some of these stores will result
> >in an interrupt being sent back to the cpu that did the store.
> >
> >The interrupt vector used for this interrupt is not in an IOAPIC. Instead
> >it must be loaded into the GRU at boot or driver initialization time.
> >
>
> Could you clarify there: is this one vector number per CPU, or are you
> issuing a specific vector number and just varying the CPU number?
It is one vector for each cpu.
It is more efficient for software if the vector # is the same for all cpus
but the software/hardware can support a unique vector for each cpu. This
assumes, of course, that the driver can determine the irq->vector mapping for
each cpu.
<probably-more-detail-than-you-want>
Physically, the system contains a large number of blades. Each blade has
several processor sockets plus a UV hub (node controller). There are 2 GRUs
located in each UV hub.
Each GRU supports multiple users simultaneously using the GRU.
Each user is assigned a context number (0 .. N-1). If an exception occurs,
the GRU uses the context number as an index into an array of [vector-apicid] pairs.
The [vector-apicid] identifies the cpu & vector for the interrupt.
Although supported by hardware, we do not intend to send interrupts
off-blade.
The array of [vector-apicid] pairs is located in each GRU and must be
initialized at boot time or when the driver is loaded. There is a
separate array for each GRU.
When the driver receives the interrupt, the vector number (or IRQ number) is
used by the driver to determine the GRU that sent the interrupt.
The simpliest scheme would be to assign 2 vectors - one for each GRU in the UV hub.
Vector #0 would be loaded into each "vector" of the [vector-apicid] array for GRU
#0; vector #1 would be loaded into the [vector-apicid] array for GRU #1.
The [vector-apicid] arrays on all nodes would be identical as far as vectors are
concerned. (Apicids would be different and would target blade-local cpus).
Since interrupts are not sent offnode, the driver can use the vector (irq)
to uniquely identify the source of the interrupt.
However, we have a lot of flexibilty here. Any scheme that provides the right
information to the driver is ok. Note that servicing of these interrupts
is likely to be time critical. We need this path to be as efficient as possible.
--- jack
next prev parent reply other threads:[~2008-09-17 20:21 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-08 15:37 [Fwd: [PATCH] x86_64: (NEW) Dynamically allocate arch specific system vectors] Alan Mayer
2008-08-11 16:59 ` [PATCH] x86_64: (NEW) Dynamically allocate arch specific system vectors Ingo Molnar
2008-08-11 17:14 ` Alan Mayer
2008-08-11 19:39 ` Eric W. Biederman
2008-08-11 19:51 ` Ingo Molnar
2008-08-11 19:55 ` Jeremy Fitzhardinge
2008-08-11 20:10 ` Eric W. Biederman
2008-08-11 20:02 ` Alan Mayer
2008-09-11 15:23 ` [RFC 0/4] dynamically " Dean Nelson
2008-09-11 15:25 ` [RFC 1/4] switch vector_irq[] from irq number to irq_desc pointer Dean Nelson
2008-09-11 15:27 ` [RFC 2/4] introduce dynamically allocated system vectors Dean Nelson
2008-09-14 15:39 ` Ingo Molnar
2008-09-14 15:46 ` Ingo Molnar
2008-09-11 15:28 ` [RFC 3/4] switch static system vector allocation to use vector_irq[] Dean Nelson
2008-09-11 15:29 ` [RFC 4/4] switch non-standard SYSCALL_VECTOR " Dean Nelson
2008-09-14 15:40 ` Ingo Molnar
2008-09-14 15:42 ` Ingo Molnar
2008-09-11 20:04 ` [RFC 0/4] dynamically allocate arch specific system vectors H. Peter Anvin
2008-09-12 11:46 ` Dean Nelson
2008-09-14 15:35 ` Ingo Molnar
2008-09-14 15:48 ` Ingo Molnar
2008-09-15 21:50 ` Dean Nelson
2008-09-16 8:24 ` Ingo Molnar
2008-09-16 20:46 ` Dean Nelson
2008-09-17 17:30 ` Dimitri Sivanich
2008-09-17 18:59 ` Eric W. Biederman
2008-09-18 13:37 ` Dean Nelson
2008-09-18 19:18 ` H. Peter Anvin
2008-09-17 19:15 ` H. Peter Anvin
2008-09-17 20:21 ` Jack Steiner [this message]
2008-09-17 22:15 ` Eric W. Biederman
2008-09-18 1:09 ` H. Peter Anvin
2008-09-18 19:10 ` Jack Steiner
2008-09-19 0:28 ` Eric W. Biederman
2008-09-19 8:48 ` Ingo Molnar
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=20080917202102.GA166524@sgi.com \
--to=steiner@sgi.com \
--cc=Yinghai.lu@amd.com \
--cc=ajm@sgi.com \
--cc=dcn@sgi.com \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rusty@rustcorp.com.au \
--cc=suresh.b.siddha@intel.com \
--cc=tglx@linutronix.de \
--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