diff options
Diffstat (limited to 'drivers/char/hw_random/virtio-rng.c')
| -rw-r--r-- | drivers/char/hw_random/virtio-rng.c | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c index 10fd71ccf58..6bf4d47324e 100644 --- a/drivers/char/hw_random/virtio-rng.c +++ b/drivers/char/hw_random/virtio-rng.c @@ -92,14 +92,22 @@ static int probe_common(struct virtio_device *vdev)  {  	int err; +	if (vq) { +		/* We only support one device for now */ +		return -EBUSY; +	}  	/* We expect a single virtqueue. */  	vq = virtio_find_single_vq(vdev, random_recv_done, "input"); -	if (IS_ERR(vq)) -		return PTR_ERR(vq); +	if (IS_ERR(vq)) { +		err = PTR_ERR(vq); +		vq = NULL; +		return err; +	}  	err = hwrng_register(&virtio_hwrng);  	if (err) {  		vdev->config->del_vqs(vdev); +		vq = NULL;  		return err;  	} @@ -112,6 +120,7 @@ static void remove_common(struct virtio_device *vdev)  	busy = false;  	hwrng_unregister(&virtio_hwrng);  	vdev->config->del_vqs(vdev); +	vq = NULL;  }  static int virtrng_probe(struct virtio_device *vdev) |