Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 801a71a8 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux

Pull virtio updates from Rusty Russell.

* tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux:
  Revert "hwrng: virtio - ensure reads happen after successful probe"
  virtio: rng: delay hwrng_register() till driver is ready
  virtio: rng: re-arrange struct elements for better packing
  virtio: rng: remove unused struct element
  virtio: Replace DEFINE_PCI_DEVICE_TABLE macro use
  virtio: console: remove unnecessary null test before debugfs_remove_recursive
parents 155134fe eeec6263
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -81,12 +81,6 @@ static void add_early_randomness(struct hwrng *rng)
	unsigned char bytes[16];
	int bytes_read;

	/*
	 * Currently only virtio-rng cannot return data during device
	 * probe, and that's handled in virtio-rng.c itself.  If there
	 * are more such devices, this call to rng_get_data can be
	 * made conditional here instead of doing it per-device.
	 */
	bytes_read = rng_get_data(rng, bytes, sizeof(bytes), 1);
	if (bytes_read > 0)
		add_device_randomness(bytes, bytes_read);
+17 −22
Original line number Diff line number Diff line
@@ -28,17 +28,16 @@
static DEFINE_IDA(rng_index_ida);

struct virtrng_info {
	struct virtio_device *vdev;
	struct hwrng hwrng;
	struct virtqueue *vq;
	unsigned int data_avail;
	struct completion have_data;
	bool busy;
	char name[25];
	unsigned int data_avail;
	int index;
	bool busy;
	bool hwrng_register_done;
};

static bool probe_done;

static void random_recv_done(struct virtqueue *vq)
{
@@ -69,13 +68,6 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
	int ret;
	struct virtrng_info *vi = (struct virtrng_info *)rng->priv;

	/*
	 * Don't ask host for data till we're setup.  This call can
	 * happen during hwrng_register(), after commit d9e7972619.
	 */
	if (unlikely(!probe_done))
		return 0;

	if (!vi->busy) {
		vi->busy = true;
		init_completion(&vi->have_data);
@@ -137,24 +129,16 @@ static int probe_common(struct virtio_device *vdev)
		return err;
	}

	err = hwrng_register(&vi->hwrng);
	if (err) {
		vdev->config->del_vqs(vdev);
		vi->vq = NULL;
		kfree(vi);
		ida_simple_remove(&rng_index_ida, index);
		return err;
	}

	probe_done = true;
	return 0;
}

static void remove_common(struct virtio_device *vdev)
{
	struct virtrng_info *vi = vdev->priv;

	vdev->config->reset(vdev);
	vi->busy = false;
	if (vi->hwrng_register_done)
		hwrng_unregister(&vi->hwrng);
	vdev->config->del_vqs(vdev);
	ida_simple_remove(&rng_index_ida, vi->index);
@@ -171,6 +155,16 @@ static void virtrng_remove(struct virtio_device *vdev)
	remove_common(vdev);
}

static void virtrng_scan(struct virtio_device *vdev)
{
	struct virtrng_info *vi = vdev->priv;
	int err;

	err = hwrng_register(&vi->hwrng);
	if (!err)
		vi->hwrng_register_done = true;
}

#ifdef CONFIG_PM_SLEEP
static int virtrng_freeze(struct virtio_device *vdev)
{
@@ -195,6 +189,7 @@ static struct virtio_driver virtio_rng_driver = {
	.id_table =	id_table,
	.probe =	virtrng_probe,
	.remove =	virtrng_remove,
	.scan =		virtrng_scan,
#ifdef CONFIG_PM_SLEEP
	.freeze =	virtrng_freeze,
	.restore =	virtrng_restore,
+2 −4
Original line number Diff line number Diff line
@@ -2262,7 +2262,6 @@ static int __init init(void)
unregister:
	unregister_virtio_driver(&virtio_console);
free:
	if (pdrvdata.debugfs_dir)
	debugfs_remove_recursive(pdrvdata.debugfs_dir);
	class_destroy(pdrvdata.class);
	return err;
@@ -2276,7 +2275,6 @@ static void __exit fini(void)
	unregister_virtio_driver(&virtio_rproc_serial);

	class_destroy(pdrvdata.class);
	if (pdrvdata.debugfs_dir)
	debugfs_remove_recursive(pdrvdata.debugfs_dir);
}
module_init(init);
+1 −1
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ struct virtio_pci_vq_info
};

/* Qumranet donated their vendor ID for devices 0x1000 thru 0x10FF. */
static DEFINE_PCI_DEVICE_TABLE(virtio_pci_id_table) = {
static const struct pci_device_id virtio_pci_id_table[] = {
	{ PCI_DEVICE(0x1af4, PCI_ANY_ID) },
	{ 0 }
};