virtio_net and SMP guests

Christian Borntraeger
Thu, 10 Jan 2008 04:38:30 -0000

Am Dienstag, 18. Dezember 2007 schrieb Rusty Russell:
> To me this points to doing interrupt suppression a different way.  If we
> have a ->disable_cb() virtio function, and call it before we call
> netif_rx_schedule, does that fix it?

The fix looks good and I agree with it.

There is one problem that I try to find for some days, but the following
BUG_ON triggers:

static void vring_disable_cb(struct virtqueue *_vq)
{
        struct vring_virtqueue *vq = to_vvq(_vq);

        START_USE(vq);
---->   BUG_ON(vq->vring.avail->flags &
VRING_AVAIL_F_NO_INTERRUPT);
        vq->vring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
        END_USE(vq);
}

The funny thing is, that this bit is correct during probe but changes later
before open. It seems that there is still something fishy on s390 and
virtio.
I looked several times at the virtio_ring code and it really seems to be ok.
Any ideas?
Christian

-------- the oops that I cannot explain -------------

kernel BUG at /space/kvm/drivers/virtio/virtio_ring.c:232!
illegal operation: 0001 [#1]
Modules linked in:
CPU:    0    Not tainted
Process ip (pid: 1583, task: 000000000eee7038, ksp: 000000000ec4beb8)
Krnl PSW : 0704300180000000 000000000045dcd4 (vring_disable_cb+0x30/0x34)
           R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:3 PM:0 EA:3
Krnl GPRS: 000003ff00000002 0000000000000001 0000000010001800
000000000045dca4
           000000000f054800 0000000000595a80 0000000000000000
0000000000000000
           0000000000897768 000003ff00001002 000000000f09c920
000000000ec4bbf8
           000000000f09c900 0000000000596b20 000000000045c9c6
000000000ec4bbf8
Krnl Code: 000000000045dcc8: e3b0b0700004       lg      %r11,112(%r11)
           000000000045dcce: 07fe               bcr     15,%r14
           000000000045dcd0: a7f40001           brc     15,45dcd2
          >000000000045dcd4: a7f4fff6           brc     15,45dcc0
           000000000045dcd8: eb7ff0500024       stmg    %r7,%r15,80(%r15)
           000000000045dcde: a7f13e00           tmll    %r15,15872
           000000000045dce2: b90400ef           lgr     %r14,%r15
           000000000045dce6: a7840001           brc     8,45dce8
Call Trace:
([<000000000045c95e>] virtnet_open+0x32/0x114)
 [<000000000048cbac>] dev_open+0xb0/0xe8
 [<000000000048b6a2>] dev_change_flags+0x156/0x1cc
 [<00000000004ead02>] devinet_ioctl+0x5ae/0x728
 [<00000000004eb564>] inet_ioctl+0xa4/0xf0
 [<00000000004798dc>] sock_ioctl+0x90/0x2e4
 [<00000000001b8bd2>] do_ioctl+0x4a/0xd4
 [<00000000001b8cda>] vfs_ioctl+0x7e/0x3c8
 [<00000000001b90b6>] sys_ioctl+0x92/0xa4
 [<0000000000112e7c>] sysc_noemu+0x10/0x16
 [<000002000012c7e6>] 0x2000012c7e6