All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] virtio: Use spin_lock_irqsave/restore for virtio-pci
@ 2008-03-11 12:03 Rusty Russell
  2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell
  2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell
  0 siblings, 2 replies; 7+ messages in thread
From: Rusty Russell @ 2008-03-11 12:03 UTC (permalink / raw)
  To: virtualization; +Cc: linux-kernel, Anthony Liguori

From: Anthony Liguori <aliguori@us.ibm.com>

virtio-pci acquires its spin lock in an interrupt context so it's necessary
to use spin_lock_irqsave/restore variants.  This patch fixes guest SMP when
using virtio devices in KVM.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/virtio/virtio_pci.c |   15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
index 26f787d..59a8f73 100644
--- a/drivers/virtio/virtio_pci.c
+++ b/drivers/virtio/virtio_pci.c
@@ -177,6 +177,7 @@ static irqreturn_t vp_interrupt(int irq, void *opaque)
 	struct virtio_pci_device *vp_dev = opaque;
 	struct virtio_pci_vq_info *info;
 	irqreturn_t ret = IRQ_NONE;
+	unsigned long flags;
 	u8 isr;
 
 	/* reading the ISR has the effect of also clearing it so it's very
@@ -197,12 +198,12 @@ static irqreturn_t vp_interrupt(int irq, void *opaque)
 			drv->config_changed(&vp_dev->vdev);
 	}
 
-	spin_lock(&vp_dev->lock);
+	spin_lock_irqsave(&vp_dev->lock, flags);
 	list_for_each_entry(info, &vp_dev->virtqueues, node) {
 		if (vring_interrupt(irq, info->vq) == IRQ_HANDLED)
 			ret = IRQ_HANDLED;
 	}
-	spin_unlock(&vp_dev->lock);
+	spin_unlock_irqrestore(&vp_dev->lock, flags);
 
 	return ret;
 }
@@ -214,6 +215,7 @@ static struct virtqueue *vp_find_vq(struct virtio_device *vdev, unsigned index,
 	struct virtio_pci_device *vp_dev = to_vp_device(vdev);
 	struct virtio_pci_vq_info *info;
 	struct virtqueue *vq;
+	unsigned long flags;
 	u16 num;
 	int err;
 
@@ -255,9 +257,9 @@ static struct virtqueue *vp_find_vq(struct virtio_device *vdev, unsigned index,
 	vq->priv = info;
 	info->vq = vq;
 
-	spin_lock(&vp_dev->lock);
+	spin_lock_irqsave(&vp_dev->lock, flags);
 	list_add(&info->node, &vp_dev->virtqueues);
-	spin_unlock(&vp_dev->lock);
+	spin_unlock_irqrestore(&vp_dev->lock, flags);
 
 	return vq;
 
@@ -274,10 +276,11 @@ static void vp_del_vq(struct virtqueue *vq)
 {
 	struct virtio_pci_device *vp_dev = to_vp_device(vq->vdev);
 	struct virtio_pci_vq_info *info = vq->priv;
+	unsigned long flags;
 
-	spin_lock(&vp_dev->lock);
+	spin_lock_irqsave(&vp_dev->lock, flags);
 	list_del(&info->node);
-	spin_unlock(&vp_dev->lock);
+	spin_unlock_irqrestore(&vp_dev->lock, flags);
 
 	vring_del_virtqueue(vq);
 


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink
  2008-03-11 12:03 [PATCH 1/4] virtio: Use spin_lock_irqsave/restore for virtio-pci Rusty Russell
  2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell
@ 2008-03-11 12:04 ` Rusty Russell
  1 sibling, 0 replies; 7+ messages in thread
From: Rusty Russell @ 2008-03-11 12:04 UTC (permalink / raw)
  To: virtualization; +Cc: Jeremy Katz, linux-kernel

From: Jeremy Katz <katzj@redhat.com>

Fix up so that the virtio_blk devices in sysfs link correctly to their
block device.  This then allows them to be detected by hal, etc

Signed-off-by: Jeremy Katz <katzj@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/block/virtio_blk.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 3b1a68d..0cfbe8c 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -238,6 +238,7 @@ static int virtblk_probe(struct virtio_device *vdev)
 	vblk->disk->first_minor = index_to_minor(index);
 	vblk->disk->private_data = vblk;
 	vblk->disk->fops = &virtblk_fops;
+	vblk->disk->driverfs_dev = &vdev->dev;
 	index++;
 
 	/* If barriers are supported, tell block layer that queue is ordered */

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink
  2008-03-11 12:03 [PATCH 1/4] virtio: Use spin_lock_irqsave/restore for virtio-pci Rusty Russell
