diff mbox series

[SRU,B/D,Unstable,1/1] ixgbevf: Use cached link state instead of re-reading the value for ethtool

Message ID 20190716201343.29258-2-gpiccoli@canonical.com
State New
Headers show
Series ixgbe{vf} - Physical Function gets IRQ when VF checks link state | expand

Commit Message

Guilherme G. Piccoli July 16, 2019, 8:13 p.m. UTC
From: Alexander Duyck <alexander.h.duyck@linux.intel.com>

BugLink: https://bugs.launchpad.net/bugs/1836760

Change the ethtool link settings call to just read the cached state out of
the adapter structure instead of trying to recheck the value from the PF.
Doing this should prevent excessive reading of the mailbox.

Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
Reviewed-by: "Guilherme G. Piccoli" <gpiccoli@canonical.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
(cherry picked from commit 1e1b0c658d9bb364b4a2a4b08a760d3e4c239bdc)
Signed-off-by: Guilherme G. Piccoli <gpiccoli@canonical.com>
---
 drivers/net/ethernet/intel/ixgbevf/ethtool.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

Comments

Stefan Bader July 19, 2019, 9:17 a.m. UTC | #1
On 16.07.19 22:13, Guilherme G. Piccoli wrote:
> From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1836760
> 
> Change the ethtool link settings call to just read the cached state out of
> the adapter structure instead of trying to recheck the value from the PF.
> Doing this should prevent excessive reading of the mailbox.
> 
> Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> Reviewed-by: "Guilherme G. Piccoli" <gpiccoli@canonical.com>
> Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> (cherry picked from commit 1e1b0c658d9bb364b4a2a4b08a760d3e4c239bdc)
> Signed-off-by: Guilherme G. Piccoli <gpiccoli@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
> ---
>  drivers/net/ethernet/intel/ixgbevf/ethtool.c | 10 ++--------
>  1 file changed, 2 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> index 5399787e07af..54459b69c948 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> +++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> @@ -85,22 +85,16 @@ static int ixgbevf_get_link_ksettings(struct net_device *netdev,
>  				      struct ethtool_link_ksettings *cmd)
>  {
>  	struct ixgbevf_adapter *adapter = netdev_priv(netdev);
> -	struct ixgbe_hw *hw = &adapter->hw;
> -	u32 link_speed = 0;
> -	bool link_up;
>  
>  	ethtool_link_ksettings_zero_link_mode(cmd, supported);
>  	ethtool_link_ksettings_add_link_mode(cmd, supported, 10000baseT_Full);
>  	cmd->base.autoneg = AUTONEG_DISABLE;
>  	cmd->base.port = -1;
>  
> -	hw->mac.get_link_status = 1;
> -	hw->mac.ops.check_link(hw, &link_speed, &link_up, false);
> -
> -	if (link_up) {
> +	if (adapter->link_up) {
>  		__u32 speed = SPEED_10000;
>  
> -		switch (link_speed) {
> +		switch (adapter->link_speed) {
>  		case IXGBE_LINK_SPEED_10GB_FULL:
>  			speed = SPEED_10000;
>  			break;
>
Khalid Elmously July 23, 2019, 5:28 a.m. UTC | #2
On 2019-07-16 17:13:42 , Guilherme G. Piccoli wrote:
> From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1836760
> 
> Change the ethtool link settings call to just read the cached state out of
> the adapter structure instead of trying to recheck the value from the PF.
> Doing this should prevent excessive reading of the mailbox.
> 
> Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
> Reviewed-by: "Guilherme G. Piccoli" <gpiccoli@canonical.com>
> Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> (cherry picked from commit 1e1b0c658d9bb364b4a2a4b08a760d3e4c239bdc)
> Signed-off-by: Guilherme G. Piccoli <gpiccoli@canonical.com>
> ---
>  drivers/net/ethernet/intel/ixgbevf/ethtool.c | 10 ++--------
>  1 file changed, 2 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> index 5399787e07af..54459b69c948 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> +++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> @@ -85,22 +85,16 @@ static int ixgbevf_get_link_ksettings(struct net_device *netdev,
>  				      struct ethtool_link_ksettings *cmd)
>  {
>  	struct ixgbevf_adapter *adapter = netdev_priv(netdev);
> -	struct ixgbe_hw *hw = &adapter->hw;
> -	u32 link_speed = 0;
> -	bool link_up;
>  
>  	ethtool_link_ksettings_zero_link_mode(cmd, supported);
>  	ethtool_link_ksettings_add_link_mode(cmd, supported, 10000baseT_Full);
>  	cmd->base.autoneg = AUTONEG_DISABLE;
>  	cmd->base.port = -1;
>  
> -	hw->mac.get_link_status = 1;
> -	hw->mac.ops.check_link(hw, &link_speed, &link_up, false);
> -
> -	if (link_up) {
> +	if (adapter->link_up) {
>  		__u32 speed = SPEED_10000;
>  
> -		switch (link_speed) {
> +		switch (adapter->link_speed) {
>  		case IXGBE_LINK_SPEED_10GB_FULL:
>  			speed = SPEED_10000;
>  			break;
> -- 
> 2.22.0
> 
> 
> -- 
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
index 5399787e07af..54459b69c948 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
@@ -85,22 +85,16 @@  static int ixgbevf_get_link_ksettings(struct net_device *netdev,
 				      struct ethtool_link_ksettings *cmd)
 {
 	struct ixgbevf_adapter *adapter = netdev_priv(netdev);
-	struct ixgbe_hw *hw = &adapter->hw;
-	u32 link_speed = 0;
-	bool link_up;
 
 	ethtool_link_ksettings_zero_link_mode(cmd, supported);
 	ethtool_link_ksettings_add_link_mode(cmd, supported, 10000baseT_Full);
 	cmd->base.autoneg = AUTONEG_DISABLE;
 	cmd->base.port = -1;
 
-	hw->mac.get_link_status = 1;
-	hw->mac.ops.check_link(hw, &link_speed, &link_up, false);
-
-	if (link_up) {
+	if (adapter->link_up) {
 		__u32 speed = SPEED_10000;
 
-		switch (link_speed) {
+		switch (adapter->link_speed) {
 		case IXGBE_LINK_SPEED_10GB_FULL:
 			speed = SPEED_10000;
 			break;