2008-06-13 12:46:53

by Mark McLoughlin

[permalink] [raw]
Subject: [PATCH 1/2] virtio: Use bus_type probe and remove methods

Hook up to the probe() and remove() methods in bus_type
rather than device_driver. The latter has been preferred
since 2.6.16.

Signed-off-by: Mark McLoughlin <[email protected]>
---
drivers/virtio/virtio.c | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index 0f3c2bb..ab0aca7 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -71,13 +71,6 @@ static int virtio_uevent(struct device *_dv, struct kobj_uevent_env *env)
dev->id.device, dev->id.vendor);
}

-static struct bus_type virtio_bus = {
- .name = "virtio",
- .match = virtio_dev_match,
- .dev_attrs = virtio_dev_attrs,
- .uevent = virtio_uevent,
-};
-
static void add_status(struct virtio_device *dev, unsigned status)
{
dev->config->set_status(dev, dev->config->get_status(dev) | status);
@@ -147,13 +140,20 @@ static int virtio_dev_remove(struct device *_d)
return 0;
}

+static struct bus_type virtio_bus = {
+ .name = "virtio",
+ .match = virtio_dev_match,
+ .dev_attrs = virtio_dev_attrs,
+ .uevent = virtio_uevent,
+ .probe = virtio_dev_probe,
+ .remove = virtio_dev_remove,
+};
+
int register_virtio_driver(struct virtio_driver *driver)
{
/* Catch this early. */
BUG_ON(driver->feature_table_size && !driver->feature_table);
driver->driver.bus = &virtio_bus;
- driver->driver.probe = virtio_dev_probe;
- driver->driver.remove = virtio_dev_remove;
return driver_register(&driver->driver);
}
EXPORT_SYMBOL_GPL(register_virtio_driver);
--
1.5.4.1


2008-06-13 12:53:32

by Mark McLoughlin

[permalink] [raw]
Subject: [PATCH 2/2] virtio: Complete feature negotation before updating status

lguest (in rusty's use-tun-ringfd patch) assumes that the
guest has updated its feature bits before setting its status
to VIRTIO_CONFIG_S_DRIVER_OK.

That's pretty reasonable, so let's make it so.

Signed-off-by: Mark McLoughlin <[email protected]>
---
drivers/virtio/virtio.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index ab0aca7..fc85cba 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -117,9 +117,9 @@ static int virtio_dev_probe(struct device *_d)
if (err)
add_status(dev, VIRTIO_CONFIG_S_FAILED);
else {
- add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
/* They should never have set feature bits beyond 32 */
dev->config->set_features(dev, dev->features[0]);
+ add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
}
return err;
}
--
1.5.4.1

2008-06-14 04:03:25

by Rusty Russell

[permalink] [raw]
Subject: Re: [PATCH 1/2] virtio: Use bus_type probe and remove methods

On Friday 13 June 2008 22:46:40 Mark McLoughlin wrote:
> Hook up to the probe() and remove() methods in bus_type
> rather than device_driver. The latter has been preferred
> since 2.6.16.
>
> Signed-off-by: Mark McLoughlin <[email protected]>

Thanks, applied.

Cheers,
Rusty.

2008-06-14 04:13:40

by Rusty Russell

[permalink] [raw]
Subject: Re: [PATCH 2/2] virtio: Complete feature negotation before updating status

On Friday 13 June 2008 22:46:41 Mark McLoughlin wrote:
> lguest (in rusty's use-tun-ringfd patch) assumes that the
> guest has updated its feature bits before setting its status
> to VIRTIO_CONFIG_S_DRIVER_OK.
>
> That's pretty reasonable, so let's make it so.

Applied. That's a bug, I'll send to Linus immediately (I screwed up in the
feature changes which are new in this kernel).

Thanks for catching this,
Rusty.