@ 2008-03-11 12:04 ` Rusty Russell
  2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
  2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
  2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell
  1 sibling, 2 replies; 7+ messages in thread
From: Rusty Russell @ 2008-03-11 12:04 UTC (permalink / raw)
  To: virtualization; +Cc: linux-kernel, Jeremy Katz

From: Jeremy Katz <katzj@redhat.com>

Fix up so that the virtio_blk devices in sysfs link correctly to their
block device.  This then allows them to be detected by hal, etc

Signed-off-by: Jeremy Katz <katzj@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/block/virtio_blk.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 3b1a68d..0cfbe8c 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -238,6 +238,7 @@ static int virtblk_probe(struct virtio_device *vdev)
 	vblk->disk->first_minor = index_to_minor(index);
 	vblk->disk->private_data = vblk;
 	vblk->disk->fops = &virtblk_fops;
+	vblk->disk->driverfs_dev = &vdev->dev;
 	index++;
 
 	/* If barriers are supported, tell block layer that queue is ordered */

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/4] virtio: handle > 2 billion page balloon targets
  2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell
  2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
@ 2008-03-11 12:05   ` Rusty Russell
  1 sibling, 0 replies; 7+ messages in thread
From: Rusty Russell @ 2008-03-11 12:05 UTC (permalink / raw)
  To: virtualization; +Cc: Jeremy Katz, linux-kernel

If the host asks for a huge target towards_target() can overflow, and
we up oops as we try to release more pages than we have.  The simple
fix is to use a 64-bit value.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/virtio/virtio_balloon.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff -r fd0c80dbbd95 drivers/virtio/virtio_balloon.c
--- a/drivers/virtio/virtio_balloon.c	Tue Mar 11 09:21:00 2008 +1100
+++ b/drivers/virtio/virtio_balloon.c	Tue Mar 11 11:25:52 2008 +1100
@@ -152,7 +152,7 @@ static void virtballoon_changed(struct v
 	wake_up(&vb->config_change);
 }
 
