qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [COMMIT ffe6370] qemu/net: flag to control the number of


From: Anthony Liguori
Subject: [Qemu-commits] [COMMIT ffe6370] qemu/net: flag to control the number of vectors anic has
Date: Tue, 30 Jun 2009 00:57:24 -0000

From: Michael S. Tsirkin <address@hidden>

Add an option to specify the number of MSI-X vectors for PCI NIC cards. This
can also be used to disable MSI-X, for compatibility with old qemu. This
option currently only affects virtio cards.

Signed-off-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>

diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 29a1272..7a7eafe 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -745,7 +745,10 @@ VirtIODevice *virtio_net_init(DeviceState *dev)
     n->mac_table.macs = qemu_mallocz(MAC_TABLE_ENTRIES * ETH_ALEN);
 
     n->vlans = qemu_mallocz(MAX_VLAN >> 3);
-    n->vdev.nvectors = 3;
+    if (dev->nd->nvectors == NIC_NVECTORS_UNSPECIFIED)
+        n->vdev.nvectors = 3;
+    else
+        n->vdev.nvectors = dev->nd->nvectors;
 
     register_savevm("virtio-net", virtio_net_id++, VIRTIO_NET_VM_VERSION,
                     virtio_net_save, virtio_net_load, n);
diff --git a/net.c b/net.c
index 55f70f2..4ca2817 100644
--- a/net.c
+++ b/net.c
@@ -2169,7 +2169,7 @@ int net_client_init(Monitor *mon, const char *device, 
const char *p)
     }
     if (!strcmp(device, "nic")) {
         static const char * const nic_params[] = {
-            "vlan", "name", "macaddr", "model", "addr", NULL
+            "vlan", "name", "macaddr", "model", "addr", "vectors", NULL
         };
         NICInfo *nd;
         uint8_t *macaddr;
@@ -2207,6 +2207,22 @@ int net_client_init(Monitor *mon, const char *device, 
const char *p)
         if (get_param_value(buf, sizeof(buf), "addr", p)) {
             nd->devaddr = strdup(buf);
         }
+        nd->nvectors = NIC_NVECTORS_UNSPECIFIED;
+        if (get_param_value(buf, sizeof(buf), "vectors", p)) {
+            char *endptr;
+            long vectors = strtol(buf, &endptr, 0);
+            if (*endptr) {
+                config_error(mon, "invalid syntax for # of vectors\n");
+                ret = -1;
+                goto out;
+            }
+            if (vectors < 0 || vectors > 0x7ffffff) {
+                config_error(mon, "invalid # of vectors\n");
+                ret = -1;
+                goto out;
+            }
+            nd->nvectors = vectors;
+        }
         nd->vlan = vlan;
         nd->name = name;
         nd->used = 1;
diff --git a/net.h b/net.h
index a1c4d2c..6ba3624 100644
--- a/net.h
+++ b/net.h
@@ -84,6 +84,9 @@ int do_set_link(Monitor *mon, const char *name, const char 
*up_or_down);
 /* NIC info */
 
 #define MAX_NICS 8
+enum {
+       NIC_NVECTORS_UNSPECIFIED = -1
+};
 
 struct NICInfo {
     uint8_t macaddr[6];
@@ -94,6 +97,7 @@ struct NICInfo {
     void *private;
     int used;
     int bootable;
+    int nvectors;
 };
 
 extern int nb_nics;
diff --git a/qemu-options.hx b/qemu-options.hx
index 503da33..fb1e7a6 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -736,7 +736,7 @@ STEXI
 ETEXI
 
 DEF("net", HAS_ARG, QEMU_OPTION_net,
-    "-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str]\n"
+    "-net 
nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]\n"
     "                create a new Network Interface Card and connect it to 
VLAN 'n'\n"
 #ifdef CONFIG_SLIRP
     "-net user[,vlan=n][,name=str][,hostname=host]\n"
@@ -777,16 +777,18 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
     "-net none       use it alone to have zero network devices; if no -net 
option\n"
     "                is provided, the default is '-net nic -net user'\n")
 STEXI
address@hidden -net 
nic[,address@hidden,address@hidden,address@hidden,address@hidden,address@hidden
address@hidden -net 
nic[,address@hidden,address@hidden,address@hidden,address@hidden,address@hidden,address@hidden
 Create a new Network Interface Card and connect it to VLAN @var{n} (@var{n}
 = 0 is the default). The NIC is an ne2k_pci by default on the PC
 target. Optionally, the MAC address can be changed to @var{mac}, the
 device address set to @var{addr} (PCI cards only),
-and a @var{name} can be assigned for use in monitor commands. If no
address@hidden option is specified, a single NIC is created.
-Qemu can emulate several different models of network card.
+and a @var{name} can be assigned for use in monitor commands.
+Optionally, for PCI cards, you can specify the number @var{v} of MSI-X vectors
+that the card should have; this option currently only affects virtio cards; set
address@hidden = 0 to disable MSI-X. If no @option{-net} option is specified, a 
single
+NIC is created.  Qemu can emulate several different models of network card.
 Valid values for @var{type} are
address@hidden, @code{i82557b}, @code{i82559er},
address@hidden, @code{i82551}, @code{i82557b}, @code{i82559er},
 @code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139},
 @code{e1000}, @code{smc91c111}, @code{lance} and @code{mcf_fec}.
 Not all devices are supported on all targets.  Use -net nic,model=?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]