From owner-p4-projects@FreeBSD.ORG Fri Jun 3 06:27:33 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 693081065674; Fri, 3 Jun 2011 06:27:33 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 20EB51065670 for ; Fri, 3 Jun 2011 06:27:33 +0000 (UTC) (envelope-from syuu@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 0FC368FC1C for ; Fri, 3 Jun 2011 06:27:33 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p536RWCN016676 for ; Fri, 3 Jun 2011 06:27:32 GMT (envelope-from syuu@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p536RWeU016673 for perforce@freebsd.org; Fri, 3 Jun 2011 06:27:32 GMT (envelope-from syuu@FreeBSD.org) Date: Fri, 3 Jun 2011 06:27:32 GMT Message-Id: <201106030627.p536RWeU016673@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to syuu@FreeBSD.org using -f From: Takuya ASADA To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194139 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Jun 2011 06:27:33 -0000 http://p4web.freebsd.org/@@194139?ac=10 Change 194139 by syuu@x200 on 2011/06/03 06:26:46 implement queue affinity ioctl Affected files ... .. //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_em.c#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_igb.c#3 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#5 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/if_var.h#4 edit Differences ... ==== //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_em.c#2 (text+ko) ==== @@ -436,7 +436,7 @@ { struct adapter *adapter; struct e1000_hw *hw; - int error = 0; + int error = 0, i; INIT_DEBUGOUT("em_attach: begin"); @@ -685,7 +685,18 @@ adapter->led_dev = led_create(em_led_func, adapter, device_get_nameunit(dev)); - + adapter->ifp->if_rxq_num = adapter->num_queues; + adapter->ifp->if_txq_num = adapter->num_queues; + adapter->ifp->if_rxq_affinity = + (u_long *)malloc(sizeof(u_long) * adapter->num_queues, + M_DEVBUF, M_NOWAIT); + adapter->ifp->if_txq_affinity = + (u_long *)malloc(sizeof(u_long) * adapter->num_queues, + M_DEVBUF, M_NOWAIT); + for (i = 0; i < adapter->num_queues; i++) { + adapter->ifp->if_rxq_affinity[i] = i; + adapter->ifp->if_rxq_affinity[i] = i; + } INIT_DEBUGOUT("em_attach: end"); return (0); @@ -864,6 +875,10 @@ } enq++; drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags); + + next->m_pkthdr.rxqid = (uint32_t)-1; + next->m_pkthdr.txqid = txr->me; + ETHER_BPF_MTAP(ifp, next); if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) break; @@ -4289,6 +4304,8 @@ sendmp->m_pkthdr.flowid = rxr->msix; sendmp->m_flags |= M_FLOWID; #endif + sendmp->m_pkthdr.rxqid = rxr->msix; + sendmp->m_pkthdr.txqid = (uint32_t)-1; #ifndef __NO_STRICT_ALIGNMENT skip: #endif ==== //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_igb.c#3 (text+ko) ==== @@ -426,7 +426,7 @@ igb_attach(device_t dev) { struct adapter *adapter; - int error = 0; + int error = 0, i; u16 eeprom_data; INIT_DEBUGOUT("igb_attach: begin"); @@ -651,9 +651,18 @@ adapter->led_dev = led_create(igb_led_func, adapter, device_get_nameunit(dev)); - adapter->ifp->if_rxq_num = adapter->num_queues; adapter->ifp->if_txq_num = adapter->num_queues; + adapter->ifp->if_rxq_affinity = + (u_long *)malloc(sizeof(u_long) * adapter->num_queues, + M_DEVBUF, M_NOWAIT); + adapter->ifp->if_txq_affinity = + (u_long *)malloc(sizeof(u_long) * adapter->num_queues, + M_DEVBUF, M_NOWAIT); + for (i = 0; i < adapter->num_queues; i++) { + adapter->ifp->if_rxq_affinity[i] = i; + adapter->ifp->if_rxq_affinity[i] = i; + } INIT_DEBUGOUT("igb_attach: end"); return (0); ==== //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#5 (text+ko) ==== @@ -1533,17 +1533,63 @@ break; } - /* XXX: not implemented yet */ case BIOCRXQAFFINITY: - log(LOG_DEBUG, "BIOCRXQAFFINITY\n"); - error = EINVAL; - break; + { + u_long index; + log(LOG_DEBUG, "BIOCRXQAFFINITY\n"); + if (d->bd_bif == NULL) { + log(LOG_DEBUG, "d->bd_bif == NULL\n"); + /* + * No interface attached yet. + */ + error = EINVAL; + break; + } + struct ifnet *const ifp = d->bd_bif->bif_ifp; + index = *(u_long *)addr; + if (index > ifp->if_rxq_num) { + log(LOG_DEBUG, "index too large\n"); + error = EINVAL; + break; + } + if (!ifp->if_rxq_affinity) { + log(LOG_DEBUG, "!ifp->if_rxq_affinity\n"); + error = EINVAL; + break; + } + *(u_long *)addr = ifp->if_rxq_affinity[index]; + log(LOG_DEBUG, "index:%lu result:%lu\n", index, *(u_long *)addr); + break; + } - /* XXX: not implemented yet */ case BIOCTXQAFFINITY: - log(LOG_DEBUG, "BIOCTXQAFFINITY\n"); - error = EINVAL; - break; + { + u_long index; + log(LOG_DEBUG, "BIOCTXQAFFINITY\n"); + if (d->bd_bif == NULL) { + log(LOG_DEBUG, "d->bd_bif == NULL\n"); + /* + * No interface attached yet. + */ + error = EINVAL; + break; + } + struct ifnet *const ifp = d->bd_bif->bif_ifp; + index = *(u_long *)addr; + if (index > ifp->if_txq_num) { + log(LOG_DEBUG, "index too large\n"); + error = EINVAL; + break; + } + if (!ifp->if_txq_affinity) { + log(LOG_DEBUG, "!ifp->if_txq_affinity\n"); + error = EINVAL; + break; + } + *(u_long *)addr = ifp->if_txq_affinity[index]; + log(LOG_DEBUG, "index:%lu result:%lu\n", index, *(u_long *)addr); + break; + } case BIOCENAQMASK: { ==== //depot/projects/soc2011/mq_bpf/src/sys/net/if_var.h#4 (text+ko) ==== @@ -209,6 +209,8 @@ int if_rxq_num; int if_txq_num; + u_long *if_rxq_affinity; + u_long *if_txq_affinity; }; typedef void if_init_f_t(void *);