virtio: meet virtio spec by finalizing features before using device
Virtio devices are supposed to negotiate features before they start using the device, but the current code doesn't do this. This is because the driver's probe() function invariably has to add buffers to a virtqueue, or probe the disk (virtio_blk). This currently doesn't matter since no existing backend is strict about the feature negotiation. But it's possible to imagine a future feature which completely changes how a device operates: in this case, we'd need to acknowledge it before using the device. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Родитель
20f77f5654
Коммит
ef688e151c
|
@ -118,13 +118,14 @@ static int virtio_dev_probe(struct device *_d)
|
|||
if (device_features & (1 << i))
|
||||
set_bit(i, dev->features);
|
||||
|
||||
dev->config->finalize_features(dev);
|
||||
|
||||
err = drv->probe(dev);
|
||||
if (err)
|
||||
add_status(dev, VIRTIO_CONFIG_S_FAILED);
|
||||
else {
|
||||
dev->config->finalize_features(dev);
|
||||
else
|
||||
add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче