|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 2/4] xen-netback: Add support for multiple queues
On 16/01/14 10:28, Paul Durrant wrote: -----Original Message----- From: Andrew J. Bennieston [mailto:andrew.bennieston@xxxxxxxxxx] Sent: 15 January 2014 16:23 To: xen-devel@xxxxxxxxxxxxxxxxxxxx Cc: Ian Campbell; Wei Liu; Paul Durrant; Andrew Bennieston Subject: [PATCH RFC 2/4] xen-netback: Add support for multiple queues From: "Andrew J. Bennieston" <andrew.bennieston@xxxxxxxxxx> Builds on the refactoring of the previous patch to implement multiple queues between xen-netfront and xen-netback. Writes the maximum supported number of queues into XenStore, and reads the values written by the frontend to determine how many queues to use. Ring references and event channels are read from XenStore on a per-queue basis and rings are connected accordingly. Signed-off-by: Andrew J. Bennieston <andrew.bennieston@xxxxxxxxxx> --- drivers/net/xen-netback/common.h | 2 + drivers/net/xen-netback/interface.c | 8 +++- drivers/net/xen-netback/netback.c | 3 ++ drivers/net/xen-netback/xenbus.c | 70 ++++++++++++++++++++++++++++++----- 4 files changed, 72 insertions(+), 11 deletions(-) diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen- netback/common.h index 54d2eeb..97efd09 100644 --- a/drivers/net/xen-netback/common.h +++ b/drivers/net/xen-netback/common.h @@ -254,4 +254,6 @@ void xenvif_carrier_on(struct xenvif *vif); extern bool separate_tx_rx_irq; +extern unsigned int xenvif_max_queues; + #endif /* __XEN_NETBACK__COMMON_H__ */ diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen- netback/interface.c index 0113324..0234ff0 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c @@ -355,7 +355,13 @@ struct xenvif *xenvif_alloc(struct device *parent, domid_t domid, char name[IFNAMSIZ] = {}; snprintf(name, IFNAMSIZ - 1, "vif%u.%u", domid, handle); - dev = alloc_netdev_mq(sizeof(struct xenvif), name, ether_setup, 1); + /* + * Allocate a netdev with the max. supported number of queues. + * When the guest selects the desired number, it will be updated + * via netif_set_real_num_tx_queues(). + */ + dev = alloc_netdev_mq(sizeof(struct xenvif), name, ether_setup, + xenvif_max_queues); if (dev == NULL) { pr_warn("Could not allocate netdev for %s\n", name); return ERR_PTR(-ENOMEM); diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen- netback/netback.c index 586e741..5d717d7 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c @@ -55,6 +55,9 @@ bool separate_tx_rx_irq = 1; module_param(separate_tx_rx_irq, bool, 0644); +unsigned int xenvif_max_queues = 4; +module_param(xenvif_max_queues, uint, 0644); + /* * This is the maximum slots a skb can have. If a guest sends a skb * which exceeds this limit it is considered malicious. diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen- netback/xenbus.c index c3332e2..ce7ca9a 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c @@ -21,6 +21,7 @@ #include "common.h" #include <linux/vmalloc.h> +#include <linux/rtnetlink.h> struct backend_info { struct xenbus_device *dev; @@ -160,6 +161,14 @@ static int netback_probe(struct xenbus_device *dev, if (err) pr_debug("Error writing feature-split-event-channels\n"); + /* + * Multi-queue support: This is an optional feature. + */Comment style. Did you run checkpatch? Yes, I'll change this to a defined constant. Andrew
_______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |