From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pd0-f179.google.com (mail-pd0-f179.google.com [209.85.192.179]) by dpdk.org (Postfix) with ESMTP id 56A077F1C for ; Sun, 10 May 2015 08:26:41 +0200 (CEST) Received: by pdbnk13 with SMTP id nk13so121217351pdb.0 for ; Sat, 09 May 2015 23:26:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=message-id:disposition-notification-to:date:from:user-agent :mime-version:to:cc:subject:references:in-reply-to:content-type :content-transfer-encoding; bh=kwN4pLmMjAS8O4KwV7yhDh8Ju5FTGlPF5ioe5Pfjwpg=; b=B0Yw823qWO54WhCejFijcEejJTV3C5vdlfrrxFNo0/XfzQ0u5prd9e/0WeMW8r1tnK hJ4FjScKGINJSMYw1a6t+KkIQJiOxrvXE+5fdoesnIyhqBSSdeJu1EauJn+Rz6bscgJH ca5yRDO9G+hz94nHpFzQ9DxdTsYgEWEGCq1bJd0yq8L7OtLBHZqV5L60GPG3qTEN9bbU c6e+jjVBTSlJbRBrZPzkcT7DuL0dZeVfNbyN78k9qUbeS+eah3Bn1+nmlWlvt/E0hUAb LVyEoYeBK3nbdUoMpwlYnTMz+twB86n3SwJGFqZ5ZzMKZE8F0MyBv+6t35GiWVKr3cVT XHKQ== X-Received: by 10.70.38.225 with SMTP id j1mr9537063pdk.14.1431239200598; Sat, 09 May 2015 23:26:40 -0700 (PDT) Received: from [0.0.0.0] ([107.170.235.12]) by mx.google.com with ESMTPSA id vl9sm9472845pbc.73.2015.05.09.23.26.19 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 09 May 2015 23:26:39 -0700 (PDT) Message-ID: <554EFA01.1000902@sinogrid.com> Date: Sun, 10 May 2015 14:26:09 +0800 From: =?UTF-8?B?6LS+5a2m5rab?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: "Zhang, Helin" References: <1428074329-20469-1-git-send-email-jiaxt@sinogrid.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH] kni: fix igb and ixgbe kni ethtool get_link op X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 May 2015 06:26:41 -0000 Hi Helin, No matter the cable is plugged or not, the return value of link detected is yes when I run ethtool on a kni interface. But the return values of speed and duplex are correct. So I just copy the link detected codes of get_settings op. On 05/04/2015 04:55 PM, Zhang, Helin wrote: > Hi Chia > >> -----Original Message----- >> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Shelton Chia >> Sent: Friday, April 3, 2015 11:19 PM >> To: dev@dpdk.org >> Subject: [dpdk-dev] [PATCH] kni: fix igb and ixgbe kni ethtool get_link op >> >> igb and ixgbe's link detected always return yes, fix get_link func refer to >> get_settings, it works correctly for my i350 and 82599es nic. > Could you help to add more detailed description of why we need these code changes? Thanks! >> Signed-off-by: Shelton Chia >> --- >> .../linuxapp/kni/ethtool/igb/igb_ethtool.c | 18 ++++++--------- >> .../linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c | 26 >> +++++++++++++++++++++- >> 2 files changed, 32 insertions(+), 12 deletions(-) >> >> diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c >> b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c >> index f3c48b2..5457f48 100644 >> --- a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c >> +++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_ethtool.c >> @@ -383,19 +383,15 @@ static int igb_set_settings(struct net_device >> *netdev, struct ethtool_cmd *ecmd) static u32 igb_get_link(struct >> net_device *netdev) { >> struct igb_adapter *adapter = netdev_priv(netdev); >> - struct e1000_mac_info *mac = &adapter->hw.mac; >> + struct e1000_hw *hw = &adapter->hw; >> + u32 status; >> >> - /* >> - * If the link is not reported up to netdev, interrupts are disabled, >> - * and so the physical link state may have changed since we last >> - * looked. Set get_link_status to make sure that the true link >> - * state is interrogated, rather than pulling a cached and possibly >> - * stale link state from the driver. >> - */ >> - if (!netif_carrier_ok(netdev)) >> - mac->get_link_status = 1; >> + status = E1000_READ_REG(hw, E1000_STATUS); > Can ' check_for_link ' be used for checking the link here? It needs to support > all possible link types. > >> - return igb_has_link(adapter); >> + if (status & E1000_STATUS_LU) >> + return 1; >> + else >> + return 0; >> } >> >> static void igb_get_pauseparam(struct net_device *netdev, diff --git >> a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c >> b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c >> index 11472bd..184b14f 100644 >> --- a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c >> +++ b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_ethtool.c >> @@ -801,6 +801,30 @@ static void ixgbe_get_regs(struct net_device *netdev, >> struct ethtool_regs *regs, >> regs_buff[1128] = IXGBE_READ_REG(hw, IXGBE_MFLCN); } >> >> +static u32 ixgbe_get_link(struct net_device *netdev) { >> + struct ixgbe_adapter *adapter = netdev_priv(netdev); >> + struct ixgbe_hw *hw = &adapter->hw; >> + u32 link_speed = 0; >> + bool link_up; >> + >> + if (!in_interrupt()) { >> + hw->mac.ops.check_link(hw, &link_speed, &link_up, false); > As done in kernel driver function ' ixgbe_watchdog_update_link ()', more checks > may be needed. > > Regards, > Helin > >> + } else { >> + /* >> + * this case is a special workaround for RHEL5 bonding >> + * that calls this routine from interrupt context >> + */ >> + link_speed = adapter->link_speed; >> + link_up = adapter->link_up; >> + } >> + >> + if (link_up) >> + return 1; >> + else >> + return 0; >> +} >> + >> static int ixgbe_get_eeprom_len(struct net_device *netdev) { >> struct ixgbe_adapter *adapter = netdev_priv(netdev); @@ -2838,7 >> +2862,7 @@ struct ethtool_ops ixgbe_ethtool_ops = { >> .get_wol = ixgbe_get_wol, >> .set_wol = ixgbe_set_wol, >> .nway_reset = ixgbe_nway_reset, >> - .get_link = ethtool_op_get_link, >> + .get_link = ixgbe_get_link, >> .get_eeprom_len = ixgbe_get_eeprom_len, >> .get_eeprom = ixgbe_get_eeprom, >> .set_eeprom = ixgbe_set_eeprom, >> -- >> 2.3.5 -- 贾学涛 信诺瑞得西安研发中心