From owner-p4-projects@FreeBSD.ORG Thu Aug 11 12:43:46 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 61B001065670; Thu, 11 Aug 2011 12:43:46 +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 2411D1065673 for ; Thu, 11 Aug 2011 12:43:46 +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 117BA8FC15 for ; Thu, 11 Aug 2011 12:43:46 +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 p7BChjDS011455 for ; Thu, 11 Aug 2011 12:43:45 GMT (envelope-from syuu@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p7BChjTL011452 for perforce@freebsd.org; Thu, 11 Aug 2011 12:43:45 GMT (envelope-from syuu@FreeBSD.org) Date: Thu, 11 Aug 2011 12:43:45 GMT Message-Id: <201108111243.p7BChjTL011452@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 197505 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: Thu, 11 Aug 2011 12:43:46 -0000 http://p4web.freebsd.org/@@197505?ac=10 Change 197505 by syuu@kikurage on 2011/08/11 12:42:40 mq_bpf support for mxge Affected files ... .. //depot/projects/soc2011/mq_bpf/src/sys/dev/mxge/if_mxge.c#2 edit .. //depot/projects/soc2011/mq_bpf/src/tools/regression/bpf/mq_bpf/test_sqbpf/test_sqbpf.c#4 edit Differences ... ==== //depot/projects/soc2011/mq_bpf/src/sys/dev/mxge/if_mxge.c#2 (text+ko) ==== @@ -119,6 +119,11 @@ static int mxge_shutdown(device_t dev); static void mxge_intr(void *arg); +static int mxge_get_rxqueue_len(struct ifnet *); +static int mxge_get_txqueue_len(struct ifnet *); +static int mxge_get_rxqueue_affinity(struct ifnet *, int); +static int mxge_get_txqueue_affinity(struct ifnet *, int); + static device_method_t mxge_methods[] = { /* Device interface */ @@ -2231,6 +2236,9 @@ if (m == NULL) { return; } + m->m_pkthdr.rxqueue = (uint32_t)-1; + m->m_pkthdr.txqueue = (ss - sc->ss); + /* let BPF see it */ BPF_MTAP(ifp, m); @@ -2265,6 +2273,9 @@ if (!drbr_needs_enqueue(ifp, tx->br) && ((tx->mask - (tx->req - tx->done)) > tx->max_desc)) { + m->m_pkthdr.rxqueue = (uint32_t)-1; + m->m_pkthdr.txqueue = (ss - sc->ss); + /* let BPF see it */ BPF_MTAP(ifp, m); /* give it to the nic */ @@ -2603,6 +2614,8 @@ if (sc->num_slices > 1) { m->m_pkthdr.flowid = (ss - sc->ss); m->m_flags |= M_FLOWID; + m->m_pkthdr.rxqueue = (ss - sc->ss); + m->m_pkthdr.txqueue = (uint32_t)-1; } /* pass the frame up the stack */ (*ifp->if_input)(ifp, m); @@ -4355,6 +4368,7 @@ /* see how many MSI-X interrupts are available */ msix_cnt = pci_msix_count(sc->dev); + printf("%s: msix_cnt:%d\n", __func__, msix_cnt); if (msix_cnt < 2) return; @@ -4364,6 +4378,7 @@ sc->fw_name = mxge_fw_rss_aligned; else sc->fw_name = mxge_fw_rss_unaligned; + printf("%s: fw aligned?:%d\n", __func__, old_fw == mxge_fw_aligned); status = mxge_load_firmware(sc, 0); if (status != 0) { device_printf(sc->dev, "Falling back to a single slice\n"); @@ -4389,6 +4404,7 @@ /* tell it the size of the interrupt queues */ cmd.data0 = max_intr_slots * sizeof (struct mcp_slot); + printf("%s: intrq_size:%d\n", __func__, cmd.data0); status = mxge_send_cmd(sc, MXGEFW_CMD_SET_INTRQ_SIZE, &cmd); if (status != 0) { device_printf(sc->dev, "failed MXGEFW_CMD_SET_INTRQ_SIZE\n"); @@ -4402,6 +4418,7 @@ "failed MXGEFW_CMD_GET_MAX_RSS_QUEUES\n"); goto abort_with_fw; } + printf("%s: max_rss_queues:%d\n", __func__, cmd.data0); sc->num_slices = cmd.data0; if (sc->num_slices > msix_cnt) sc->num_slices = msix_cnt; @@ -4790,6 +4807,7 @@ sc->fw_ver_tiny >= 32) ifp->if_capabilities |= IFCAP_VLAN_HWTSO; #endif + ifp->if_capabilities |= IFCAP_MULTIQUEUE; sc->max_mtu = mxge_max_mtu(sc); if (sc->max_mtu >= 9000) @@ -4808,6 +4826,11 @@ ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = mxge_ioctl; ifp->if_start = mxge_start; + ifp->if_get_rxqueue_len = mxge_get_rxqueue_len; + ifp->if_get_txqueue_len = mxge_get_txqueue_len; + ifp->if_get_rxqueue_affinity = mxge_get_rxqueue_affinity; + ifp->if_get_txqueue_affinity = mxge_get_txqueue_affinity; + /* Initialise the ifmedia structure */ ifmedia_init(&sc->media, 0, mxge_media_change, mxge_media_status); @@ -4904,6 +4927,33 @@ return 0; } + +static int +mxge_get_rxqueue_len(struct ifnet *ifp) +{ + mxge_softc_t *sc = ifp->if_softc; + return (sc->num_slices); +} + +static int +mxge_get_txqueue_len(struct ifnet *ifp) +{ + mxge_softc_t *sc = ifp->if_softc; + return (sc->num_slices); +} + +static int +mxge_get_rxqueue_affinity(struct ifnet *ifp, int queid) +{ + return (queid); +} + +static int +mxge_get_txqueue_affinity(struct ifnet *ifp, int queid) +{ + return (queid); +} + /* This file uses Myri10GE driver indentation. ==== //depot/projects/soc2011/mq_bpf/src/tools/regression/bpf/mq_bpf/test_sqbpf/test_sqbpf.c#4 (text+ko) ==== @@ -311,10 +311,23 @@ static int bpf_zbuf_init(struct bpf_zbuf *bz) { - int bmode; + int bmode, zmax; if ((bflag % getpagesize()) != 0) errx(1, "-b must be multiple of system page size"); + bmode = BPF_BUFMODE_ZBUF; + if (ioctl(bpffd, BIOCSETBUFMODE, &bmode) < 0) + err(1, "ioctl(BIOCGSETBUFMODE)"); +#if 0 + if (ioctl(bpffd, BIOCGETZMAX, &zmax) < 0) + err(1, "ioctl(BIOCGETZMAX)"); + if (bflag > zmax) { + (void) fprintf(stderr, + "buffer size is too big, truncated to %d\n", + zmax); + bflag = zmax; + } +#endif bz->bz_buflen = bflag; bufa = mmap(NULL, bz->bz_buflen, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0); @@ -326,9 +339,6 @@ err(1, "mmap(bufb)"); bz->bz_bufa = bufa; bz->bz_bufb = bufb; - bmode = BPF_BUFMODE_ZBUF; - if (ioctl(bpffd, BIOCSETBUFMODE, &bmode) < 0) - err(1, "ioctl(BIOCGSETBUFMODE)"); if (ioctl(bpffd, BIOCSETZBUF, bz) < 0) err(1, "ioctl(BIOCSETZBUF)"); if (vflag)