-static inline int towards_target(struct virtio_balloon *vb)
+static inline s64 towards_target(struct virtio_balloon *vb)
 {
 	u32 v;
 	__virtio_config_val(vb->vdev,
@@ -176,7 +183,7 @@ static int balloon(void *_vballoon)
 
 	set_freezable();
 	while (!kthread_should_stop()) {
-		int diff;
+		s64 diff;
 
 		try_to_freeze();
 		wait_event_interruptible(vb->config_change,

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 3/4] virtio: handle > 2 billion page balloon targets
  2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell
@ 2008-03-11 12:05   ` Rusty Russell
  2008-03-11 12:06     ` [PATCH 4/4] virtio: Enable netpoll interface for netconsole logging Rusty Russell
  2008-03-11 12:06     ` Rusty Russell
  2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
  1 sibling, 2 replies; 7+ messages in thread
From: Rusty Russell @ 2008-03-11 12:05 UTC (permalink / raw)
  To: virtualization; +Cc: linux-kernel, Jeremy Katz

If the host asks for a huge target towards_target() can overflow, and
we up oops as we try to release more pages than we have.  The simple
fix is to use a 64-bit value.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/virtio/virtio_balloon.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff -r fd0c80dbbd95 drivers/virtio/virtio_balloon.c
--- a/drivers/virtio/virtio_balloon.c	Tue Mar 11 09:21:00 2008 +1100
+++ b/drivers/virtio/virtio_balloon.c	Tue Mar 11 11:25:52 2008 +1100
@@ -152,7 +152,7 @@ static void virtballoon_changed(struct v
 	wake_up(&vb->config_change);
 }
 
-static inline int towards_target(struct virtio_balloon *vb)
+static inline s64 towards_target(struct virtio_balloon *vb)
 {
 	u32 v;
 	__virtio_config_val(vb->vdev,
@@ -176,7 +183,7 @@ static int balloon(void *_vballoon)
 
 	set_freezable();
 	while (!kthread_should_stop()) {
-		int diff;
+		s64 diff;
 
 		try_to_freeze();
 		wait_event_interruptible(vb->config_change,

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 4/4] virtio: Enable netpoll interface for netconsole logging
  2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
  2008-03-11 12:06     ` [PATCH 4/4] virtio: Enable netpoll interface for netconsole logging Rusty Russell
@ 2008-03-11 12:06     ` Rusty Russell
  1 sibling, 0 replies; 7+ messages in thread
From: Rusty Russell @ 2008-03-11 12:06 UTC (permalink / raw)
  To: virtualization; +Cc: Amit Shah, linux-kernel

From: "Amit Shah" <amitshah@gmx.net>

Add a new poll_controller handler that the netpoll interface needs.

This enables netconsole logging from a kvm guest over the virtio
net interface.

Signed-off-by: Amit Shah <amitshah@gmx.net>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/net/virtio_net.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -294,6 +294,15 @@ again:
 	return 0;
 }
 
+#ifdef CONFIG_NET_POLL_CONTROLLER
+static void virtnet_netpoll(struct net_device *dev)
+{
+	struct virtnet_info *vi = netdev_priv(dev);
+
+	napi_schedule(&vi->napi);
+}
+#endif
+
 static int virtnet_open(struct net_device *dev)
 {
 	struct virtnet_info *vi = netdev_priv(dev);
@@ -336,6 +345,9 @@ static int virtnet_probe(struct virtio_d
 	dev->stop = virtnet_close;
 	dev->hard_start_xmit = start_xmit;
 	dev->features = NETIF_F_HIGHDMA;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+	dev->poll_controller = virtnet_netpoll;
+#endif
 	SET_NETDEV_DEV(dev, &vdev->dev);
 
 	/* Do we support "hardware" checksums? */

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 4/4] virtio: Enable netpoll interface for netconsole logging
  2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
@ 2008-03-11 12:06     ` Rusty Russell
  2008-03-11 12:06     ` Rusty Russell
  1 sibling, 0 replies; 7+ messages in thread
From: Rusty Russell @ 2008-03-11 12:06 UTC (permalink / raw)
  To: virtualization; +Cc: linux-kernel, Amit Shah

From: "Amit Shah" <amitshah@gmx.net>

Add a new poll_controller handler that the netpoll interface needs.

This enables netconsole logging from a kvm guest over the virtio
net interface.

Signed-off-by: Amit Shah <amitshah@gmx.net>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/net/virtio_net.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -294,6 +294,15 @@ again:
 	return 0;
 }
 
+#ifdef CONFIG_NET_POLL_CONTROLLER
+static void virtnet_netpoll(struct net_device *dev)
+{
+	struct virtnet_info *vi = netdev_priv(dev);
+
+	napi_schedule(&vi->napi);
+}
+#endif
+
 static int virtnet_open(struct net_device *dev)
 {
 	struct virtnet_info *vi = netdev_priv(dev);
@@ -336,6 +345,9 @@ static int virtnet_probe(struct virtio_d
 	dev->stop = virtnet_close;
 	dev->hard_start_xmit = start_xmit;
 	dev->features = NETIF_F_HIGHDMA;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+	dev->poll_controller = virtnet_netpoll;
+#endif
 	SET_NETDEV_DEV(dev, &vdev->dev);
 
 	/* Do we support "hardware" checksums? */

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-03-11 12:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-11 12:03 [PATCH 1/4] virtio: Use spin_lock_irqsave/restore for virtio-pci Rusty Russell
2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell
2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
2008-03-11 12:06     ` [PATCH 4/4] virtio: Enable netpoll interface for netconsole logging Rusty Russell
2008-03-11 12:06     ` Rusty Russell
2008-03-11 12:05   ` [PATCH 3/4] virtio: handle > 2 billion page balloon targets Rusty Russell
2008-03-11 12:04 ` [PATCH 2/4] virtio: Fix sysfs bits to have proper block symlink Rusty Russell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.