diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-07-25 21:06:07 +0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-07-25 06:06:07 +0400 |
commit | dd7c7bc46211785a1aa7d70feb15830f62682b3c (patch) | |
tree | 3c615eac390c11339c652947e744d12cb82b4d36 | |
parent | faeba830b086bc9e58748869054e994cb09693cd (diff) | |
download | linux-dd7c7bc46211785a1aa7d70feb15830f62682b3c.tar.xz |
virtio: Formally reserve bits 28-31 to be 'transport' features.
We assign feature bits as required, but it makes sense to reserve some
for the particular transport, rather than the particular device.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r-- | drivers/virtio/virtio.c | 5 | ||||
-rw-r--r-- | include/linux/virtio_config.h | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index fc85cba64578..baf103361e3a 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c @@ -113,6 +113,11 @@ static int virtio_dev_probe(struct device *_d) set_bit(f, dev->features); } + /* Transport features are always preserved to pass to set_features. */ + for (i = VIRTIO_TRANSPORT_F_START; i < VIRTIO_TRANSPORT_F_END; i++) + if (device_features & (1 << i)) + set_bit(i, dev->features); + err = drv->probe(dev); if (err) add_status(dev, VIRTIO_CONFIG_S_FAILED); diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 7eb4b34d13bb..5a30cfb7934b 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h @@ -18,6 +18,12 @@ /* We've given up on this device. */ #define VIRTIO_CONFIG_S_FAILED 0x80 +/* Some virtio feature bits (currently bits 28 through 31) are reserved for the + * transport being used (eg. virtio_ring), the rest are per-device feature + * bits. */ +#define VIRTIO_TRANSPORT_F_START 28 +#define VIRTIO_TRANSPORT_F_END 32 + /* Do we get callbacks when the ring is completely used, even if we've * suppressed them? */ #define VIRTIO_F_NOTIFY_ON_EMPTY 24 |