From: Gleb Natapov <gleb@redhat.com>
To: Paul Mackerras <paulus@samba.org>
Cc: Scott Wood <scottwood@freescale.com>,
Alexander Graf <agraf@suse.de>,
kvm-ppc@vger.kernel.org, kvm@vger.kernel.org,
Christoffer Dall <cdall@cs.columbia.edu>
Subject: Re: [RFC PATCH 1/6] kvm: add device control API
Date: Mon, 25 Feb 2013 13:09:52 +0000 [thread overview]
Message-ID: <20130225130951.GG21422@redhat.com> (raw)
In-Reply-To: <20130225011119.GB12404@drongo>
On Mon, Feb 25, 2013 at 12:11:19PM +1100, Paul Mackerras wrote:
> On Mon, Feb 18, 2013 at 02:21:59PM +0200, Gleb Natapov wrote:
> > Copying Christoffer since ARM has in kernel irq chip too.
> >
> > On Wed, Feb 13, 2013 at 11:49:15PM -0600, Scott Wood wrote:
> > > Currently, devices that are emulated inside KVM are configured in a
> > > hardcoded manner based on an assumption that any given architecture
> > > only has one way to do it. If there's any need to access device state,
> > > it is done through inflexible one-purpose-only IOCTLs (e.g.
> > > KVM_GET/SET_LAPIC). Defining new IOCTLs for every little thing is
> > > cumbersome and depletes a limited numberspace.
> > >
> > > This API provides a mechanism to instantiate a device of a certain
> > > type, returning an ID that can be used to set/get attributes of the
> > > device. Attributes may include configuration parameters (e.g.
> > > register base address), device state, operational commands, etc. It
> > > is similar to the ONE_REG API, except that it acts on devices rather
> > > than vcpus.
> > You are not only provide different way to create in kernel irq chip you
> > also use an alternate way to trigger interrupt lines. Before going into
> > interface specifics lets think about whether it is really worth it? x86
> > obviously support old way and will have to for some, very long, time.
> > ARM vGIC code, that is ready to go upstream, uses old way too. So it will
> > be 2 archs against one. Christoffer do you think the proposed way it
> > better for your needs. Are you willing to make vGIC use it?
>
> In fact there have been two distinct interrupt controller emulations
> for PPC posted recently, Scott's and mine, with quite different
> interfaces. In contrast to Scott's device control API, where the
> operations you would do for different interrupt controllers are quite
> different, mine attempted to define a much more abstract interface for
> interrupt controller emulations, with the idea that an interrupt
> controller subsystem connects a set of interrupt sources, each with
> some state, to a set of interrupt delivery mechanisms, one per vcpu,
> also with some state.
>
I agree with Scott that it is futile to try and come up with generic
irqchip configuration interface and I doubt it is needed from QEMU
or other userspace pov. I looked at proposed KVM_IRQCHIP_SET_SOURCES
interface and while it is possible to pass some information about
pic/ioapic using it there will be a lot of information that will not
fit there. For one there is global irqchips related state and proposed
interface only talk about interrupt sources. Another is that using
generic interface will require us to have a code that translate irqchip
representation into this generic one and back for no apparent gain.
Currently pic/ioapic state is very similar to what HW specification
defines and it is not going to change.
Looking at your implementation of KVM_IRQCHIP_SET_SOURCES I wounder how
well it work for migration though. The interface suppose to transfer
irqchips state as is, but I see things like that in your code:
mutex_lock(&ics->lock);
irqp->server = val & KVM_IRQ_SERVER_MASK;
irqp->priority = val >> KVM_IRQ_PRIORITY_SHIFT;
irqp->resend = 0;
irqp->masked_pending = 0;
irqp->asserted = 0;
Why it is safe to initialize those values to default values during
migration? Wouldn't it be simpler and more correct to just transfer
the whole content of irqp from src to dst?
> Thus my interface had:
>
> - a KVM_CREATE_IRQCHIP_ARGS ioctl, with an argument structure that
> indicates the overall architecture of the interrupt subsystem,
>
> - KVM_IRQCHIP_SET_SOURCES and KVM_IRQCHIP_GET_SOURCES ioctls, that
> return or modify the state of some set of interrupt sources
>
> - a KVM_REG_PPC_ICP_STATE identifier in the ONE_REG register
> identifier space, that is used to save and restore the per-vcpu
> interrupt presentation state.
>
> Alternatively, I could modify my code to use the existing
> KVM_CREATE_IRQCHIP, KVM_GET_IRQCHIP, and KVM_SET_IRQCHIP ioctls. If I
> were to do that I would want to rename the 'pad' field in struct
> kvm_irqchip to 'nr' and use it with 'chip_id' to identify a range of
> interrupt sources to be affected. I'd also want to keep the ONE_REG
> identifier for the per-vcpu state.
It is preferable to the interface you propose since I do not think your
interface fits other interrupt controllers well. You can put nr field
into dummy[] payload, or replace pad with "union {pad, nr}".
>
> Or I could change over to using Scott's device control API, though I
> have some objections to doing that.
>
> What is your advice about which interface to use?
>
The ideal situation would be if you and Scott agree on the details about
the interface. If you don't like something about Scott's interface we
can discuss it and shape it to something you agree with or even like.
I already asked Scott to introduce command interface. Scott does not
care about migration, you do, so you can make sure that interface works
for that.
--
Gleb.
next prev parent reply other threads:[~2013-02-25 13:09 UTC|newest]
Thread overview: 130+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-14 5:49 [RFC PATCH 0/6] kvm/ppc/mpic: in-kernel irqchip Scott Wood
2013-02-14 5:49 ` [RFC PATCH 1/6] kvm: add device control API Scott Wood
2013-02-18 12:21 ` Gleb Natapov
2013-02-18 23:01 ` Scott Wood
2013-02-19 0:43 ` Christoffer Dall
2013-02-19 12:24 ` Gleb Natapov
2013-02-19 15:51 ` Christoffer Dall
2013-02-19 21:16 ` Scott Wood
2013-02-20 13:09 ` Gleb Natapov
2013-02-20 21:28 ` Marcelo Tosatti
2013-02-20 22:44 ` Marcelo Tosatti
2013-02-20 23:53 ` Scott Wood
2013-02-21 0:14 ` Marcelo Tosatti
2013-02-21 1:28 ` Scott Wood
2013-02-21 6:39 ` Gleb Natapov
2013-02-21 23:03 ` Marcelo Tosatti
2013-02-22 2:00 ` Scott Wood
2013-02-23 15:04 ` Marcelo Tosatti
2013-02-26 0:27 ` Scott Wood
2013-02-21 2:05 ` Scott Wood
2013-02-21 8:22 ` Gleb Natapov
2013-02-22 2:17 ` Scott Wood
2013-02-24 15:46 ` Gleb Natapov
2013-02-25 15:23 ` Alexander Graf
2013-02-26 2:38 ` Scott Wood
2013-02-20 21:17 ` Marcelo Tosatti
2013-02-20 23:20 ` Scott Wood
2013-02-21 0:01 ` Marcelo Tosatti
2013-02-21 0:33 ` Scott Wood
2013-02-25 1:11 ` Paul Mackerras
2013-02-25 13:09 ` Gleb Natapov [this message]
2013-02-25 15:29 ` Alexander Graf
2013-02-19 0:44 ` Christoffer Dall
2013-02-19 0:53 ` Scott Wood
2013-02-19 5:50 ` Christoffer Dall
2013-02-19 12:45 ` Gleb Natapov
2013-02-19 20:16 ` Scott Wood
2013-02-20 2:16 ` Christoffer Dall
2013-02-24 13:12 ` Marc Zyngier
2013-03-06 0:59 ` Paul Mackerras
2013-03-06 1:20 ` Scott Wood
2013-03-06 2:48 ` Benjamin Herrenschmidt
2013-03-06 3:36 ` Scott Wood
2013-03-06 4:28 ` Benjamin Herrenschmidt
2013-03-06 10:18 ` Gleb Natapov
2013-02-14 5:49 ` [RFC PATCH 2/6] kvm/ppc: add a notifier chain for vcpu creation/destruction Scott Wood
2013-02-14 5:49 ` [RFC PATCH 3/6] kvm/ppc/mpic: import hw/openpic.c from QEMU Scott Wood
2013-02-14 5:49 ` [RFC PATCH 4/6] kvm/ppc/mpic: remove some obviously unneeded code Scott Wood
2013-02-14 5:49 ` [RFC PATCH 5/6] kvm/ppc/mpic: adapt to kernel style and environment Scott Wood
2013-02-14 5:49 ` [RFC PATCH 6/6] kvm/ppc/mpic: in-kernel MPIC emulation Scott Wood
2013-03-21 8:28 ` Alexander Graf
2013-03-21 14:43 ` Scott Wood
2013-03-21 14:52 ` Alexander Graf
2013-02-18 12:04 ` [RFC PATCH 0/6] kvm/ppc/mpic: in-kernel irqchip Gleb Natapov
2013-02-18 23:05 ` Scott Wood
2013-04-01 22:47 ` [RFC PATCH v2 0/6] device control and in-kernel MPIC Scott Wood
2013-04-01 22:47 ` [RFC PATCH v2 1/6] kvm: add device control API Scott Wood
2013-04-02 6:59 ` tiejun.chen
[not found] ` <1364923807.24520.2@snotra>
2013-04-03 1:28 ` tiejun.chen
[not found] ` <1364952853.8690.3@snotra>
2013-04-03 1:42 ` tiejun.chen
2013-04-03 1:02 ` Paul Mackerras
2013-04-03 1:19 ` Scott Wood
2013-04-03 2:17 ` Paul Mackerras
2013-04-03 13:22 ` Alexander Graf
2013-04-03 17:37 ` Scott Wood
2013-04-03 17:39 ` Alexander Graf
2013-04-04 9:58 ` Gleb Natapov
2013-04-03 21:03 ` Scott Wood
2013-04-01 22:47 ` [RFC PATCH v2 2/6] kvm/ppc/mpic: import hw/openpic.c from QEMU Scott Wood
2013-04-01 22:47 ` [RFC PATCH v2 3/6] kvm/ppc/mpic: remove some obviously unneeded code Scott Wood
2013-04-01 22:47 ` [RFC PATCH v2 4/6] kvm/ppc/mpic: adapt to kernel style and environment Scott Wood
2013-04-01 22:47 ` [RFC PATCH v2 5/6] kvm/ppc/mpic: in-kernel MPIC emulation Scott Wood
2013-04-01 22:47 ` [RFC PATCH v2 6/6] kvm/ppc/mpic: add KVM_CAP_IRQ_MPIC Scott Wood
2013-04-03 1:57 ` [RFC PATCH v3 0/6] device control and in-kernel MPIC Scott Wood
2013-04-03 1:57 ` [RFC PATCH v3 1/6] kvm: add device control API Scott Wood
2013-04-03 15:13 ` Alexander Graf
2013-04-04 10:41 ` Gleb Natapov
2013-04-04 23:47 ` Scott Wood
2013-04-08 10:34 ` Gleb Natapov
2013-04-05 1:02 ` Paul Mackerras
2013-04-08 10:37 ` Gleb Natapov
2013-04-08 5:33 ` Paul Mackerras
2013-04-09 0:50 ` Scott Wood
2013-04-03 1:57 ` [RFC PATCH v3 2/6] kvm/ppc/mpic: import hw/openpic.c from QEMU Scott Wood
2013-04-03 1:57 ` [RFC PATCH v3 3/6] kvm/ppc/mpic: remove some obviously unneeded code Scott Wood
2013-04-03 1:57 ` [RFC PATCH v3 4/6] kvm/ppc/mpic: adapt to kernel style and environment Scott Wood
2013-04-03 1:57 ` [RFC PATCH v3 5/6] kvm/ppc/mpic: in-kernel MPIC emulation Scott Wood
2013-04-03 15:55 ` Gleb Natapov
2013-04-03 20:58 ` Scott Wood
2013-04-04 5:59 ` Gleb Natapov
2013-04-04 23:33 ` Scott Wood
2013-04-08 10:39 ` Gleb Natapov
2013-04-03 16:19 ` Alexander Graf
2013-04-03 21:38 ` Scott Wood
2013-04-03 21:58 ` Alexander Graf
2013-04-03 22:07 ` Scott Wood
2013-04-03 22:12 ` Alexander Graf
2013-04-03 22:54 ` Scott Wood
2013-04-04 9:42 ` Alexander Graf
2013-04-03 23:23 ` Scott Wood
2013-04-08 6:30 ` Paul Mackerras
2013-04-09 0:49 ` Scott Wood
2013-04-03 1:57 ` [RFC PATCH v3 6/6] kvm/ppc/mpic: add KVM_CAP_IRQ_MPIC Scott Wood
2013-04-04 12:54 ` Alexander Graf
2013-04-04 18:41 ` Scott Wood
2013-04-04 22:30 ` Alexander Graf
2013-04-04 22:35 ` Scott Wood
2013-04-05 6:09 ` Alexander Graf
2013-04-05 17:11 ` Scott Wood
2013-04-13 0:08 ` [PATCH v4 0/6] device-control and in-kernel MPIC Scott Wood
2013-04-13 0:08 ` [PATCH v4 1/6] kvm: add device control API Scott Wood
2013-04-25 9:43 ` Gleb Natapov
2013-04-25 10:47 ` Alexander Graf
2013-04-25 12:07 ` Gleb Natapov
2013-04-25 13:45 ` Alexander Graf
2013-04-25 13:51 ` Gleb Natapov
2013-04-25 16:51 ` Scott Wood
2013-04-25 18:22 ` Gleb Natapov
2013-04-25 18:59 ` Scott Wood
2013-04-26 9:53 ` Gleb Natapov
2013-04-26 9:55 ` Alexander Graf
2013-04-26 9:57 ` Gleb Natapov
2013-04-13 0:08 ` [PATCH v4 2/6] kvm/ppc/mpic: import hw/openpic.c from QEMU Scott Wood
2013-04-13 0:08 ` [PATCH v4 3/6] kvm/ppc/mpic: remove some obviously unneeded code Scott Wood
2013-04-13 0:08 ` [PATCH v4 4/6] kvm/ppc/mpic: adapt to kernel style and environment Scott Wood
2013-04-13 0:08 ` [PATCH v4 5/6] kvm/ppc/mpic: in-kernel MPIC emulation Scott Wood
2013-04-13 0:08 ` [PATCH v4 6/6] kvm/ppc/mpic: add KVM_CAP_IRQ_MPIC Scott Wood
2013-04-15 5:23 ` Paul Mackerras
2013-04-15 17:52 ` Scott Wood
2013-04-16 3:59 ` Paul Mackerras
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=20130225130951.GG21422@redhat.com \
--to=gleb@redhat.com \
--cc=agraf@suse.de \
--cc=cdall@cs.columbia.edu \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=paulus@samba.org \
--cc=scottwood@freescale.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