From: Scott Wood <scottwood@freescale.com>
To: Alexander Graf <agraf@suse.de>
Cc: <kvm-ppc@vger.kernel.org>,
"kvm@vger.kernel.org mailing list" <kvm@vger.kernel.org>,
Marcelo Tosatti <mtosatti@redhat.com>,
Gleb Natapov <gleb@redhat.com>
Subject: Re: [PATCH 15/17] KVM: PPC: Support irq routing and irqfd for in-kernel MPIC
Date: Thu, 18 Apr 2013 19:50:19 -0500 [thread overview]
Message-ID: <1366332619.9938.16@snotra> (raw)
In-Reply-To: <67A4FF0D-3BCF-42DB-9143-C87F1EF9CD0D@suse.de> (from agraf@suse.de on Thu Apr 18 19:15:46 2013)
On 04/18/2013 07:15:46 PM, Alexander Graf wrote:
>
> On 18.04.2013, at 23:39, Scott Wood wrote:
>
> > On 04/18/2013 09:11:55 AM, Alexander Graf wrote:
> >> +static inline int irqchip_in_kernel(struct kvm *kvm)
> >> +{
> >> + int ret = 0;
> >> +
> >> +#ifdef CONFIG_KVM_MPIC
> >> + ret = ret || (kvm->arch.mpic != NULL);
> >> +#endif
> >> + smp_rmb();
> >> + return ret;
> >> +}
> >
> > Couldn't we just set a non-irqchip-specific bool? Though
> eventually this
> > shouldn't be needed at all -- instead the check would be "does the
> > requested irqchip fd exist and refer to something that exposes an
> irqchip
> > interface"?
>
> How would we get the irqchip id?
I was thinking it would come from whatever operation you're trying to
do, though I see that MSI routing doesn't specify an irqchip. :-P
In that case I guess it would check for whether any MSI handler has
been registered.
> > The rmb needs documentation. I don't see a corresponding wmb before
> > writing to kvm->arch.mpic.
>
> I actually just copied it from the x86 code, wondering what the rmb()
> is supposed to do here. Do we need this at all?
Well, we don't want to start using the irqchip before it's been fully
initialized -- but if we want to use barriers to accomplish that rather
than a lock, there needs to be a wmb on the writing side.
> > How would one create a route for IPIs, timers, etc (we have had
> customers
> > wanting to assign those to KVM guests)? What about error
> interrupts on
> > MPIC 4.2? How are you defining the "pin" field for MPIC? Shouldn't
>
> "pin" is basically what a "source line" is on the MPIC. That's what
> the equivalent of an IOAPIC interrupt line would be for the MPIC
> world.
>
> IPIs, timer interrupts and error interrupts are special vectors. We
> could probably model them as different KVM_IRQ_ROUTING_ types if we
> ever need to support mapping those to irqfd.
Seems a bit heavyweight to add several new MPIC-specific routing types
-- maybe just one new KVM_IRQ_ROUTING type that lets multiple words be
used to describe the interrupt?
> For simple injection we can always do an ioctl on the MPIC device.
I got complaints for that originally. :-)
> However, I'd be inclined to say that it's rather unlikely you'd want
> to have a vfio device's interrupt line hooked up to the IPI interrupt
> of your guest...
Well, as I said, we've done it before for a customer (not with VFIO of
course, but our old internal-tree device assignment mechanism), so not
*that* unlikely. The host was a two-core chip running Linux on only
one of the cores, and a custom OS on the other core. They wanted to
communicate between the custom OS and a KVM guest. Since host Linux
was only running on one core, it didn't need the IPIs for itself (and
beginning with e500mc, the host uses msgsnd instead, so there also the
host will not need the IPIs for itself).
> > there be an API documentation update for this?
>
> Hrm. I can certainly add one.
OK. We've had enough confusion from poor documentation in the device
tree binding, due to Freescale documentation calling openpic irq 16
"internal interrupt 0", that we should be clear exactly what it means.
> > We also need to document whach irqchip means, if we want to reserve
> the
> > ability to use it in the future -- otherwise userspace could fill
> in any
> > old junk there and we'd need to retain compatibility. It should
> probably
> > be the fd of the MPIC.
>
> It can't, because irqchip is an index into an array. We'd have to add
> another layer of indirection if we want to find the fd to a certain
> irqchip. That's why I simply restricted it to always be "0" now.
OK, didn't know how firmly that was baked into the code. Maybe a
device attribute for returning the irqchip number -- which would
accommodate devices that expose multiple irqchips.
> > It looks like you only support having one type of irqchip built into
> > the kernel at a time? That may be OK for now given the existing
> > restrictions for building KVM, but it should be noted as a
> > limitation/TODO.
>
> I don't think it's really hard to add support for another irqchip
> type. But we certainly have harder issues to tackle first before we
> end up in a situation where in-kernel MPIC and in-kernel XICS would
> make sense in the same kernel.
Not necessarily hard or hugely important, just looked odd putting
global non-MPIC-specific functions in the MPIC file. I tend to prefer
getting the component separation (at least resaonably) correct from the
start, so the person who would end up needing to refactor to fit their
device in doesn't need to mess with MPIC code to do so. Such a person
might be unfamiliar with MPIC, have no easy way to test, etc. Similar
to the current situation with the IRQ routing code, at least before you
took it over. :-)
-Scott
next prev parent reply other threads:[~2013-04-19 0:50 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-18 14:11 [PATCH 00/17] KVM: PPC: In-kernel MPIC support with irqfd Alexander Graf
2013-04-18 14:11 ` [PATCH 01/17] KVM: Add KVM_IRQCHIP_NUM_PINS in addition to KVM_IOAPIC_NUM_PINS Alexander Graf
2013-04-18 14:11 ` [PATCH 02/17] KVM: Introduce CONFIG_HAVE_KVM_IRQ_ROUTING Alexander Graf
2013-04-18 14:11 ` [PATCH 03/17] KVM: Drop __KVM_HAVE_IOAPIC condition on irq routing Alexander Graf
2013-04-18 14:11 ` [PATCH 04/17] KVM: Remove kvm_get_intr_delivery_bitmask Alexander Graf
2013-04-18 14:11 ` [PATCH 05/17] KVM: Move irq routing to generic code Alexander Graf
2013-04-18 14:11 ` [PATCH 06/17] KVM: Extract generic irqchip logic into irqchip.c Alexander Graf
2013-04-18 14:11 ` [PATCH 07/17] KVM: Move irq routing setup to irqchip.c Alexander Graf
2013-04-18 14:11 ` [PATCH 08/17] KVM: Move irqfd resample cap handling to generic code Alexander Graf
2013-04-18 14:11 ` [PATCH 09/17] kvm: add device control API Alexander Graf
2013-04-18 14:11 ` [PATCH 10/17] kvm/ppc/mpic: import hw/openpic.c from QEMU Alexander Graf
2013-04-18 14:11 ` [PATCH 11/17] kvm/ppc/mpic: remove some obviously unneeded code Alexander Graf
2013-04-18 14:11 ` [PATCH 12/17] kvm/ppc/mpic: adapt to kernel style and environment Alexander Graf
2013-04-18 14:11 ` [PATCH 13/17] kvm/ppc/mpic: in-kernel MPIC emulation Alexander Graf
2013-04-18 14:11 ` [PATCH 14/17] kvm/ppc/mpic: add KVM_CAP_IRQ_MPIC Alexander Graf
2013-04-18 14:11 ` [PATCH 15/17] KVM: PPC: Support irq routing and irqfd for in-kernel MPIC Alexander Graf
2013-04-18 21:39 ` Scott Wood
2013-04-19 0:15 ` Alexander Graf
2013-04-19 0:50 ` Scott Wood [this message]
2013-04-19 1:09 ` Alexander Graf
2013-04-19 1:37 ` Scott Wood
2013-04-22 23:31 ` Scott Wood
2013-04-18 14:11 ` [PATCH 16/17] KVM: PPC: MPIC: Add support for KVM_IRQ_LINE Alexander Graf
2013-04-18 14:11 ` [PATCH 17/17] KVM: PPC: MPIC: Restrict to e500 platforms Alexander Graf
2013-04-18 14:29 ` Scott Wood
2013-04-18 14:52 ` Alexander Graf
-- strict thread matches above, loose matches on Subject: below --
2013-04-19 14:06 [PATCH 00/17] KVM: PPC: In-kernel MPIC support with irqfd v3 Alexander Graf
2013-04-19 14:06 ` [PATCH 15/17] KVM: PPC: Support irq routing and irqfd for in-kernel MPIC Alexander Graf
2013-04-19 18:02 ` Scott Wood
2013-04-25 9:58 ` Alexander Graf
2013-04-25 16:53 ` Scott Wood
2013-04-23 6:38 ` Paul Mackerras
2013-04-25 10:02 ` Alexander Graf
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=1366332619.9938.16@snotra \
--to=scottwood@freescale.com \
--cc=agraf@suse.de \
--cc=gleb@redhat.com \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
/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