svn commit: r255140 - in user/syuu/mq_bpf: sbin/ifconfig share/man/man4 share/man/man9 sys/dev/e1000 sys/dev/ixgbe sys/dev/mxge sys/net

Takuya ASADA syuu at FreeBSD.org
Mon Sep 2 05:35:08 UTC 2013


Author: syuu
Date: Mon Sep  2 05:35:06 2013
New Revision: 255140
URL: http://svnweb.freebsd.org/changeset/base/255140

Log:
  use cpuset_t on if_get_rxqueue_affinity/if_get_txqueue_affinity

Modified:
  user/syuu/mq_bpf/sbin/ifconfig/ifconfig.c
  user/syuu/mq_bpf/share/man/man4/netintro.4
  user/syuu/mq_bpf/share/man/man9/ifnet.9
  user/syuu/mq_bpf/sys/dev/e1000/if_igb.c
  user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c
  user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c
  user/syuu/mq_bpf/sys/net/if.c
  user/syuu/mq_bpf/sys/net/if.h
  user/syuu/mq_bpf/sys/net/if_var.h

Modified: user/syuu/mq_bpf/sbin/ifconfig/ifconfig.c
==============================================================================
--- user/syuu/mq_bpf/sbin/ifconfig/ifconfig.c	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/sbin/ifconfig/ifconfig.c	Mon Sep  2 05:35:06 2013	(r255140)
@@ -919,6 +919,25 @@ unsetifdescr(const char *val, int value,
 "\17TOE4\20TOE6\21VLAN_HWFILTER\23VLAN_HWTSO\24LINKSTATE\25NETMAP" \
 "\26RXCSUM_IPV6\27TXCSUM_IPV6\30MULTIQUEUE"
 
+static char *
+cpusetobj_strprint(char *buf, const cpuset_t *set)
+{
+	char *tbuf;
+	size_t i, bytesp, bufsiz;
+
+	tbuf = buf;
+	bytesp = 0;
+	bufsiz = CPUSETBUFSIZ;
+
+	for (i = 0; i < (_NCPUWORDS - 1); i++) {
+		bytesp = snprintf(tbuf, bufsiz, "%lx,", set->__bits[i]);
+		bufsiz -= bytesp;
+		tbuf += bytesp;
+	}
+	snprintf(tbuf, bufsiz, "%lx", set->__bits[_NCPUWORDS - 1]);
+	return (buf);
+}
+
 /*
  * Print the status of the interface.  If an address family was
  * specified, show only it; otherwise, show them all.
@@ -986,6 +1005,7 @@ status(const struct afswtch *afp, const 
 
 	if ((ifr.ifr_reqcap & IFCAP_MULTIQUEUE)) {
 		int i, numrxq = 0, numtxq = 0;
+		char cpus[CPUSETBUFSIZ];
 
 		if (ioctl(s, SIOCGIFQLEN, &ifr) == 0) {
 			numrxq = ifr.ifr_num_rxqueue;
@@ -995,22 +1015,24 @@ status(const struct afswtch *afp, const 
 
 		printf("\tnumber of rxqueues=%d affinity=[", numrxq);
 		for (i = 0; i < numrxq; i++) {
-			ifr.ifr_queue_affinity_index = i;
-			if (ioctl(s, SIOCGIFRXQAFFINITY, &ifr) == 0)
-				printf(" %d:%d", ifr.ifr_queue_affinity_index,
-					ifr.ifr_queue_affinity_cpu);
-			else
+			ifr.ifr_queue_affinity_idx = i;
+			if (ioctl(s, SIOCGIFRXQAFFINITY, &ifr) == 0) {
+				cpusetobj_strprint(cpus, 
+					&ifr.ifr_queue_affinity_cpus);
+				printf(" %d:%s", i, cpus);
+			}else
 				perror("ioctl");
 		}
 		printf(" ]\n");
 
 		printf("\tnumber of txqueues=%d affinity=[", numtxq);
 		for (i = 0; i < numtxq; i++) {
-			ifr.ifr_queue_affinity_index = i;
-			if (ioctl(s, SIOCGIFTXQAFFINITY, &ifr) == 0)
-				printf(" %d:%d", ifr.ifr_queue_affinity_index,
-					ifr.ifr_queue_affinity_cpu);
-			else
+			ifr.ifr_queue_affinity_idx = i;
+			if (ioctl(s, SIOCGIFTXQAFFINITY, &ifr) == 0) {
+				cpusetobj_strprint(cpus, 
+					&ifr.ifr_queue_affinity_cpus);
+				printf(" %d:%s", i, cpus);
+			}else
 				perror("ioctl");
 		}
 		printf(" ]\n");

Modified: user/syuu/mq_bpf/share/man/man4/netintro.4
==============================================================================
--- user/syuu/mq_bpf/share/man/man4/netintro.4	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/share/man/man4/netintro.4	Mon Sep  2 05:35:06 2013	(r255140)
@@ -213,8 +213,12 @@ struct	ifreq {
         int       ifru_media;
         caddr_t   ifru_data;
         int       ifru_cap[2];
-        int       ifru_num_queue[2];
-        int       ifru_queue_affinity[2];
+	u_int     ifru_fib;
+	int       ifru_num_queue[2];
+	struct {
+	          int idx;
+	          cpuset_t cpus;
+	} ifru_queue_affinity;
     } ifr_ifru;
 #define ifr_addr      ifr_ifru.ifru_addr      /* address */
 #define ifr_dstaddr   ifr_ifru.ifru_dstaddr   /* other end of p-to-p link */
@@ -230,10 +234,11 @@ struct	ifreq {
 #define ifr_reqcap    ifr_ifru.ifru_cap[0]    /* requested capabilities */
 #define ifr_curcap    ifr_ifru.ifru_cap[1]    /* current capabilities */
 #define ifr_index     ifr_ifru.ifru_index     /* interface index */
-#define ifr_num_rxqueue	ifr_ifru.ifru_num_queue[0] /* rxqueue len */
-#define ifr_num_txqueue	ifr_ifru.ifru_num_queue[1] /* txqueue len */
-#define ifr_queue_affinity_index ifr_ifru.ifru_queue_affinity[0] /* queue id */
-#define ifr_queue_affinity_cpu ifr_ifru.ifru_queue_affinity[1] /* cpu id */
+#define	ifr_fib		ifr_ifru.ifru_fib	/* interface fib */
+#define ifr_num_rxqueue	ifr_ifru.ifru_num_queue[0] /* number of rxqueues */
+#define ifr_num_txqueue	ifr_ifru.ifru_num_queue[1] /* number of txqueues */
+#define ifr_queue_affinity_idx ifr_ifru.ifru_queue_affinity.idx /* queue index */
+#define ifr_queue_affinity_cpus ifr_ifru.ifru_queue_affinity.cpus /* queue affinity mask */
 };
 .Ed
 .Pp

Modified: user/syuu/mq_bpf/share/man/man9/ifnet.9
==============================================================================
--- user/syuu/mq_bpf/share/man/man9/ifnet.9	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/share/man/man9/ifnet.9	Mon Sep  2 05:35:06 2013	(r255140)
@@ -124,9 +124,9 @@
 .Ft int
 .Fn \*(lp*if_get_num_txqueue\*(rp "struct ifnet *ifp"
 .Ft int
-.Fn \*(lp*if_get_rxqueue_affinity\*(rp "struct ifnet *ifp" "int queid"
+.Fn \*(lp*if_get_rxqueue_affinity\*(rp "struct ifnet *ifp" "int idx" "cpuset_t *cpus"
 .Ft int
-.Fn \*(lp*if_get_txqueue_affinity\*(rp "struct ifnet *ifp" "int queid"
+.Fn \*(lp*if_get_txqueue_affinity\*(rp "struct ifnet *ifp" "int idx" "cpuset_t *cpus"
 .Ss "struct ifaddr member function"
 .Ft void
 .Fo \*(lp*ifa_rtrequest\*(rp

Modified: user/syuu/mq_bpf/sys/dev/e1000/if_igb.c
==============================================================================
--- user/syuu/mq_bpf/sys/dev/e1000/if_igb.c	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/sys/dev/e1000/if_igb.c	Mon Sep  2 05:35:06 2013	(r255140)
@@ -280,8 +280,8 @@ static int	igb_sysctl_eee(SYSCTL_HANDLER
 
 static int	igb_get_num_rxqueue(struct ifnet *);
 static int	igb_get_num_txqueue(struct ifnet *);
-static int	igb_get_rxqueue_affinity(struct ifnet *, int);
-static int	igb_get_txqueue_affinity(struct ifnet *, int);
+static int	igb_get_rxqueue_affinity(struct ifnet *, int, cpuset_t *);
+static int	igb_get_txqueue_affinity(struct ifnet *, int, cpuset_t *);
 
 #ifdef DEVICE_POLLING
 static poll_handler_t igb_poll;
@@ -6081,13 +6081,15 @@ igb_get_num_txqueue(struct ifnet *ifp)
 }
 
 static int
-igb_get_rxqueue_affinity(struct ifnet *ifp, int queid)
+igb_get_rxqueue_affinity(struct ifnet *ifp, int idx, cpuset_t *cpus)
 {
-	return (queid);
+	CPU_SETOF(idx, cpus);
+	return (0);
 }
 
 static int
-igb_get_txqueue_affinity(struct ifnet *ifp, int queid)
+igb_get_txqueue_affinity(struct ifnet *ifp, int idx, cpuset_t *cpus)
 {
-	return (queid);
+	CPU_SETOF(idx, cpus);
+	return (0);
 }

Modified: user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/sys/dev/ixgbe/ixgbe.c	Mon Sep  2 05:35:06 2013	(r255140)
@@ -212,8 +212,8 @@ extern void ixgbe_stop_mac_link_on_d3_82
 
 static int	ixgbe_get_num_rxqueue(struct ifnet *);
 static int	ixgbe_get_num_txqueue(struct ifnet *);
-static int	ixgbe_get_rxqueue_affinity(struct ifnet *, int);
-static int	ixgbe_get_txqueue_affinity(struct ifnet *, int);
+static int	ixgbe_get_rxqueue_affinity(struct ifnet *, int, cpuset_t *);
+static int	ixgbe_get_txqueue_affinity(struct ifnet *, int, cpuset_t *);
 
 
 /*********************************************************************
@@ -5779,15 +5779,17 @@ ixgbe_get_num_txqueue(struct ifnet *ifp)
 }
 
 static int
-ixgbe_get_rxqueue_affinity(struct ifnet *ifp, int queid)
+ixgbe_get_rxqueue_affinity(struct ifnet *ifp, int idx, cpuset_t *cpus)
 {
-	return (queid);
+	CPU_SETOF(idx, cpus);
+	return (0);
 }
 
 static int
-ixgbe_get_txqueue_affinity(struct ifnet *ifp, int queid)
+ixgbe_get_txqueue_affinity(struct ifnet *ifp, int idx, cpuset_t *cpus)
 {
-	return (queid);
+	CPU_SETOF(idx, cpus);
+	return (0);
 }
 
 /*

Modified: user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c
==============================================================================
--- user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/sys/dev/mxge/if_mxge.c	Mon Sep  2 05:35:06 2013	(r255140)
@@ -122,8 +122,8 @@ static void mxge_intr(void *arg);
 
 static int mxge_get_num_rxqueue(struct ifnet *);
 static int mxge_get_num_txqueue(struct ifnet *);
-static int mxge_get_rxqueue_affinity(struct ifnet *, int);
-static int mxge_get_txqueue_affinity(struct ifnet *, int);
+static int mxge_get_rxqueue_affinity(struct ifnet *, int, cpuset_t *);
+static int mxge_get_txqueue_affinity(struct ifnet *, int, cpuset_t *);
 
 static device_method_t mxge_methods[] =
 {
@@ -5060,22 +5060,15 @@ mxge_get_num_txqueue(struct ifnet *ifp)
 }
 
 static int
-mxge_get_rxqueue_affinity(struct ifnet *ifp, int queid)
+mxge_get_rxqueue_affinity(struct ifnet *ifp, int idx, cpuset_t *cpus)
 {
-	return (queid);
+	CPU_SETOF(idx, cpus);
+	return (0);
 }
 
 static int
-mxge_get_txqueue_affinity(struct ifnet *ifp, int queid)
+mxge_get_txqueue_affinity(struct ifnet *ifp, int idx, cpuset_t *cpus)
 {
-	return (queid);
+	CPU_SETOF(idx, cpus);
+	return (0);
 }
-
-/*
-  This file uses Myri10GE driver indentation.
-
-  Local Variables:
-  c-file-style:"linux"
-  tab-width:8
-  End:
-*/

Modified: user/syuu/mq_bpf/sys/net/if.c
==============================================================================
--- user/syuu/mq_bpf/sys/net/if.c	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/sys/net/if.c	Mon Sep  2 05:35:06 2013	(r255140)
@@ -2441,16 +2441,16 @@ ifhwioctl(u_long cmd, struct ifnet *ifp,
 		if (!(ifp->if_capabilities & IFCAP_MULTIQUEUE))
 			return (EOPNOTSUPP);
 		KASSERT(ifp->if_get_rxqueue_affinity, ("if_get_rxqueue_affinity not set"));
-		ifr->ifr_queue_affinity_cpu =
-			ifp->if_get_rxqueue_affinity(ifp, ifr->ifr_queue_affinity_index);
+		ifp->if_get_rxqueue_affinity(ifp, ifr->ifr_queue_affinity_idx, 
+			&ifr->ifr_queue_affinity_cpus);
 		break;
 
 	case SIOCGIFTXQAFFINITY:
 		if (!(ifp->if_capabilities & IFCAP_MULTIQUEUE))
 			return (EOPNOTSUPP);
 		KASSERT(ifp->if_get_rxqueue_affinity, ("if_get_rxqueue_affinity not set"));
-		ifr->ifr_queue_affinity_cpu = 
-			ifp->if_get_rxqueue_affinity(ifp, ifr->ifr_queue_affinity_index);
+		ifp->if_get_txqueue_affinity(ifp, ifr->ifr_queue_affinity_idx, 
+			&ifr->ifr_queue_affinity_cpus);
 		break;
 
 	default:

Modified: user/syuu/mq_bpf/sys/net/if.h
==============================================================================
--- user/syuu/mq_bpf/sys/net/if.h	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/sys/net/if.h	Mon Sep  2 05:35:06 2013	(r255140)
@@ -49,6 +49,8 @@
 #include <sys/time.h>
 #include <sys/socket.h>
 #endif
+#include <sys/param.h>
+#include <sys/cpuset.h>
 
 struct ifnet;
 #endif
@@ -387,7 +389,10 @@ struct	ifreq {
 		int	ifru_cap[2];
 		u_int	ifru_fib;
 		int	ifru_num_queue[2];
-		int	ifru_queue_affinity[2];
+		struct {
+			int idx;
+			cpuset_t cpus;
+		} ifru_queue_affinity;
 	} ifr_ifru;
 #define	ifr_addr	ifr_ifru.ifru_addr	/* address */
 #define	ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-to-p link */
@@ -405,11 +410,10 @@ struct	ifreq {
 #define	ifr_curcap	ifr_ifru.ifru_cap[1]	/* current capabilities */
 #define	ifr_index	ifr_ifru.ifru_index	/* interface index */
 #define	ifr_fib		ifr_ifru.ifru_fib	/* interface fib */
-#define ifr_num_rxqueue	ifr_ifru.ifru_num_queue[0] /* rxqueue len */
-#define ifr_num_txqueue	ifr_ifru.ifru_num_queue[1] /* txqueue len */
-#define ifr_queue_affinity_index ifr_ifru.ifru_queue_affinity[0] /* queue id */
-#define ifr_queue_affinity_cpu ifr_ifru.ifru_queue_affinity[1] /* cpu id */
-
+#define ifr_num_rxqueue	ifr_ifru.ifru_num_queue[0] /* number of rxqueues */
+#define ifr_num_txqueue	ifr_ifru.ifru_num_queue[1] /* number of txqueues */
+#define ifr_queue_affinity_idx ifr_ifru.ifru_queue_affinity.idx /* queue index */
+#define ifr_queue_affinity_cpus ifr_ifru.ifru_queue_affinity.cpus /* queue affinity mask */
 };
 
 #define	_SIZEOF_ADDR_IFREQ(ifr) \

Modified: user/syuu/mq_bpf/sys/net/if_var.h
==============================================================================
--- user/syuu/mq_bpf/sys/net/if_var.h	Sun Sep  1 23:49:36 2013	(r255139)
+++ user/syuu/mq_bpf/sys/net/if_var.h	Mon Sep  2 05:35:06 2013	(r255140)
@@ -181,9 +181,9 @@ struct ifnet {
 	int	(*if_get_num_txqueue)
 		(struct ifnet *);
 	int	(*if_get_rxqueue_affinity)
-		(struct ifnet *, int);
+		(struct ifnet *, int, cpuset_t *);
 	int	(*if_get_txqueue_affinity)
-		(struct ifnet *, int);
+		(struct ifnet *, int, cpuset_t *);
 
 	struct	vnet *if_home_vnet;	/* where this ifnet originates from */
 	struct	ifaddr	*if_addr;	/* pointer to link-level address */


More information about the svn-src-user mailing list