Date: Mon, 10 May 2010 16:20:27 GMT From: Ilya Bakulin <kibab@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 178044 for review Message-ID: <201005101620.o4AGKRBi018442@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@178044?ac=10 Change 178044 by kibab@kibab_kibab-nb on 2010/05/10 16:20:20 Merge latest changes from -CURRENT. Affected files ... .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/amd64/amd64/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/arm/arm/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/bce/if_bce.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/e1000/e1000_phy.c#1 branch .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/fxp/if_fxp.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/fxp/if_fxpreg.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/fxp/if_fxpvar.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/iwn/if_iwn.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/mxge/if_mxge.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/re/if_re.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/usb/wlan/if_rum.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/devfs/devfs_devs.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/devfs/devfs_int.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/msdosfs/msdosfs_vnops.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/nfs/nfs_commonkrpc.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/nfs/nfskpiport.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/nfs/nfsport.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/nfsclient/nfs_clbio.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/nwfs/nwfs_io.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/procfs/procfs_ctl.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/smbfs/smbfs_io.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/tmpfs/tmpfs_vnops.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/geom/vinum/geom_vinum_var.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/i386/i386/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/i386/xen/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ia64/ia64/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/kern_conf.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/kern_exec.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/subr_uio.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/sys_pipe.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/uipc_cow.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/uipc_syscalls.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/vfs_bio.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/kern/vfs_vnops.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/mips/mips/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/net/bpf_zerocopy.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/netgraph/ng_ksocket.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/netinet6/in6_proto.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/netinet6/ip6_input.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/netinet6/ip6_output.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/netinet6/udp6_usrreq.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/nfsclient/nfs_bio.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/powerpc/aim/mmu_oea.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/powerpc/aim/mmu_oea64.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/powerpc/booke/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/sparc64/sparc64/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/sun4v/sun4v/pmap.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/sys/conf.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/sys/mbuf.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/sys/param.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/sys/vmmeter.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/sys/vnode.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ufs/ffs/ffs_snapshot.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ufs/ffs/ffs_softdep.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ufs/ffs/ffs_vnops.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ufs/ufs/quota.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ufs/ufs/ufs_quota.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ufs/ufs/ufs_vfsops.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/ufs/ufs/ufsmount.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/device_pager.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/sg_pager.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/swap_pager.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vm_contig.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vm_fault.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vm_glue.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vm_object.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vm_page.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vm_page.h#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vm_pageout.c#2 integrate .. //depot/projects/soc2010/kibab_sysctlreg/src_sys/vm/vnode_pager.c#2 integrate Differences ... ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/amd64/amd64/pmap.c#2 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.694 2010/04/30 00:46:43 kmacy Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.696 2010/05/08 20:34:01 alc Exp $"); /* * Manages physical address maps. @@ -2796,7 +2796,7 @@ KASSERT((m->flags & PG_FICTITIOUS) == 0, ("pmap_remove_all: page %p is fictitious", m)); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + vm_page_lock_queues(); pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); while ((pv = TAILQ_FIRST(&pvh->pv_list)) != NULL) { pmap = PV_PMAP(pv); @@ -2834,6 +2834,7 @@ PMAP_UNLOCK(pmap); } vm_page_flag_clear(m, PG_WRITEABLE); + vm_page_unlock_queues(); } /* @@ -3414,8 +3415,10 @@ pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot) { + vm_page_lock_queues(); PMAP_LOCK(pmap); - (void) pmap_enter_quick_locked(pmap, va, m, prot, NULL); + (void)pmap_enter_quick_locked(pmap, va, m, prot, NULL); + vm_page_unlock_queues(); PMAP_UNLOCK(pmap); } @@ -3926,8 +3929,11 @@ count = 0; if ((m->flags & PG_FICTITIOUS) != 0) return (count); + vm_page_lock_queues(); count = pmap_pvh_wired_mappings(&m->md, count); - return (pmap_pvh_wired_mappings(pa_to_pvh(VM_PAGE_TO_PHYS(m)), count)); + count = pmap_pvh_wired_mappings(pa_to_pvh(VM_PAGE_TO_PHYS(m)), count); + vm_page_unlock_queues(); + return (count); } /* @@ -3961,16 +3967,15 @@ boolean_t pmap_page_is_mapped(vm_page_t m) { - struct md_page *pvh; + boolean_t rv; if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) != 0) return (FALSE); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); - if (TAILQ_EMPTY(&m->md.pv_list)) { - pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); - return (!TAILQ_EMPTY(&pvh->pv_list)); - } else - return (TRUE); + vm_page_lock_queues(); + rv = !TAILQ_EMPTY(&m->md.pv_list) || + !TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list); + vm_page_unlock_queues(); + return (rv); } /* @@ -4238,7 +4243,7 @@ if ((m->flags & PG_FICTITIOUS) != 0 || (m->flags & PG_WRITEABLE) == 0) return; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + vm_page_lock_queues(); pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); TAILQ_FOREACH_SAFE(pv, &pvh->pv_list, pv_list, next_pv) { pmap = PV_PMAP(pv); @@ -4269,6 +4274,7 @@ PMAP_UNLOCK(pmap); } vm_page_flag_clear(m, PG_WRITEABLE); + vm_page_unlock_queues(); } /* ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/arm/arm/pmap.c#2 (text+ko) ==== @@ -140,7 +140,7 @@ #include "opt_vm.h" #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.121 2010/04/30 00:46:43 kmacy Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.122 2010/05/08 20:34:01 alc Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> @@ -3118,18 +3118,11 @@ pmap_t curpm; int flags = 0; -#if defined(PMAP_DEBUG) - /* - * XXX This makes pmap_remove_all() illegal for non-managed pages! - */ - if (m->flags & PG_FICTITIOUS) { - panic("pmap_remove_all: illegal for unmanaged page, va: 0x%x", VM_PAGE_TO_PHYS(m)); - } -#endif - + KASSERT((m->flags & PG_FICTITIOUS) == 0, + ("pmap_remove_all: page %p is fictitious", m)); if (TAILQ_EMPTY(&m->md.pv_list)) return; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + vm_page_lock_queues(); pmap_remove_write(m); curpm = vmspace_pmap(curproc->p_vmspace); while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) { @@ -3180,6 +3173,7 @@ pmap_tlb_flushD(curpm); } vm_page_flag_clear(m, PG_WRITEABLE); + vm_page_unlock_queues(); } @@ -3615,9 +3609,11 @@ pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot) { + vm_page_lock_queues(); PMAP_LOCK(pmap); pmap_enter_locked(pmap, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), FALSE, M_NOWAIT); + vm_page_unlock_queues(); PMAP_UNLOCK(pmap); } @@ -4450,10 +4446,11 @@ count = 0; if ((m->flags & PG_FICTITIOUS) != 0) return (count); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + vm_page_lock_queues(); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) if ((pv->pv_flags & PVF_WIRED) != 0) count++; + vm_page_unlock_queues(); return (count); } @@ -4530,8 +4527,11 @@ pmap_remove_write(vm_page_t m) { - if (m->flags & PG_WRITEABLE) + if (m->flags & PG_WRITEABLE) { + vm_page_lock_queues(); pmap_clearbit(m, PVF_WRITE); + vm_page_unlock_queues(); + } } ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#2 (text+ko) ==== @@ -3977,6 +3977,9 @@ } */ *ap; { + if (vn_rlimit_fsize(ap->a_vp, ap->a_uio, ap->a_uio->uio_td)) + return (EFBIG); + return (zfs_write(ap->a_vp, ap->a_uio, ap->a_ioflag, ap->a_cred, NULL)); } ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/bce/if_bce.c#2 (text) ==== @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.69 2010/04/30 02:35:46 davidch Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.70 2010/05/07 22:09:17 fabient Exp $"); /* * The following controllers are supported by this driver: @@ -5059,11 +5059,8 @@ #ifdef BCE_JUMBO_HDRSPLIT MGETHDR(m_new, M_DONTWAIT, MT_DATA); #else - if (sc->rx_bd_mbuf_alloc_size <= MCLBYTES) - m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); - else - m_new = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, - sc->rx_bd_mbuf_alloc_size); + m_new = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, + sc->rx_bd_mbuf_alloc_size); #endif if (m_new == NULL) { ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/fxp/if_fxp.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/fxp/if_fxp.c,v 1.299 2010/04/19 22:10:40 yongari Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/fxp/if_fxp.c,v 1.302 2010/05/09 22:16:15 yongari Exp $"); /* * Intel EtherExpress Pro/100B PCI Fast Ethernet driver @@ -106,9 +106,8 @@ /* * The configuration byte map has several undefined fields which - * must be one or must be zero. Set up a template for these bits - * only, (assuming a 82557 chip) leaving the actual configuration - * to fxp_init. + * must be one or must be zero. Set up a template for these bits. + * The actual configuration is performed in fxp_init. * * See struct fxp_cb_config for the bit definitions. */ @@ -137,7 +136,17 @@ 0xf0, /* 18 */ 0x0, /* 19 */ 0x3f, /* 20 */ - 0x5 /* 21 */ + 0x5, /* 21 */ + 0x0, /* 22 */ + 0x0, /* 23 */ + 0x0, /* 24 */ + 0x0, /* 25 */ + 0x0, /* 26 */ + 0x0, /* 27 */ + 0x0, /* 28 */ + 0x0, /* 29 */ + 0x0, /* 30 */ + 0x0 /* 31 */ }; /* @@ -253,6 +262,8 @@ static int fxp_miibus_writereg(device_t dev, int phy, int reg, int value); static void fxp_load_ucode(struct fxp_softc *sc); +static void fxp_update_stats(struct fxp_softc *sc); +static void fxp_sysctl_node(struct fxp_softc *sc); static int sysctl_int_range(SYSCTL_HANDLER_ARGS, int low, int high); static int sysctl_hw_fxp_bundle_max(SYSCTL_HANDLER_ARGS); @@ -528,40 +539,8 @@ && (data & FXP_PHY_SERIAL_ONLY)) sc->flags |= FXP_FLAG_SERIAL_MEDIA; - SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), - OID_AUTO, "int_delay", CTLTYPE_INT | CTLFLAG_RW, - &sc->tunable_int_delay, 0, sysctl_hw_fxp_int_delay, "I", - "FXP driver receive interrupt microcode bundling delay"); - SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), - OID_AUTO, "bundle_max", CTLTYPE_INT | CTLFLAG_RW, - &sc->tunable_bundle_max, 0, sysctl_hw_fxp_bundle_max, "I", - "FXP driver receive interrupt microcode bundle size limit"); - SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), - OID_AUTO, "rnr", CTLFLAG_RD, &sc->rnr, 0, - "FXP RNR events"); - SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), - OID_AUTO, "noflow", CTLFLAG_RW, &sc->tunable_noflow, 0, - "FXP flow control disabled"); - + fxp_sysctl_node(sc); /* - * Pull in device tunables. - */ - sc->tunable_int_delay = TUNABLE_INT_DELAY; - sc->tunable_bundle_max = TUNABLE_BUNDLE_MAX; - sc->tunable_noflow = 1; - (void) resource_int_value(device_get_name(dev), device_get_unit(dev), - "int_delay", &sc->tunable_int_delay); - (void) resource_int_value(device_get_name(dev), device_get_unit(dev), - "bundle_max", &sc->tunable_bundle_max); - (void) resource_int_value(device_get_name(dev), device_get_unit(dev), - "noflow", &sc->tunable_noflow); - sc->rnr = 0; - - /* * Enable workarounds for certain chip revision deficiencies. * * Systems based on the ICH2/ICH2-M chip from Intel, and possibly @@ -2011,6 +1990,81 @@ return (rx_npkts); } +static void +fxp_update_stats(struct fxp_softc *sc) +{ + struct ifnet *ifp = sc->ifp; + struct fxp_stats *sp = sc->fxp_stats; + struct fxp_hwstats *hsp; + uint32_t *status; + + FXP_LOCK_ASSERT(sc, MA_OWNED); + + bus_dmamap_sync(sc->fxp_stag, sc->fxp_smap, + BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + /* Update statistical counters. */ + if (sc->revision >= FXP_REV_82559_A0) + status = &sp->completion_status; + else if (sc->revision >= FXP_REV_82558_A4) + status = (uint32_t *)&sp->tx_tco; + else + status = &sp->tx_pause; + if (*status == htole32(FXP_STATS_DR_COMPLETE)) { + hsp = &sc->fxp_hwstats; + hsp->tx_good += le32toh(sp->tx_good); + hsp->tx_maxcols += le32toh(sp->tx_maxcols); + hsp->tx_latecols += le32toh(sp->tx_latecols); + hsp->tx_underruns += le32toh(sp->tx_underruns); + hsp->tx_lostcrs += le32toh(sp->tx_lostcrs); + hsp->tx_deffered += le32toh(sp->tx_deffered); + hsp->tx_single_collisions += le32toh(sp->tx_single_collisions); + hsp->tx_multiple_collisions += + le32toh(sp->tx_multiple_collisions); + hsp->tx_total_collisions += le32toh(sp->tx_total_collisions); + hsp->rx_good += le32toh(sp->rx_good); + hsp->rx_crc_errors += le32toh(sp->rx_crc_errors); + hsp->rx_alignment_errors += le32toh(sp->rx_alignment_errors); + hsp->rx_rnr_errors += le32toh(sp->rx_rnr_errors); + hsp->rx_overrun_errors += le32toh(sp->rx_overrun_errors); + hsp->rx_cdt_errors += le32toh(sp->rx_cdt_errors); + hsp->rx_shortframes += le32toh(sp->rx_shortframes); + hsp->tx_pause += le32toh(sp->tx_pause); + hsp->rx_pause += le32toh(sp->rx_pause); + hsp->rx_controls += le32toh(sp->rx_controls); + hsp->tx_tco += le16toh(sp->tx_tco); + hsp->rx_tco += le16toh(sp->rx_tco); + + ifp->if_opackets += le32toh(sp->tx_good); + ifp->if_collisions += le32toh(sp->tx_total_collisions); + if (sp->rx_good) { + ifp->if_ipackets += le32toh(sp->rx_good); + sc->rx_idle_secs = 0; + } else if (sc->flags & FXP_FLAG_RXBUG) { + /* + * Receiver's been idle for another second. + */ + sc->rx_idle_secs++; + } + ifp->if_ierrors += + le32toh(sp->rx_crc_errors) + + le32toh(sp->rx_alignment_errors) + + le32toh(sp->rx_rnr_errors) + + le32toh(sp->rx_overrun_errors); + /* + * If any transmit underruns occured, bump up the transmit + * threshold by another 512 bytes (64 * 8). + */ + if (sp->tx_underruns) { + ifp->if_oerrors += le32toh(sp->tx_underruns); + if (tx_threshold < 192) + tx_threshold += 64; + } + *status = 0; + bus_dmamap_sync(sc->fxp_stag, sc->fxp_smap, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + } +} + /* * Update packet in/out/collision statistics. The i82557 doesn't * allow you to access these counters without doing a fairly @@ -2027,35 +2081,11 @@ { struct fxp_softc *sc = xsc; struct ifnet *ifp = sc->ifp; - struct fxp_stats *sp = sc->fxp_stats; FXP_LOCK_ASSERT(sc, MA_OWNED); - bus_dmamap_sync(sc->fxp_stag, sc->fxp_smap, BUS_DMASYNC_POSTREAD); - ifp->if_opackets += le32toh(sp->tx_good); - ifp->if_collisions += le32toh(sp->tx_total_collisions); - if (sp->rx_good) { - ifp->if_ipackets += le32toh(sp->rx_good); - sc->rx_idle_secs = 0; - } else if (sc->flags & FXP_FLAG_RXBUG) { - /* - * Receiver's been idle for another second. - */ - sc->rx_idle_secs++; - } - ifp->if_ierrors += - le32toh(sp->rx_crc_errors) + - le32toh(sp->rx_alignment_errors) + - le32toh(sp->rx_rnr_errors) + - le32toh(sp->rx_overrun_errors); - /* - * If any transmit underruns occured, bump up the transmit - * threshold by another 512 bytes (64 * 8). - */ - if (sp->tx_underruns) { - ifp->if_oerrors += le32toh(sp->tx_underruns); - if (tx_threshold < 192) - tx_threshold += 64; - } + + /* Update statistical counters. */ + fxp_update_stats(sc); /* * Release any xmit buffers that have completed DMA. This isn't @@ -2090,24 +2120,7 @@ /* * Start another stats dump. */ - bus_dmamap_sync(sc->fxp_stag, sc->fxp_smap, - BUS_DMASYNC_PREREAD); fxp_scb_cmd(sc, FXP_SCB_COMMAND_CU_DUMPRESET); - } else { - /* - * A previous command is still waiting to be accepted. - * Just zero our copy of the stats and wait for the - * next timer event to update them. - */ - sp->tx_good = 0; - sp->tx_underruns = 0; - sp->tx_total_collisions = 0; - - sp->rx_good = 0; - sp->rx_crc_errors = 0; - sp->rx_alignment_errors = 0; - sp->rx_rnr_errors = 0; - sp->rx_overrun_errors = 0; } if (sc->miibus != NULL) mii_tick(device_get_softc(sc->miibus)); @@ -2151,6 +2164,8 @@ /* Disable interrupts. */ CSR_WRITE_1(sc, FXP_CSR_SCB_INTRCNTL, FXP_SCB_INTR_DISABLE); + fxp_update_stats(sc); + /* * Release any xmit buffers. */ @@ -2253,7 +2268,9 @@ * Initialize base of dump-stats buffer. */ fxp_scb_wait(sc); - bus_dmamap_sync(sc->fxp_stag, sc->fxp_smap, BUS_DMASYNC_PREREAD); + bzero(sc->fxp_stats, sizeof(struct fxp_stats)); + bus_dmamap_sync(sc->fxp_stag, sc->fxp_smap, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); CSR_WRITE_4(sc, FXP_CSR_SCB_GENERAL, sc->stats_addr); fxp_scb_cmd(sc, FXP_SCB_COMMAND_CU_DUMP_ADR); @@ -2345,7 +2362,7 @@ cbp->force_fdx = 0; /* (don't) force full duplex */ cbp->fdx_pin_en = 1; /* (enable) FDX# pin */ cbp->multi_ia = 0; /* (don't) accept multiple IAs */ - cbp->mc_all = ifp->if_flags & IFF_ALLMULTI ? 1 : 0; + cbp->mc_all = ifp->if_flags & IFF_ALLMULTI ? 1 : prm; cbp->gamla_rx = sc->flags & FXP_FLAG_EXT_RFA ? 1 : 0; cbp->vlan_strip_en = ((sc->flags & FXP_FLAG_EXT_RFA) != 0 && (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) ? 1 : 0; @@ -2374,6 +2391,22 @@ cbp->pri_fc_loc = 1; /* FC pri location (byte31) */ } + /* Enable 82558 and 82559 extended statistics functionality. */ + if (sc->revision >= FXP_REV_82558_A4) { + if (sc->revision >= FXP_REV_82559_A0) { + /* + * Extend configuration table size to 32 + * to include TCO configuration. + */ + cbp->byte_count = 32; + cbp->ext_stats_dis = 1; + /* Enable TCO stats. */ + cbp->tno_int_or_tco_en = 1; + cbp->gamla_rx = 1; + } else + cbp->ext_stats_dis = 0; + } + /* * Start the config command/DMA. */ @@ -2995,6 +3028,113 @@ sc->flags |= FXP_FLAG_UCODE; } +#define FXP_SYSCTL_STAT_ADD(c, h, n, p, d) \ + SYSCTL_ADD_UINT(c, h, OID_AUTO, n, CTLFLAG_RD, p, 0, d) + +static void +fxp_sysctl_node(struct fxp_softc *sc) +{ + struct sysctl_ctx_list *ctx; + struct sysctl_oid_list *child, *parent; + struct sysctl_oid *tree; + struct fxp_hwstats *hsp; + + ctx = device_get_sysctl_ctx(sc->dev); + child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)); + + SYSCTL_ADD_PROC(ctx, child, + OID_AUTO, "int_delay", CTLTYPE_INT | CTLFLAG_RW, + &sc->tunable_int_delay, 0, sysctl_hw_fxp_int_delay, "I", + "FXP driver receive interrupt microcode bundling delay"); + SYSCTL_ADD_PROC(ctx, child, + OID_AUTO, "bundle_max", CTLTYPE_INT | CTLFLAG_RW, + &sc->tunable_bundle_max, 0, sysctl_hw_fxp_bundle_max, "I", + "FXP driver receive interrupt microcode bundle size limit"); + SYSCTL_ADD_INT(ctx, child,OID_AUTO, "rnr", CTLFLAG_RD, &sc->rnr, 0, + "FXP RNR events"); + SYSCTL_ADD_INT(ctx, child, + OID_AUTO, "noflow", CTLFLAG_RW, &sc->tunable_noflow, 0, + "FXP flow control disabled"); + + /* + * Pull in device tunables. + */ + sc->tunable_int_delay = TUNABLE_INT_DELAY; + sc->tunable_bundle_max = TUNABLE_BUNDLE_MAX; + sc->tunable_noflow = 1; + (void) resource_int_value(device_get_name(sc->dev), + device_get_unit(sc->dev), "int_delay", &sc->tunable_int_delay); + (void) resource_int_value(device_get_name(sc->dev), + device_get_unit(sc->dev), "bundle_max", &sc->tunable_bundle_max); + (void) resource_int_value(device_get_name(sc->dev), + device_get_unit(sc->dev), "noflow", &sc->tunable_noflow); + sc->rnr = 0; + + hsp = &sc->fxp_hwstats; + tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD, + NULL, "FXP statistics"); + parent = SYSCTL_CHILDREN(tree); + + /* Rx MAC statistics. */ + tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx", CTLFLAG_RD, + NULL, "Rx MAC statistics"); + child = SYSCTL_CHILDREN(tree); + FXP_SYSCTL_STAT_ADD(ctx, child, "good_frames", + &hsp->rx_good, "Good frames"); + FXP_SYSCTL_STAT_ADD(ctx, child, "crc_errors", + &hsp->rx_crc_errors, "CRC errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "alignment_errors", + &hsp->rx_alignment_errors, "Alignment errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "rnr_errors", + &hsp->rx_rnr_errors, "RNR errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "overrun_errors", + &hsp->rx_overrun_errors, "Overrun errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "cdt_errors", + &hsp->rx_cdt_errors, "Collision detect errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "shortframes", + &hsp->rx_shortframes, "Short frame errors"); + if (sc->revision >= FXP_REV_82558_A4) { + FXP_SYSCTL_STAT_ADD(ctx, child, "pause", + &hsp->rx_pause, "Pause frames"); + FXP_SYSCTL_STAT_ADD(ctx, child, "controls", + &hsp->rx_controls, "Unsupported control frames"); + } + if (sc->revision >= FXP_REV_82559_A0) + FXP_SYSCTL_STAT_ADD(ctx, child, "tco", + &hsp->rx_tco, "TCO frames"); + + /* Tx MAC statistics. */ + tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "tx", CTLFLAG_RD, + NULL, "Tx MAC statistics"); + child = SYSCTL_CHILDREN(tree); + FXP_SYSCTL_STAT_ADD(ctx, child, "good_frames", + &hsp->tx_good, "Good frames"); + FXP_SYSCTL_STAT_ADD(ctx, child, "maxcols", + &hsp->tx_maxcols, "Maximum collisions errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "latecols", + &hsp->tx_latecols, "Late collisions errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "underruns", + &hsp->tx_underruns, "Underrun errors"); + FXP_SYSCTL_STAT_ADD(ctx, child, "lostcrs", + &hsp->tx_lostcrs, "Lost carrier sense"); + FXP_SYSCTL_STAT_ADD(ctx, child, "deffered", + &hsp->tx_deffered, "Deferred"); + FXP_SYSCTL_STAT_ADD(ctx, child, "single_collisions", + &hsp->tx_single_collisions, "Single collisions"); + FXP_SYSCTL_STAT_ADD(ctx, child, "multiple_collisions", + &hsp->tx_multiple_collisions, "Multiple collisions"); + FXP_SYSCTL_STAT_ADD(ctx, child, "total_collisions", + &hsp->tx_total_collisions, "Total collisions"); + if (sc->revision >= FXP_REV_82558_A4) + FXP_SYSCTL_STAT_ADD(ctx, child, "pause", + &hsp->tx_pause, "Pause frames"); + if (sc->revision >= FXP_REV_82559_A0) + FXP_SYSCTL_STAT_ADD(ctx, child, "tco", + &hsp->tx_tco, "TCO frames"); +} + +#undef FXP_SYSCTL_STAT_ADD + static int sysctl_int_range(SYSCTL_HANDLER_ARGS, int low, int high) { ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/fxp/if_fxpreg.h#2 (text+ko) ==== @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/fxp/if_fxpreg.h,v 1.43 2008/12/02 02:30:12 yongari Exp $ + * $FreeBSD: src/sys/dev/fxp/if_fxpreg.h,v 1.44 2010/05/09 22:16:15 yongari Exp $ */ #define FXP_VENDORID_INTEL 0x8086 @@ -418,7 +418,15 @@ uint32_t rx_overrun_errors; uint32_t rx_cdt_errors; uint32_t rx_shortframes; + uint32_t tx_pause; + uint32_t rx_pause; + uint32_t rx_controls; + uint16_t tx_tco; + uint16_t rx_tco; uint32_t completion_status; + uint32_t reserved0; + uint32_t reserved1; + uint32_t reserved2; }; #define FXP_STATS_DUMP_COMPLETE 0xa005 #define FXP_STATS_DR_COMPLETE 0xa007 ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/fxp/if_fxpvar.h#2 (text+ko) ==== @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/fxp/if_fxpvar.h,v 1.49 2009/06/21 07:34:12 yongari Exp $ + * $FreeBSD: src/sys/dev/fxp/if_fxpvar.h,v 1.50 2010/05/09 22:16:15 yongari Exp $ */ /* @@ -149,6 +149,30 @@ char *name; }; +struct fxp_hwstats { + uint32_t tx_good; + uint32_t tx_maxcols; + uint32_t tx_latecols; + uint32_t tx_underruns; + uint32_t tx_lostcrs; + uint32_t tx_deffered; + uint32_t tx_single_collisions; + uint32_t tx_multiple_collisions; + uint32_t tx_total_collisions; + uint32_t tx_pause; + uint32_t tx_tco; + uint32_t rx_good; + uint32_t rx_crc_errors; + uint32_t rx_alignment_errors; + uint32_t rx_rnr_errors; + uint32_t rx_overrun_errors; + uint32_t rx_cdt_errors; + uint32_t rx_shortframes; + uint32_t rx_pause; + uint32_t rx_controls; + uint32_t rx_tco; +}; + /* * NOTE: Elements are ordered for optimal cacheline behavior, and NOT * for functional grouping. @@ -175,6 +199,7 @@ int tx_queued; /* # of active TxCB's */ struct fxp_stats *fxp_stats; /* Pointer to interface stats */ uint32_t stats_addr; /* DMA address of the stats structure */ + struct fxp_hwstats fxp_hwstats; int rx_idle_secs; /* # of seconds RX has been idle */ struct callout stat_ch; /* stat callout */ int watchdog_timer; /* seconds until chip reset */ ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/iwn/if_iwn.c#2 (text+ko) ==== @@ -24,7 +24,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/iwn/if_iwn.c,v 1.35 2010/05/03 07:32:50 sobomax Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/iwn/if_iwn.c,v 1.36 2010/05/06 17:53:04 bschmidt Exp $"); #include <sys/param.h> #include <sys/sockio.h> @@ -4730,7 +4730,7 @@ chan->passive = htole16(78); else chan->passive = htole16(110); - hdr->crc_threshold = htole16(1); + hdr->crc_threshold = 0xffff; } else if (!(c->ic_flags & IEEE80211_CHAN_PASSIVE)) { chan->rf_gain = 0x28; chan->active = htole16(36); @@ -4743,7 +4743,7 @@ chan->passive = htole16(88); else chan->passive = htole16(120); - hdr->crc_threshold = htole16(1); + hdr->crc_threshold = 0xffff; } DPRINTF(sc, IWN_DEBUG_STATE, ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/mxge/if_mxge.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ ***************************************************************************/ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/mxge/if_mxge.c,v 1.78 2010/04/15 14:26:52 gallatin Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/mxge/if_mxge.c,v 1.79 2010/05/07 22:09:17 fabient Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -2400,10 +2400,7 @@ mxge_rx_ring_t *rx = &ss->rx_big; int cnt, err, i; - if (rx->cl_size == MCLBYTES) - m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); - else - m = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, rx->cl_size); + m = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, rx->cl_size); if (m == NULL) { rx->alloc_fail++; err = ENOBUFS; ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/re/if_re.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.168 2010/04/09 22:50:28 yongari Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.169 2010/05/07 23:05:27 yongari Exp $"); /* * RealTek 8139C+/8169/8169S/8110S/8168/8111/8101E PCI NIC driver @@ -1162,9 +1162,11 @@ msic = 0; if (pci_find_extcap(dev, PCIY_EXPRESS, ®) == 0) { sc->rl_flags |= RL_FLAG_PCIE; - /* Set PCIe maximum read request size to 2048. */ - if (pci_get_max_read_req(dev) < 2048) - pci_set_max_read_req(dev, 2048); + if (devid != RT_DEVICEID_8101E) { + /* Set PCIe maximum read request size to 2048. */ + if (pci_get_max_read_req(dev) < 2048) + pci_set_max_read_req(dev, 2048); + } msic = pci_msi_count(dev); if (bootverbose) device_printf(dev, "MSI count : %d\n", msic); ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/dev/usb/wlan/if_rum.c#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/dev/usb/wlan/if_rum.c,v 1.29 2010/05/03 07:32:50 sobomax Exp $ */ +/* $FreeBSD: src/sys/dev/usb/wlan/if_rum.c,v 1.30 2010/05/08 11:56:00 emaste Exp $ */ /*- * Copyright (c) 2005-2007 Damien Bergamini <damien.bergamini@free.fr> @@ -19,7 +19,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/usb/wlan/if_rum.c,v 1.29 2010/05/03 07:32:50 sobomax Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/usb/wlan/if_rum.c,v 1.30 2010/05/08 11:56:00 emaste Exp $"); /*- * Ralink Technology RT2501USB/RT2601USB chipset driver @@ -197,6 +197,7 @@ static void rum_update_slot(struct ifnet *); static void rum_set_bssid(struct rum_softc *, const uint8_t *); static void rum_set_macaddr(struct rum_softc *, const uint8_t *); +static void rum_update_mcast(struct ifnet *); static void rum_update_promisc(struct ifnet *); static void rum_setpromisc(struct rum_softc *); static const char *rum_get_rf(int); @@ -514,6 +515,7 @@ ic->ic_vap_create = rum_vap_create; ic->ic_vap_delete = rum_vap_delete; + ic->ic_update_mcast = rum_update_mcast; ieee80211_radiotap_attach(ic, &sc->sc_txtap.wt_ihdr, sizeof(sc->sc_txtap), @@ -1815,6 +1817,13 @@ RUM_UNLOCK(sc); } +static void +rum_update_mcast(struct ifnet *ifp) +{ + + /* XXX do nothing? */ +} + static const char * rum_get_rf(int rev) { ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/devfs/devfs_devs.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ * * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vfsops.c 1.36 * - * $FreeBSD: src/sys/fs/devfs/devfs_devs.c,v 1.60 2010/04/16 07:02:28 jh Exp $ + * $FreeBSD: src/sys/fs/devfs/devfs_devs.c,v 1.61 2010/05/06 19:22:50 kib Exp $ */ #include <sys/param.h> @@ -115,17 +115,21 @@ 0, sizeof(struct cdev_priv), "sizeof(struct cdev_priv)"); struct cdev * -devfs_alloc(void) +devfs_alloc(int flags) { struct cdev_priv *cdp; struct cdev *cdev; struct timespec ts; - cdp = malloc(sizeof *cdp, M_CDEVP, M_USE_RESERVE | M_ZERO | M_WAITOK); + cdp = malloc(sizeof *cdp, M_CDEVP, M_USE_RESERVE | M_ZERO | + ((flags & MAKEDEV_NOWAIT) ? M_NOWAIT : M_WAITOK)); + if (cdp == NULL) + return (NULL); cdp->cdp_dirents = &cdp->cdp_dirent0; cdp->cdp_dirent0 = NULL; cdp->cdp_maxdirent = 0; + cdp->cdp_inode = 0; cdev = &cdp->cdp_c; @@ -133,6 +137,7 @@ LIST_INIT(&cdev->si_children); vfs_timestamp(&ts); cdev->si_atime = cdev->si_mtime = cdev->si_ctime = ts; + cdev->si_cred = NULL; return (cdev); } ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/devfs/devfs_int.h#2 (text+ko) ==== @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/fs/devfs/devfs_int.h,v 1.8 2010/04/16 07:02:28 jh Exp $ + * $FreeBSD: src/sys/fs/devfs/devfs_int.h,v 1.9 2010/05/06 19:22:50 kib Exp $ */ /* @@ -70,7 +70,7 @@ #define cdev2priv(c) member2struct(cdev_priv, cdp_c, c) -struct cdev *devfs_alloc(void); +struct cdev *devfs_alloc(int); void devfs_free(struct cdev *); void devfs_create(struct cdev *dev); void devfs_destroy(struct cdev *dev); ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/msdosfs/msdosfs_vnops.c#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_vnops.c,v 1.198 2010/05/05 16:44:25 trasz Exp $ */ +/* $FreeBSD: src/sys/fs/msdosfs/msdosfs_vnops.c,v 1.199 2010/05/06 18:43:19 trasz Exp $ */ /* $NetBSD: msdosfs_vnops.c,v 1.68 1998/02/10 14:10:04 mrg Exp $ */ /*- @@ -652,7 +652,6 @@ struct buf *bp; int ioflag = ap->a_ioflag; struct uio *uio = ap->a_uio; - struct thread *td = uio->uio_td; struct vnode *vp = ap->a_vp; struct vnode *thisvp; struct denode *dep = VTODE(vp); @@ -696,7 +695,7 @@ /* * If they've exceeded their filesize limit, tell them about it. */ - if (vn_rlimit_fsize(vp, uio, td)) + if (vn_rlimit_fsize(vp, uio, uio->uio_td)) return (EFBIG); /* ==== //depot/projects/soc2010/kibab_sysctlreg/src_sys/fs/nfs/nfs_commonkrpc.c#2 (text+ko) ==== >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005101620.o4AGKRBi018442>