public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Will Deacon <will.deacon@arm.com>
To: Cornelia Huck <cornelia.huck@de.ibm.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>,
	Gleb Natapov <gleb@kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Marc Zyngier <Marc.Zyngier@arm.com>,
	Christoffer Dall <christoffer.dall@linaro.org>
Subject: Re: [PATCH 1/2] KVM: device: add simple registration mechanism for kvm_device_ops
Date: Mon, 30 Jun 2014 10:36:19 +0100	[thread overview]
Message-ID: <20140630093619.GF24879@arm.com> (raw)
In-Reply-To: <20140630112114.2f185502.cornelia.huck@de.ibm.com>

Hello,

On Mon, Jun 30, 2014 at 10:21:14AM +0100, Cornelia Huck wrote:
> On Thu, 26 Jun 2014 18:30:16 +0100
> Will Deacon <will.deacon@arm.com> wrote:
> 
> > kvm_ioctl_create_device currently has knowledge of all the device types
> > and their associated ops. This is fairly inflexible when adding support
> > for new in-kernel device emulations, so move what we currently have out
> > into a table, which can support dynamic registration of ops by new
> > drivers for virtual hardware.
> > 
> > I didn't try to port all current drivers over, as it's not always clear
> > which initialisation hook the ops should be registered from.
> 
> I like the general idea of registering the ops dynamically, some
> comments below.

Great, thanks.

> > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> > index e11d8f170a62..3b368166286f 100644
> > --- a/include/uapi/linux/kvm.h
> > +++ b/include/uapi/linux/kvm.h
> > @@ -949,6 +949,7 @@ struct kvm_device_attr {
> >  #define   KVM_DEV_VFIO_GROUP_DEL			2
> >  #define KVM_DEV_TYPE_ARM_VGIC_V2	5
> >  #define KVM_DEV_TYPE_FLIC		6
> > +#define KVM_DEV_TYPE_MAX		7
> 
> This means we always need to move this value once we introduce a new
> kvm device type. Can't you keep it in a dynamic list instead of a
> table? We just need to do the lookup during device creation anyway.

Well, we do need the fixed IDs in order for userspace to create these
devices via the ioctl. If it's the fixed size you're worried about, the
easiest thing is to replace the array with an idr. I actually started off
with that, but it felt a bit overkill (since we never need dynamic ID
allocation). I can bring it back if you prefer?

At the end of the day, we can't get around the fact that the IDs need to
added with some caution (e.g. not assigning an ID twice).

> > +int kvm_register_device_ops(struct kvm_device_ops *ops, u32 type)
> > +{
> > +	if (type >= KVM_DEV_TYPE_MAX)
> > +		return -ENOSPC;
> > +
> > +	if (kvm_device_ops_table[type] != NULL)
> > +		return -EEXIST;
> 
> Checking for type collisions would be a bit more expensive with a list,
> but I don't think it matters.

I'd be *really* surprised if this was a fast-path in KVM!

Will

  reply	other threads:[~2014-06-30  9:36 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-26 17:30 [PATCH 1/2] KVM: device: add simple registration mechanism for kvm_device_ops Will Deacon
2014-06-26 17:30 ` [PATCH 2/2] KVM: ARM: vgic: register kvm_device_ops dynamically Will Deacon
2014-06-27 14:17 ` [PATCH 1/2] KVM: device: add simple registration mechanism for kvm_device_ops Paolo Bonzini
2014-06-30 11:11   ` Will Deacon
2014-06-30 11:14   ` Cornelia Huck
2014-06-30 11:20     ` Will Deacon
2014-06-30  9:21 ` Cornelia Huck
2014-06-30  9:36   ` Will Deacon [this message]
2014-06-30 10:25     ` Cornelia Huck
2014-06-30 10:26       ` Will Deacon
2014-06-30 17:22   ` Paolo Bonzini
2014-06-30 17:27     ` Cornelia Huck
2014-06-30 17:31     ` Will Deacon
2014-06-30 17:32       ` Paolo Bonzini

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=20140630093619.GF24879@arm.com \
    --to=will.deacon@arm.com \
    --cc=Marc.Zyngier@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=cornelia.huck@de.ibm.com \
    --cc=gleb@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=pbonzini@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