Re: svn commit: r209241 - head/sys/dev/e1000
Awesome, look forward to checking this out, thanks much George!! Jack On Wed, Jun 16, 2010 at 10:36 AM, George V. Neville-Neil wrote: > Author: gnn > Date: Wed Jun 16 17:36:53 2010 > New Revision: 209241 > URL: http://svn.freebsd.org/changeset/base/209241 > > Log: > Move statistics into the sysctl tree making it easier to find > and use them. > Add previously hidden statistics, some of which include interrupt > and host/card communication counters. > > Modified: > head/sys/dev/e1000/if_igb.c > head/sys/dev/e1000/if_igb.h > > Modified: head/sys/dev/e1000/if_igb.c > > == > --- head/sys/dev/e1000/if_igb.c Wed Jun 16 16:52:35 2010(r209240) > +++ head/sys/dev/e1000/if_igb.c Wed Jun 16 17:36:53 2010(r209241) > @@ -212,7 +212,6 @@ static bool igb_tso_setup(struct tx_ring > static voidigb_set_promisc(struct adapter *); > static voidigb_disable_promisc(struct adapter *); > static voidigb_set_multi(struct adapter *); > -static voidigb_print_hw_stats(struct adapter *); > static voidigb_update_link_status(struct adapter *); > static voidigb_refresh_mbufs(struct rx_ring *, int); > > @@ -224,11 +223,10 @@ static intigb_xmit(struct tx_ring *, st > static int igb_dma_malloc(struct adapter *, bus_size_t, >struct igb_dma_alloc *, int); > static voidigb_dma_free(struct adapter *, struct igb_dma_alloc *); > -static voidigb_print_debug_info(struct adapter *); > +static int igb_sysctl_nvm_info(SYSCTL_HANDLER_ARGS); > static voidigb_print_nvm_info(struct adapter *); > static int igb_is_valid_ether_addr(u8 *); > -static int igb_sysctl_stats(SYSCTL_HANDLER_ARGS); > -static int igb_sysctl_debug_info(SYSCTL_HANDLER_ARGS); > +static void igb_add_hw_stats(struct adapter *adapter); > /* Management and WOL Support */ > static voidigb_init_manageability(struct adapter *); > static voidigb_release_manageability(struct adapter *); > @@ -411,13 +409,8 @@ igb_attach(device_t dev) >/* SYSCTL stuff */ >SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), >SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), > - OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, > - igb_sysctl_debug_info, "I", "Debug Information"); > - > - SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), > - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), > - OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, > - igb_sysctl_stats, "I", "Statistics"); > + OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, > + igb_sysctl_nvm_info, "I", "NVM Information"); > >SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev), >SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), > @@ -583,6 +576,8 @@ igb_attach(device_t dev) >adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig, > igb_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST); > > + igb_add_hw_stats(adapter); > + >/* Tell the stack that the interface is not active */ >adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); > > @@ -1881,7 +1876,6 @@ static void > igb_local_timer(void *arg) > { >struct adapter *adapter = arg; > - struct ifnet*ifp = adapter->ifp; >device_tdev = adapter->dev; >struct tx_ring *txr = adapter->tx_rings; > > @@ -1891,9 +1885,6 @@ igb_local_timer(void *arg) >igb_update_link_status(adapter); >igb_update_stats_counters(adapter); > > - if (igb_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) > - igb_print_hw_stats(adapter); > - > /* > ** Watchdog: check for time since any descriptor was cleaned > */ > @@ -4741,8 +4732,10 @@ igb_update_stats_counters(struct adapter >/* For the 64-bit byte counters the low dword must be read first. */ >/* Both registers clear on the read of the high dword */ > > - adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCH); > - adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCH); > + adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) + > + ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32); > + adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) + > + ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32) ; > >adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC); >adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC); > @@ -4764,6 +4757,38 @@ igb_update_stats_counters(struct adapter >adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC); >adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC); > > + /* Interrupt Counts */ > + > + adapter->stats.iac += E1000_READ_REG(&adapter->hw,
svn commit: r209241 - head/sys/dev/e1000
Author: gnn Date: Wed Jun 16 17:36:53 2010 New Revision: 209241 URL: http://svn.freebsd.org/changeset/base/209241 Log: Move statistics into the sysctl tree making it easier to find and use them. Add previously hidden statistics, some of which include interrupt and host/card communication counters. Modified: head/sys/dev/e1000/if_igb.c head/sys/dev/e1000/if_igb.h Modified: head/sys/dev/e1000/if_igb.c == --- head/sys/dev/e1000/if_igb.c Wed Jun 16 16:52:35 2010(r209240) +++ head/sys/dev/e1000/if_igb.c Wed Jun 16 17:36:53 2010(r209241) @@ -212,7 +212,6 @@ static bool igb_tso_setup(struct tx_ring static voidigb_set_promisc(struct adapter *); static voidigb_disable_promisc(struct adapter *); static voidigb_set_multi(struct adapter *); -static voidigb_print_hw_stats(struct adapter *); static voidigb_update_link_status(struct adapter *); static voidigb_refresh_mbufs(struct rx_ring *, int); @@ -224,11 +223,10 @@ static intigb_xmit(struct tx_ring *, st static int igb_dma_malloc(struct adapter *, bus_size_t, struct igb_dma_alloc *, int); static voidigb_dma_free(struct adapter *, struct igb_dma_alloc *); -static voidigb_print_debug_info(struct adapter *); +static int igb_sysctl_nvm_info(SYSCTL_HANDLER_ARGS); static voidigb_print_nvm_info(struct adapter *); static int igb_is_valid_ether_addr(u8 *); -static int igb_sysctl_stats(SYSCTL_HANDLER_ARGS); -static int igb_sysctl_debug_info(SYSCTL_HANDLER_ARGS); +static void igb_add_hw_stats(struct adapter *adapter); /* Management and WOL Support */ static voidigb_init_manageability(struct adapter *); static voidigb_release_manageability(struct adapter *); @@ -411,13 +409,8 @@ igb_attach(device_t dev) /* SYSCTL stuff */ SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), - OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, - igb_sysctl_debug_info, "I", "Debug Information"); - - SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), - OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, - igb_sysctl_stats, "I", "Statistics"); + OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0, + igb_sysctl_nvm_info, "I", "NVM Information"); SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev), SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), @@ -583,6 +576,8 @@ igb_attach(device_t dev) adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig, igb_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST); + igb_add_hw_stats(adapter); + /* Tell the stack that the interface is not active */ adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); @@ -1881,7 +1876,6 @@ static void igb_local_timer(void *arg) { struct adapter *adapter = arg; - struct ifnet*ifp = adapter->ifp; device_tdev = adapter->dev; struct tx_ring *txr = adapter->tx_rings; @@ -1891,9 +1885,6 @@ igb_local_timer(void *arg) igb_update_link_status(adapter); igb_update_stats_counters(adapter); - if (igb_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) - igb_print_hw_stats(adapter); - /* ** Watchdog: check for time since any descriptor was cleaned */ @@ -4741,8 +4732,10 @@ igb_update_stats_counters(struct adapter /* For the 64-bit byte counters the low dword must be read first. */ /* Both registers clear on the read of the high dword */ - adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCH); - adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCH); + adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) + + ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32); + adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) + + ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32) ; adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC); adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC); @@ -4764,6 +4757,38 @@ igb_update_stats_counters(struct adapter adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC); adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC); + /* Interrupt Counts */ + + adapter->stats.iac += E1000_READ_REG(&adapter->hw, E1000_IAC); + adapter->stats.icrxptc += E1000_READ_REG(&adapter->hw, E1000_ICRXPTC); + adapter->stats.icrxatc += E1000_READ_REG(&adapter->hw, E1000_ICRXATC); + adapter->stats.ictxptc += E1000_READ_REG(&adapter->hw, E1000_ICTXPTC); + adapter->stats.ictxatc += E1000_READ_REG