From: Avi Kivity <avi@qumranet.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: virtualization@lists.linux-foundation.org
Subject: Re: [RFC 1/4] New virtio bus driver
Date: Sun, 08 Jul 2007 18:48:59 +0300 [thread overview]
Message-ID: <4691076B.5050106@qumranet.com> (raw)
In-Reply-To: <200707081729.58461.arnd@arndb.de>
Arnd Bergmann wrote:
> On Sunday 08 July 2007, Avi Kivity wrote:
>
>> arnd@arndb.de wrote:
>>
>
>
>>> +struct virtio_device_id {
>>> + const char *device_type;
>>> + unsigned long driver_data;
>>> +};
>>>
>>>
>> Carrying a string through a hypervisor interface can be unpleasant. How
>> about a constant instead?
>>
>
> I chose a string because I found it to work rather well on
> open firmware and on the platform bus. It probably has
> to be a fixed length string which will be sent down from
> the hypervisor along with all the device specific data.
>
>
Fixed length strings are okay, though unlovely.
>>> +struct virtio_config {
>>> + const char host[128];
>>> + const char driver[128];
>>> +};
>>>
>>>
>> There needs to be a way for the driver to tell the device that
>> configuration has changed (promiscuous mode, MAC address) and vice versa
>> (media detect).
>>
>> Maybe have a configuration virtqueue for that.
>>
>
> I was hoping that we can live without dynamic configuration data
> in the common case. For a simple point-to-point ethernet device,
> that should work fine,
Well, once you have _one_ dynamic config, you need a mechanism. So
consider a disk change notification for block device.
> and more complicated devices might need their
> own interface, e.g. by embedding a command number in every
> chunk of data that is sent down the one virtqueue, or by having
> a separate virtqueue for all out-of-band data.
>
> Alternatively, we could have a mechanism separate from the
> virtqueue concept, like a synchronous get_config_data/set_config_data
> callback into the host driver.
>
You also need to allow the host to notify the guest about configuration
changes.
>
>> What I'm missing here is the lego approach, where you can mix and match:
>>
>> virtnet.ko: basic net driver atop virtio, not linked to any implementation
>> virtio-lguest.ko, virtio-kvm.ko, virtio-xen.ko: virtio transports
>> virtbus-pci.ko, virtbus-vio.ko, virtbus-xen.ko: virtual configuration
>> space handlers; responsible for creating queues
>>
>> vnet-kvm-pci.ko, vnet-kvm-virtbus.ko: stub drivers that glue the
>> components together
>>
>> So we'd have one 10-line driver for every combination.
>>
>
> The whole point of the bus abstraction is that the device driver (virtnet
> in this case) does not care about the underlying transport at all,
> while the host driver does not care about the device.
>
> So in your example, you get
>
> virtnet.ko (, virtblock.ko, hwrng-virtio.ko, ...): host-independent
> device driver
> virtbus-lguest.ko, virtbus-kvm.ko, virtbus-pci.ko, virtbus-xen.ko:
> device independent host drivers
>
> In cases where some of the code can be shared, e.g. virtbus-lguest
> and virtbus-kvm, you can have multiple host drivers sharing part
> of their code by using symbols from a library module, but my basic
> idea is that each host driver has a single module that handles
> the transport and the device probing.
>
Is that module linked to both the pci libraries and the virtbus
libraries? Or does virtbus abstract pci in some way?
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2007-07-08 15:48 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-06 12:42 [RFC 0/4] Using a generic bus_type for virtio arnd
2007-07-06 12:42 ` [RFC 1/4] New virtio bus driver arnd
2007-07-08 9:59 ` Avi Kivity
2007-07-08 15:29 ` Arnd Bergmann
2007-07-08 15:48 ` Avi Kivity [this message]
2007-07-08 20:29 ` Arnd Bergmann
2007-07-08 23:42 ` Rusty Russell
2007-07-09 6:49 ` Avi Kivity
2007-07-09 11:18 ` Arnd Bergmann
2007-07-09 11:41 ` Avi Kivity
2007-07-09 11:38 ` Arnd Bergmann
2007-07-09 12:09 ` Avi Kivity
2007-07-09 14:24 ` Arnd Bergmann
2007-07-09 14:56 ` Avi Kivity
2007-07-09 16:33 ` Arnd Bergmann
2007-07-10 1:53 ` Rusty Russell
2007-07-10 7:56 ` Avi Kivity
2007-07-10 1:17 ` Rusty Russell
2007-07-10 6:06 ` Avi Kivity
2007-07-06 12:42 ` [RFC 2/4] Convert virtio_net to new virtio bus arnd
2007-07-06 12:42 ` [RFC 3/4] Convert virtio_blk " arnd
2007-07-06 12:42 ` [RFC 4/4] Example virtio host implementation, using chardev arnd
2007-07-08 2:15 ` [RFC 0/4] Using a generic bus_type for virtio Rusty Russell
2007-07-08 9:45 ` Avi Kivity
2007-07-08 15:55 ` Arnd Bergmann
2007-07-08 9:42 ` Avi Kivity
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=4691076B.5050106@qumranet.com \
--to=avi@qumranet.com \
--cc=arnd@arndb.de \
--cc=virtualization@lists.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;
as well as URLs for NNTP newsgroup(s).