From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <yuan.peng@intel.com>
Received: from mga03.intel.com (mga03.intel.com [134.134.136.65])
 by dpdk.org (Postfix) with ESMTP id 147512C2A
 for <dev@dpdk.org>; Fri, 30 Jun 2017 07:11:14 +0200 (CEST)
Received: from fmsmga005.fm.intel.com ([10.253.24.32])
 by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 29 Jun 2017 22:11:13 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.40,284,1496127600"; d="scan'208";a="120686990"
Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205])
 by fmsmga005.fm.intel.com with ESMTP; 29 Jun 2017 22:11:13 -0700
Received: from fmsmsx118.amr.corp.intel.com (10.18.116.18) by
 fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS)
 id 14.3.319.2; Thu, 29 Jun 2017 22:11:12 -0700
Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by
 fmsmsx118.amr.corp.intel.com (10.18.116.18) with Microsoft SMTP Server (TLS)
 id 14.3.319.2; Thu, 29 Jun 2017 22:11:12 -0700
Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.116]) by
 SHSMSX152.ccr.corp.intel.com ([169.254.6.122]) with mapi id 14.03.0319.002;
 Fri, 30 Jun 2017 13:11:10 +0800
From: "Peng, Yuan" <yuan.peng@intel.com>
To: "Dai, Wei" <wei.dai@intel.com>, "thomas@monjalon.net"
 <thomas@monjalon.net>, "Lu, Wenzhuo" <wenzhuo.lu@intel.com>, "Ananyev,
 Konstantin" <konstantin.ananyev@intel.com>, "Zhang, Helin"
 <helin.zhang@intel.com>, "Wu, Jingjing" <jingjing.wu@intel.com>,
 "yuan.pntel.com@dpdk.org" <yuan.pntel.com@dpdk.org>
CC: "dev@dpdk.org" <dev@dpdk.org>, "Dai, Wei" <wei.dai@intel.com>
Thread-Topic: [dpdk-dev] [PATCH v4 0/5] Support NIC reset and keep same port id
Thread-Index: AQHS8OmcYocUfhjOQ0aOAHayy1z9eqI82EnQ
Date: Fri, 30 Jun 2017 05:11:10 +0000
Message-ID: <67D543A150B29E4CAAE53918F64EDAEA373E7636@SHSMSX103.ccr.corp.intel.com>
References: <20170629083404.1271-1-wei.dai@intel.com>
 <1498748282-69914-1-git-send-email-wei.dai@intel.com>
In-Reply-To: <1498748282-69914-1-git-send-email-wei.dai@intel.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
dlp-product: dlpe-windows
dlp-version: 10.0.102.7
dlp-reaction: no-action
x-originating-ip: [10.239.127.40]
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: Re: [dpdk-dev] [PATCH v4 0/5] Support NIC reset and keep same port
 id
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Jun 2017 05:11:15 -0000

Tested-by: Peng, Yuan <yuan.peng@intel.com>

- Tested commit bbe569daa7e99b36d44b12bb3d23ddfbc26d383c+the 5 patches.
- OS: 4.8.6-300.fc25.x86_64
- GCC: gcc version 6.2.1 20160916 (Red Hat 6.2.1-2) (GCC)
- CPU: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz
- NIC: Ethernet controller [0200]: Intel Corporation Ethernet Controller 10=
G X550T [8086:1563] (rev 01)
- Default x86_64-native-linuxapp-gcc configuration
- Prerequisites:
- Total 1cases, 1 passed, 0 failed

Steps:
DUT:
1. echo 2 >/sys/bus/pci/devices/0000:83:00.0/sriov_numvfs
./usertools/dpdk-devbind.py -b vfio-pci 83:10.0 83:10.2
./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3 -n 4 -- -i

2.testpmd> set verbose 1
testpmd> set fwd mac
testpmd> start
tester:
scapy
sendp([Ether(dst=3D"02:09:C0:63:DA:4B")/IP()/UDP()], iface=3D"ens6f0", coun=
t=3D1)
dut:
testpmd>show port stats all
port0 can fwd the packet normally
testpmd>show port info all
show port number, PCI addr and MAC addr

3. ifconfig ens801f0 down
Port 0: Interrupt reset event
Port 1: Interrupt reset event
ifconfig ens801f0 up

4.testpmd> stop

5. testpmd> port reset all
Resetting ports...
Finish resetting Port 0 with PCI Address: 0000:83:10.0
Finish resetting Port 1 with PCI Address: 0000:83:10.2
Done

6. testpmd> port stop all
Stopping ports...
Checking link statuses...
Done
testpmd> port start all
Configuring Port 0 (socket 1) with PCI Address: 0000:83:10.0
Port 0: 02:09:C0:63:DA:4B
Configuring Port 1 (socket 1) with PCI Address: 0000:83:10.2
Port 1: 02:09:C0:37:93:6F
Checking link statuses...
Done

