On 01/09/2013 04:23 PM, Wanlong Gao wrote: > On 01/08/2013 06:14 PM, Jason Wang wrote: >> On 01/08/2013 06:00 PM, Wanlong Gao wrote: >>> On 01/08/2013 05:51 PM, Jason Wang wrote: >>>> On 01/08/2013 05:49 PM, Wanlong Gao wrote: >>>>> On 01/08/2013 05:29 PM, Jason Wang wrote: >>>>>> On 01/08/2013 05:07 PM, Wanlong Gao wrote: >>>>>>> On 12/28/2012 06:32 PM, Jason Wang wrote: >>>>>>>> + } else if (nc->peer->info->type != NET_CLIENT_OPTIONS_KIND_TAP) { >>>>>>>> + ret = -1; >>>>>>>> + } else { >>>>>>>> + ret = tap_detach(nc->peer); >>>>>>>> + } >>>>>>>> + >>>>>>>> + return ret; >>>>>>>> +} >>>>>>>> + >>>>>>>> +static void virtio_net_set_queues(VirtIONet *n) >>>>>>>> +{ >>>>>>>> + int i; >>>>>>>> + >>>>>>>> + for (i = 0; i < n->max_queues; i++) { >>>>>>>> + if (i < n->curr_queues) { >>>>>>>> + assert(!peer_attach(n, i)); >>>>>>>> + } else { >>>>>>>> + assert(!peer_detach(n, i)); >>>>>>> I got a assert here, >>>>>>> qemu-system-x86_64: /work/git/qemu/hw/virtio-net.c:330: virtio_net_set_queues: Assertion `!peer_detach(n, i)' failed. >>>>>>> >>>>>>> Any thoughts? >>>>>>> >>>>>>> Thanks, >>>>>>> Wanlong Gao >>>>>> Thanks for the testing, which steps or cases did you met this assertion, >>>>>> migration, reboot or just changing the number of virtqueues? >>>>> I use the 3.8-rc2 to test it again, I saw this tag has the multi-tap support. >>>>> >>>>> I just can't start the QEMU use -netdev tap,id=hostnet0,queues=2,fd=%d,fd=%d -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:ce:7b:29,bus=pci.0,addr=0x3 >>>>> >>>>> I pre-opened two tap fds, did I missing something? >>>> Nothing missed :) It should work. >>>> >>>> Could you please try not use fd=X and let qemu to create the file >>>> descriptors by itself? Btw, how did you create the two tap fds? >>> Can it create descriptors itself? I get >>> qemu-system-x86_64: -netdev tap,id=hostnet0,queues=2: Device 'tap' could not be initialized >> You need prepare an ifup script which default at /etc/qemu-ifup (like >> following). Or you may try to add a script=no after: >> >> #!/bin/sh >> >> switch=kvmbr0 >> >> /sbin/ifconfig $1 0.0.0.0 up >> /usr/sbin/brctl addif $switch $1 >> /usr/sbin/brctl stp $switch off >> >> This will let qemu create a tap fd itself and make it to be connected to >> a port of the bridge caled kvmbr0. > But how to support multi-queue in this way? Qemu will create the necessary multiqueue tap by itself, see patch 0/12. > I got guest kernel panic when using this way and set queues=4. Does it happens w/o or w/ a fd parameter? What's the qemu command line? Did you meet it during boot time? Thanks > > Thanks, > Wanlong Gao > >>> I create the tap fd like this, and dup create the second fd, third fd, right? >> The second and third fd should be created with TUNSETIFF with the same >> tap_name also. Btw, you need to specify a IFF_MULTI_QUEUE flag to tell >> the kernel you want to create a multiqueue tap device, otherwise the >> second and third calling of TUNSETIFF will fail. >> >> Thanks >>> int tap_fd = open("/dev/net/tun", O_RDWR); >>> int vhost_fd = open("/dev/vhost-net", O_RDWR); >>> char *tap_name = "tap"; >>> char cmd[2048]; >>> char brctl[256]; >>> char netup[256]; >>> struct ifreq ifr; >>> if (tap_fd < 0) { >>> printf("open tun device failed\n"); >>> return -1; >>> } >>> if (vhost_fd < 0) { >>> printf("open vhost-net device failed\n"); >>> return -1; >>> } >>> memset(&ifr, 0, sizeof(ifr)); >>> memcpy(ifr.ifr_name, tap_name, sizeof(tap_name)); >>> ifr.ifr_flags = IFF_TAP | IFF_NO_PI; >>> >>> /* >>> * setup tap net device >>> */ >>> if (ioctl(tap_fd, TUNSETIFF, &ifr) < 0) { >>> printf("setup tap net device failed\n"); >>> return -1; >>> } >>> >>> sprintf(brctl, "brctl addif virbr0 %s", tap_name); >>> sprintf(netup, "ifconfig %s up", tap_name); >>> system(brctl); >>> system(netup); >>> >>> Thanks, >>> Wanlong Gao >>> >>> >>>> Thanks >>>>> Thanks, >>>>> Wanlong Gao >>>>> >>>>>>>> + } >>>>>>>> + } >>>>>>>> +} >>>>>>>> + >>>>>>>> +static void virtio_net_set_multiqueue(VirtIONet *n, int multiqueue, int ctrl); >>>>>>>> + >>>>>>> -- >>>>>>> To unsubscribe from this list: send the line "unsubscribe kvm" in >>>>>>> the body of a message to majordomo@xxxxxxxxxxxxxxx >>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html