diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-02-04 23:50:03 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-02-04 07:50:03 -0500 |
commit | 6e5aa7efb27aec7e55b6463fa2c8db594c4226fa (patch) | |
tree | 060a955e711ac224136157a5410e88dcdab965af /drivers/virtio/virtio_ring.c | |
parent | b3369c1fb410fddeb38a404316c861395f6d6ae8 (diff) |
virtio: reset function
A reset function solves three problems:
1) It allows us to renegotiate features, eg. if we want to upgrade a
guest driver without rebooting the guest.
2) It gives us a clean way of shutting down virtqueues: after a reset,
we know that the buffers won't be used by the host, and
3) It helps the guest recover from messed-up drivers.
So we remove the ->shutdown hook, and the only way we now remove
feature bits is via reset.
We leave it to the driver to do the reset before it deletes queues:
the balloon driver, for example, needs to chat to the host in its
remove function.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/virtio/virtio_ring.c')
-rw-r--r-- | drivers/virtio/virtio_ring.c | 11 |
1 files changed, 0 insertions, 11 deletions
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index dbe1d35db32a..9849babd6b37 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c | |||
@@ -173,16 +173,6 @@ static void detach_buf(struct vring_virtqueue *vq, unsigned int head) | |||
173 | vq->num_free++; | 173 | vq->num_free++; |
174 | } | 174 | } |
175 | 175 | ||
176 | /* FIXME: We need to tell other side about removal, to synchronize. */ | ||
177 | static void vring_shutdown(struct virtqueue *_vq) | ||
178 | { | ||
179 | struct vring_virtqueue *vq = to_vvq(_vq); | ||
180 | unsigned int i; | ||
181 | |||
182 | for (i = 0; i < vq->vring.num; i++) | ||
183 | detach_buf(vq, i); | ||
184 | } | ||
185 | |||
186 | static inline bool more_used(const struct vring_virtqueue *vq) | 176 | static inline bool more_used(const struct vring_virtqueue *vq) |
187 | { | 177 | { |
188 | return vq->last_used_idx != vq->vring.used->idx; | 178 | return vq->last_used_idx != vq->vring.used->idx; |
@@ -278,7 +268,6 @@ static struct virtqueue_ops vring_vq_ops = { | |||
278 | .kick = vring_kick, | 268 | .kick = vring_kick, |
279 | .disable_cb = vring_disable_cb, | 269 | .disable_cb = vring_disable_cb, |
280 | .enable_cb = vring_enable_cb, | 270 | .enable_cb = vring_enable_cb, |
281 | .shutdown = vring_shutdown, | ||
282 | }; | 271 | }; |
283 | 272 | ||
284 | struct virtqueue *vring_new_virtqueue(unsigned int num, | 273 | struct virtqueue *vring_new_virtqueue(unsigned int num, |