From: 贾学涛 <jiaxt@sinogrid.com>
To: "Zhang, Helin" <helin.zhang@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [PATCH] kni: fix igb and ixgbe kni ethtool get_link op
Date: Sun, 10 May 2015 14:26:09 +0800 [thread overview]
Message-ID: <554EFA01.1000902@sinogrid.com> (raw)
In-Reply-To: <F35DEAC7BCE34641BA9FAC6BCA4A12E70A8587B1@SHSMSX104.ccr.corp.intel.com>
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 <jiaxt@sinogrid.com>
>> ---
>> .../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
--
贾学涛
信诺瑞得西安研发中心
next prev parent reply other threads:[~2015-05-10 6:26 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-03 15:18 [PATCH] kni: fix igb and ixgbe kni ethtool get_link op Shelton Chia
[not found] ` <1428074329-20469-1-git-send-email-jiaxt-ZrUwlr9QczFWk0Htik3J/w@public.gmane.org>
2015-04-28 10:12 ` Thomas Monjalon
2015-05-04 8:55 ` Zhang, Helin
2015-05-10 6:26 ` 贾学涛 [this message]
2015-06-15 0:56 ` Zhang, Helin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=554EFA01.1000902@sinogrid.com \
--to=jiaxt@sinogrid.com \
--cc=dev@dpdk.org \
--cc=helin.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.