From: Gleb Natapov <gleb@redhat.com>
To: Paul Mackerras <paulus@samba.org>
Cc: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
Alexander Graf <agraf@suse.de>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>
Subject: Re: [PATCH 1/2] KVM: Implement default IRQ routing
Date: Mon, 23 Sep 2013 18:34:01 +0000 [thread overview]
Message-ID: <20130923183401.GE1445@redhat.com> (raw)
In-Reply-To: <20130923112414.GA32420@iris.ozlabs.ibm.com>
On Mon, Sep 23, 2013 at 09:24:14PM +1000, Paul Mackerras wrote:
> On Sun, Sep 22, 2013 at 03:32:53PM +0300, Gleb Natapov wrote:
> > On Tue, Sep 17, 2013 at 07:18:40PM +1000, Paul Mackerras wrote:
> > > This implements a simple way to express the case of IRQ routing where
> > > there is one in-kernel PIC and the system interrupts (GSIs) are routed
> > > 1-1 to the corresponding pins of the PIC. This is expressed by having
> > > kvm->irq_routing = NULL with a skeleton irq routing entry in the new
> > > kvm->default_irq_route field.
> > >
> > > This provides a convenient way to provide backwards compatibility when
> > > adding IRQ routing capability to an existing in-kernel PIC, such as the
> > > XICS emulation on powerpc.
> > >
> > Why not create simple 1-1 irq routing table? It will take a little bit
> > more memory, but there will be no need for kvm->irq_routing = NULL
> > special handling.
>
> The short answer is that userspace wants to use interrupt source
> numbers (i.e. pin numbers for the inputs to the emulated XICS) that
> are scattered throughout a large space, since that mirrors what real
> hardware does. More specifically, hardware divides up the interrupt
> source number into two fields, each of typically 12 bits, where the
> more significant field identifies an "interrupt source unit" (ISU) and
> the less significant field identifies an interrupt within the ISU.
> Each PCI host bridge would have an ISU, for example, and there can be
> ISUs associated with other things that attach directly to the
> interconnect fabric (coprocessors, cluster interconnects, etc.).
>
> Today, QEMU creates a virtual ISU numbered 1 for the emulated PCI host
> bridge, which means for example that virtio devices get interrupt pin
> numbers starting at 4096.
>
> So, I could have increased KVM_IRQCHIP_NUM_PINS to some multiple of
> 4096, say 16384, which would allow for 3 ISUs. But that would bloat
> out struct kvm_irq_routing_table to over 64kB, and if I wanted 1-1
> mappings between GSI and pins for all of them, the routing table would
> be over 960kB.
>
Yes, this is not an option. GSI is just a cookie for anything but x86
non MSI interrupts. So the way to use irq routing table to deliver XICS irqs
is to register GSI->XICS irq mapping and by triggering "GSI", which is
just an arbitrary number, userspace tells kernel that XICS irq, that was
registered for that GSI, should be injected.
> There is a compatibility concern too -- if I want existing userspace
> to run, I would have to create 1-1 default mappings for at least the
> first (say) 4200 pins or so, which would use up about 294kB. That
> really doesn't seem worth it compared to just using the null routing
> table pointer to indicate an unlimited 1-1 mapping.
>
Let me check that I understand you correctly. Exiting userspace already
uses XICS irq directly and now you want to switch this interface to use
irq routing. New userspace will register GSI->XICS irq mapping like
described above, this is what [2/2] does. Is this correct?
--
Gleb.
WARNING: multiple messages have this Message-ID (diff)
From: Gleb Natapov <gleb@redhat.com>
To: Paul Mackerras <paulus@samba.org>
Cc: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
Alexander Graf <agraf@suse.de>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>
Subject: Re: [PATCH 1/2] KVM: Implement default IRQ routing
Date: Mon, 23 Sep 2013 21:34:01 +0300 [thread overview]
Message-ID: <20130923183401.GE1445@redhat.com> (raw)
In-Reply-To: <20130923112414.GA32420@iris.ozlabs.ibm.com>
On Mon, Sep 23, 2013 at 09:24:14PM +1000, Paul Mackerras wrote:
> On Sun, Sep 22, 2013 at 03:32:53PM +0300, Gleb Natapov wrote:
> > On Tue, Sep 17, 2013 at 07:18:40PM +1000, Paul Mackerras wrote:
> > > This implements a simple way to express the case of IRQ routing where
> > > there is one in-kernel PIC and the system interrupts (GSIs) are routed
> > > 1-1 to the corresponding pins of the PIC. This is expressed by having
> > > kvm->irq_routing == NULL with a skeleton irq routing entry in the new
> > > kvm->default_irq_route field.
> > >
> > > This provides a convenient way to provide backwards compatibility when
> > > adding IRQ routing capability to an existing in-kernel PIC, such as the
> > > XICS emulation on powerpc.
> > >
> > Why not create simple 1-1 irq routing table? It will take a little bit
> > more memory, but there will be no need for kvm->irq_routing == NULL
> > special handling.
>
> The short answer is that userspace wants to use interrupt source
> numbers (i.e. pin numbers for the inputs to the emulated XICS) that
> are scattered throughout a large space, since that mirrors what real
> hardware does. More specifically, hardware divides up the interrupt
> source number into two fields, each of typically 12 bits, where the
> more significant field identifies an "interrupt source unit" (ISU) and
> the less significant field identifies an interrupt within the ISU.
> Each PCI host bridge would have an ISU, for example, and there can be
> ISUs associated with other things that attach directly to the
> interconnect fabric (coprocessors, cluster interconnects, etc.).
>
> Today, QEMU creates a virtual ISU numbered 1 for the emulated PCI host
> bridge, which means for example that virtio devices get interrupt pin
> numbers starting at 4096.
>
> So, I could have increased KVM_IRQCHIP_NUM_PINS to some multiple of
> 4096, say 16384, which would allow for 3 ISUs. But that would bloat
> out struct kvm_irq_routing_table to over 64kB, and if I wanted 1-1
> mappings between GSI and pins for all of them, the routing table would
> be over 960kB.
>
Yes, this is not an option. GSI is just a cookie for anything but x86
non MSI interrupts. So the way to use irq routing table to deliver XICS irqs
is to register GSI->XICS irq mapping and by triggering "GSI", which is
just an arbitrary number, userspace tells kernel that XICS irq, that was
registered for that GSI, should be injected.
> There is a compatibility concern too -- if I want existing userspace
> to run, I would have to create 1-1 default mappings for at least the
> first (say) 4200 pins or so, which would use up about 294kB. That
> really doesn't seem worth it compared to just using the null routing
> table pointer to indicate an unlimited 1-1 mapping.
>
Let me check that I understand you correctly. Exiting userspace already
uses XICS irq directly and now you want to switch this interface to use
irq routing. New userspace will register GSI->XICS irq mapping like
described above, this is what [2/2] does. Is this correct?
--
Gleb.
next prev parent reply other threads:[~2013-09-23 18:34 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-17 9:18 [PATCH 1/2] KVM: Implement default IRQ routing Paul Mackerras
2013-09-17 9:18 ` Paul Mackerras
2013-09-17 9:20 ` [PATCH 2/2] KVM: PPC: Book3S: Add IRQFD support for in-kernel XICS Paul Mackerras
2013-09-17 9:20 ` Paul Mackerras
2013-09-22 12:32 ` [PATCH 1/2] KVM: Implement default IRQ routing Gleb Natapov
2013-09-22 12:32 ` Gleb Natapov
2013-09-23 11:24 ` Paul Mackerras
2013-09-23 11:24 ` Paul Mackerras
2013-09-23 18:34 ` Gleb Natapov [this message]
2013-09-23 18:34 ` Gleb Natapov
2013-09-26 0:00 ` Paul Mackerras
2013-09-26 0:00 ` Paul Mackerras
2013-09-29 10:50 ` Gleb Natapov
2013-09-29 10:50 ` Gleb Natapov
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=20130923183401.GE1445@redhat.com \
--to=gleb@redhat.com \
--cc=agraf@suse.de \
--cc=benh@kernel.crashing.org \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=paulus@samba.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.