7. testpmd> show port info all
confirm same mapping of port id and PCI address.

8.testpmd> start
Tester:
scapy
sendp([Ether(dst=3D"02:09:C0:63:DA:4B")/IP()/UDP()], iface=3D"ens6f0", coun=
t=3D1)
dut:
testpmd>show port stats all
port0 can fwd the packet normally

9.repeat step3 to step8, the same result.



-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Dai
Sent: Thursday, June 29, 2017 10:58 PM
To: thomas@monjalon.net; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konst=
antin <konstantin.ananyev@intel.com>; Zhang, Helin <helin.zhang@intel.com>;=
 Wu, Jingjing <jingjing.wu@intel.com>; yuan.pntel.com@dpdk.org
Cc: dev@dpdk.org; Dai, Wei <wei.dai@intel.com>
Subject: [dpdk-dev] [PATCH v4 0/5] Support NIC reset and keep same port id

Sometimes a port have to be reset. For example PF is reset, all its VF shou=
ld also be reset. After reset, if the port goes through PCI remove() and th=
en PCI probe() for restoration, its port id may be changed and this is not =
expected by some customer DPDK application.
Normally, PCI probe() includes two parts: one is in rte_ethdev layer and th=
e other is calling PMD dev_init(). PCI remove( ) release all resource alloc=
ated from rte_ethdev layer in PCI probe( ) and calls PMD dev_unit( ).
To keep same port id and reset the port, only dev_uninit() and dev_init( ) =
in PMD can be called and keep all resources allocated from rte_ethdev layer=
 poart in PCI probe( ).

New rte_eth_dev_reset( ) calls rte_eth_dev_stop( ), PMD dev_uninit( ) and t=
hen PMD dev_init( ) to reset a port and keep same port id.
And then application can go through rte_eth_dev_configure( ), rte_eth_rx_qu=
eue_setup( ), rte_eth_tx_queue_setup( ) and rte_eth_dev_start( ) again to r=
estore its previous settings or to reconfigure itself with different settin=
gs.

To test this new feature, a testpmd command "port reset port_id" is added.
The mapping between port number and its PCI address can be monitored to con=
firm its port number is kept.
And following test case can also be used to confirm the port can work again=
 after reset.

A typical test steps are listed as follows:
For example, run "ifconfig PF-name down" will trigger a reset to VF.
1.  run testpmd with 2 ixgbe VF ports belonging to same PF 2.  testpmd > se=
t verbose 1 //to observe VF working 3.  testpmd > show port info all //show=
 port number, PCI addr and MAC addr 4.  testpmd > start 5.  let all ports f=
orwarding work for a while 6.  testpmd > show port stats all 7.  ifconfig n=
ame-of-PF down 8.  A message is shown in testmd to indicate PF reset 9.  if=
config name-of-PF up 10. testpmd > stop // stop forwarding to avoid crash d=
uring reset 11. testpmd > port reset all 12. testpmd > port stop all 13. te=
stpmd > port start all //recofnig all ports 14. testpmd > show port info al=
l
    //confirm same mapping of port id and PCI addr 15. testpmd > start // r=
estore forwarding 14. let all ports forwarding work for a while 15. testpmd=
 > show port stats all //confirm all port can work again 16. repeat above s=
tep 7 - 15

chagnes:
v4:
  add PCI address to confirm its port number keep same
  correct test method in cover letter
v3:
  update testpmd command
v2:
  only reset PMD layer resource and keep same port id, but
  not restore settings


Wei Dai (5):
  ethdev: add support of NIC reset
  net/ixgbe: add support of reset
  net/i40e: add support of reset
  app/testpmd: display PCI address in port info
  app/testpmd: enhance command to test NIC reset

 app/test-pmd/cmdline.c                 | 10 ++++--
 app/test-pmd/config.c                  |  5 +++
 app/test-pmd/testpmd.c                 | 61 ++++++++++++++++++++++++++++++=
++--
 app/test-pmd/testpmd.h                 |  1 +
 drivers/net/i40e/i40e_ethdev.c         | 16 +++++++++
 drivers/net/i40e/i40e_ethdev_vf.c      | 16 +++++++++
 drivers/net/ixgbe/ixgbe_ethdev.c       | 38 +++++++++++++++++++++
 lib/librte_ether/rte_ethdev.c          | 16 +++++++++
 lib/librte_ether/rte_ethdev.h          | 12 +++++++
 lib/librte_ether/rte_ether_version.map |  2 +-
 10 files changed, 170 insertions(+), 7 deletions(-)

--
2.7.4