diff options
Diffstat (limited to 'drivers/virtio/virtio_balloon.c')
| -rw-r--r-- | drivers/virtio/virtio_balloon.c | 33 | 
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 8807fe501d2..bfbc15ca38d 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -381,21 +381,25 @@ out:  	return err;  } -static void __devexit virtballoon_remove(struct virtio_device *vdev) +static void remove_common(struct virtio_balloon *vb)  { -	struct virtio_balloon *vb = vdev->priv; - -	kthread_stop(vb->thread); -  	/* There might be pages left in the balloon: free them. */  	while (vb->num_pages)  		leak_balloon(vb, vb->num_pages);  	update_balloon_size(vb);  	/* Now we reset the device so we can clean up the queues. */ -	vdev->config->reset(vdev); +	vb->vdev->config->reset(vb->vdev); -	vdev->config->del_vqs(vdev); +	vb->vdev->config->del_vqs(vb->vdev); +} + +static void __devexit virtballoon_remove(struct virtio_device *vdev) +{ +	struct virtio_balloon *vb = vdev->priv; + +	kthread_stop(vb->thread); +	remove_common(vb);  	kfree(vb);  } @@ -409,17 +413,11 @@ static int virtballoon_freeze(struct virtio_device *vdev)  	 * function is called.  	 */ -	while (vb->num_pages) -		leak_balloon(vb, vb->num_pages); -	update_balloon_size(vb); - -	/* Ensure we don't get any more requests from the host */ -	vdev->config->reset(vdev); -	vdev->config->del_vqs(vdev); +	remove_common(vb);  	return 0;  } -static int restore_common(struct virtio_device *vdev) +static int virtballoon_restore(struct virtio_device *vdev)  {  	struct virtio_balloon *vb = vdev->priv;  	int ret; @@ -432,11 +430,6 @@ static int restore_common(struct virtio_device *vdev)  	update_balloon_size(vb);  	return 0;  } - -static int virtballoon_restore(struct virtio_device *vdev) -{ -	return restore_common(vdev); -}  #endif  static unsigned int features[] = {  |