From owner-svn-src-all@freebsd.org Thu Jan 2 22:57:22 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EEC871DDE34; Thu, 2 Jan 2020 22:57:22 +0000 (UTC) (envelope-from erj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47pk2B5y5cz45bc; Thu, 2 Jan 2020 22:57:22 +0000 (UTC) (envelope-from erj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C78E522BB9; Thu, 2 Jan 2020 22:57:22 +0000 (UTC) (envelope-from erj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 002MvM5L029184; Thu, 2 Jan 2020 22:57:22 GMT (envelope-from erj@FreeBSD.org) Received: (from erj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 002MvMjf029181; Thu, 2 Jan 2020 22:57:22 GMT (envelope-from erj@FreeBSD.org) Message-Id: <202001022257.002MvMjf029181@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: erj set sender to erj@FreeBSD.org using -f From: Eric Joyner Date: Thu, 2 Jan 2020 22:57:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r356302 - in stable/12/sys/dev: e1000 ixgbe ixl X-SVN-Group: stable-12 X-SVN-Commit-Author: erj X-SVN-Commit-Paths: in stable/12/sys/dev: e1000 ixgbe ixl X-SVN-Commit-Revision: 356302 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jan 2020 22:57:23 -0000 Author: erj Date: Thu Jan 2 22:57:21 2020 New Revision: 356302 URL: https://svnweb.freebsd.org/changeset/base/356302 Log: MFC isc_pause_frame field fixes to Intel ethernet drivers This MFC includes: r353656, r353657, r353658, and r353661 Sponsored by: Intel Corporation Modified: stable/12/sys/dev/e1000/if_em.c stable/12/sys/dev/ixgbe/if_ix.c stable/12/sys/dev/ixl/ixl_pf_main.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/e1000/if_em.c ============================================================================== --- stable/12/sys/dev/e1000/if_em.c Thu Jan 2 22:52:31 2020 (r356301) +++ stable/12/sys/dev/e1000/if_em.c Thu Jan 2 22:57:21 2020 (r356302) @@ -3903,6 +3903,7 @@ em_disable_aspm(struct adapter *adapter) static void em_update_stats_counters(struct adapter *adapter) { + u64 prev_xoffrxc = adapter->stats.xoffrxc; if(adapter->hw.phy.media_type == e1000_media_type_copper || (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) { @@ -3926,7 +3927,8 @@ em_update_stats_counters(struct adapter *adapter) ** For watchdog management we need to know if we have been ** paused during the last interval, so capture that here. */ - adapter->shared->isc_pause_frames = adapter->stats.xoffrxc; + if (adapter->stats.xoffrxc != prev_xoffrxc) + adapter->shared->isc_pause_frames = 1; adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC); adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC); adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64); Modified: stable/12/sys/dev/ixgbe/if_ix.c ============================================================================== --- stable/12/sys/dev/ixgbe/if_ix.c Thu Jan 2 22:52:31 2020 (r356301) +++ stable/12/sys/dev/ixgbe/if_ix.c Thu Jan 2 22:57:21 2020 (r356302) @@ -1392,6 +1392,7 @@ ixgbe_update_stats_counters(struct adapter *adapter) struct ixgbe_hw *hw = &adapter->hw; struct ixgbe_hw_stats *stats = &adapter->stats.pf; u32 missed_rx = 0, bprc, lxon, lxoff, total; + u32 lxoffrxc; u64 total_missed_rx = 0; stats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS); @@ -1421,15 +1422,24 @@ ixgbe_update_stats_counters(struct adapter *adapter) stats->tor += IXGBE_READ_REG(hw, IXGBE_TORL) + ((u64)IXGBE_READ_REG(hw, IXGBE_TORH) << 32); stats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXCNT); - stats->lxoffrxc += IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT); + lxoffrxc = IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT); + stats->lxoffrxc += lxoffrxc; } else { stats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXC); - stats->lxoffrxc += IXGBE_READ_REG(hw, IXGBE_LXOFFRXC); + lxoffrxc = IXGBE_READ_REG(hw, IXGBE_LXOFFRXC); + stats->lxoffrxc += lxoffrxc; /* 82598 only has a counter in the high register */ stats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCH); stats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); stats->tor += IXGBE_READ_REG(hw, IXGBE_TORH); } + + /* + * For watchdog management we need to know if we have been paused + * during the last interval, so capture that here. + */ + if (lxoffrxc) + adapter->shared->isc_pause_frames = 1; /* * Workaround: mprc hardware is incorrectly counting Modified: stable/12/sys/dev/ixl/ixl_pf_main.c ============================================================================== --- stable/12/sys/dev/ixl/ixl_pf_main.c Thu Jan 2 22:52:31 2020 (r356301) +++ stable/12/sys/dev/ixl/ixl_pf_main.c Thu Jan 2 22:57:21 2020 (r356302) @@ -2604,6 +2604,7 @@ ixl_update_stats_counters(struct ixl_pf *pf) struct i40e_hw *hw = &pf->hw; struct ixl_vsi *vsi = &pf->vsi; struct ixl_vf *vf; + u64 prev_link_xoff_rx = pf->stats.link_xoff_rx; struct i40e_hw_port_stats *nsd = &pf->stats; struct i40e_hw_port_stats *osd = &pf->stats_offsets; @@ -2688,6 +2689,13 @@ ixl_update_stats_counters(struct ixl_pf *pf) ixl_stat_update32(hw, I40E_GLPRT_LXOFFTXC(hw->port), pf->stat_offsets_loaded, &osd->link_xoff_tx, &nsd->link_xoff_tx); + + /* + * For watchdog management we need to know if we have been paused + * during the last interval, so capture that here. + */ + if (pf->stats.link_xoff_rx != prev_link_xoff_rx) + vsi->shared->isc_pause_frames = 1; /* Packet size stats rx */ ixl_stat_update48(hw, I40E_GLPRT_PRC64H(hw->port),