LKML Archive on 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
0 siblings, 1 reply; 4+ 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 [flat|nested] 4+ 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
0 siblings, 1 reply; 4+ 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 [flat|nested] 4+ 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
0 siblings, 1 reply; 4+ 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] 4+ 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
0 siblings, 0 replies; 4+ 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] 4+ messages in thread
end of thread, other threads:[~2008-03-11 12:07 UTC | newest]
Thread overview: 4+ 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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).