From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id C6038378B for ; Mon, 23 Mar 2015 03:11:17 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP; 22 Mar 2015 19:11:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,449,1422950400"; d="scan'208";a="702581848" Received: from pgsmsx102.gar.corp.intel.com ([10.221.44.80]) by orsmga002.jf.intel.com with ESMTP; 22 Mar 2015 19:11:15 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by PGSMSX102.gar.corp.intel.com (10.221.44.80) with Microsoft SMTP Server (TLS) id 14.3.224.2; Mon, 23 Mar 2015 10:10:30 +0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.149]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.108]) with mapi id 14.03.0224.002; Mon, 23 Mar 2015 10:10:23 +0800 From: "Jiajia, SunX" To: Thomas Monjalon Thread-Topic: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non-bulk alloc mode setup Thread-Index: AQHQYl+cQdVX0AhQ2kW79wQXkgxEQZ0k7p3ggAB0/QCAA/CcIA== Date: Mon, 23 Mar 2015 02:10:22 +0000 Message-ID: References: <1426781356-13999-1-git-send-email-pawelx.wodkowski@intel.com> <11895300.1p8srIVla4@xps13> In-Reply-To: <11895300.1p8srIVla4@xps13> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non-bulk alloc mode setup 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: Mon, 23 Mar 2015 02:11:18 -0000 Hi Thomas, > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > Sent: Saturday, March 21, 2015 5:46 AM > To: Jiajia, SunX > Cc: dev@dpdk.org; Wodkowski, PawelX > Subject: Re: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non- > bulk alloc mode setup >=20 > 2015-03-20 06:50, Jiajia, SunX: > > Tested-by: Jiajia, SunX > > - Tested Commit: fe4810a01e57645ad92577d628f562791408ce21 >=20 > This commit id is related to a PDF doc change. I verify this issue based on this commit id which is not the commit id I fo= und,=20 Sorry for making you confused. BTW, I found this issue in the=20 dpdk-2.0.0-rc2, which commit id is 1a5994ac2ce11c112d9eed69c08311b31ac7f3d2= . >=20 > > - OS: Fedora20 3.11.10-301.fc20.x86_64 > > - GCC: gcc version 4.8.3 > > - CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz > > - NIC: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network > Connection [8086:10fb] > > - Target x86_64-native-linuxapp-gcc > > - Total 22 cases, 22 passed, 0 failed >=20 > It seems this test is related to bonding, not ixgbe buffer overrun in > non-bulk alloc mode. Because I found this issue when doing the test of bonding, so I think doing Bonding test should work on verifying this issue.=20 >=20 > > TOPO: > > * Connections ports between tester/ixia and DUT > > - TESTER(Or IXIA)-------DUT > > - portA------------------port0 > > - portB------------------port1 > > - portC------------------port2 > > - portD------------------port3 > > > > Test Setup#1 for Functional test > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > Tester has 4 ports(portA--portD), and DUT has 4 ports(port0--port3), > then connect portA to port0, portB to port1, portC to port2, portD to > port3. > > > > > > > > - Case: Basic bonding--Create bonded devices and slaves > > Description: > > Use Setup#1. > > Create bonded device and add some ports as salve of bonded > device, > > Then removed slaves or added slaves or change the bonding > primary slave > > Or change bonding mode and so on. > > Expected test result: > > Verify the basic functions are normal. > > > > - Case: Basic bonding--MAC Address Test > > Description: > > Use Setup#1. > > Create bonded device and add some ports as slaves of bonded > device, > > Check that the changes of the bonded device and slave > MAC > > Expected test result: > > Verify the behavior of bonded device and slave according > to the mode. > > > > - Case: Basic bonding--Device Promiscuous Mode Test > > Description: > > Use Setup#1. > > Create bonded device and add some ports as slaves of bonded > device, > > Set promiscuous mode on or off, then send packets to the > bonded device > > Or slaves. > > Expected test result: > > Verify the RX/TX status of bonded device and slaves > according to the mode. > > > > - Case: Mode 0(Round Robin) TX/RX test > > Description: > > Use Setup#1. > > Create bonded device with mode 0 and add 3 ports as slaves > of bonded device, > > Forward packets between bonded device and unbounded > device, start to forward, > > And send packets to unbound device or slaves. > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 0. > > > > - Case: Mode 0(Round Robin) Bring one slave link down > > Description: > > Use Setup#1. > > Create bonded device with mode 0 and add 3 ports as slaves > of bonded device, > > Forward packets between bonded device and unbounded > device, start to forward, > > Bring the link on either port 0, 1 or 2 down. And send > packets to unbound > > device or slaves. > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 0. > > > > - Case: Mode 0(Round Robin) Bring all slave links down > > Description: > > Use Setup#1. > > Create bonded device with mode 0 and add 3 ports as slaves > of bonded device, > > Forward packets between bonded device and unbounded > device, start to forward, > > Bring the links down on all bonded ports. And send > packets to unbound > > device or slaves. > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 0. > > > > - Case: Mode 1(Active Backup) TX/RX Test > > Description: > > Use Setup#1. > > Create bonded device with mode 1 and add 3 ports as slaves > of bonded device, > > Forward packets between bonded device and unbounded > device, start to forward, > > And send packets to unbound device or slaves. > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 1. > > > > - Case: Mode 1(Active Backup) Change active slave, RX/TX test > > Description: > > Use Setup#1. > > Continuing from previous test case.Change the active slave > port from port0 > > to port1.Verify that the bonded device's MAC has changed > to slave1's MAC. > > > > testpmd> set bonding primary 1 4 > > > > Repeat the transmission and reception(TX/RX) test verify > that data is now > > transmitted and received through the new active slave and > no longer through > > port0 > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 1. > > > > - Case: Mode 1(Active Backup) Link up/down active eth dev > > Description: > > Use Setup#1. > > > > Bring link between port A and port0 down. If tester is > ixia, can use > > IxExplorer to set the "Simulate Cable Disconnect" at the > port property. > > Verify that the active slave has been changed from port0. > Repeat the > > transmission and reception test verify that data is now > transmitted and > > received through the new active slave and no longer > through port0 > > > > Bring port0 to link down at the remote end.Verify the > active slave has been changed from port0. > > send 100 packets to port3. > > > > testpmd> show port stats 4----(Verify port3 have 100 rx > packets,meanwhile > > port4 have 100 tx packets,the current primary port have 100 > tx packets,and port0 > > doesn`t have any packet) > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 1. > > > > - Case: Mode 1(Active Backup) Bring all slave links down > > Description: > > Use Setup#1. > > Bring all slave ports of bonded port down. > > Verify that bonded callback for link down is called and > no active slaves. > > Verify that data cannot be sent or received through > bonded port. Send 100 packets > > to port3 and verify that bonded port can't TX 100 packets. > > > > Bring port 0-2 to link down at the remote end. Verify > port4 has been link down and has no active slave. > > Send 100 rx packets to port3. > > > > testpmd> show port stats 4----(Verify port3 have 100 rx > packets,meanwhile > > port4 doesn`t have any packet) > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 1. > > > > - Case: Mode 2(Balance XOR) TX Load Balance test > > Description: > > Use Setup#1. > > Bonded port will activate each slave eth dev based on the > following hash function: > > > > ((dst_mac XOR src_mac) % (number of slave ports)) > > > > Send 300 packets from IXIA port D to non-bonded > port(port3),and verify these packets > > will be forwarded to bonded device. The bonded device > will transimit these packets to all slaves. > > Verify that each slave receive correct number of packets > according to the policy. The total number > > of packets which received by slave should be equal as 300 > packets. > > > > Create 3 streams in the IXIA,which streams source MAC are > 00:00:03:00:0F:00, > > 00:00:03:00:0F:01,00:00:03:00:0F:02 respectively (make > sure generate different value by > > the policy ((dst_mac XOR src_mac) % (number of slave > ports)) ) and dest MAC all is > > 90:E2:BA:4A:54:80(this value should been your unbonded > port address). Respectively > > send 100 packets to port3 by the 3 streams. > > > > testpmd> show port stats all----(Verify port3 have 300 rx > packets, > > port4 have 300 tx packets,and port 0-2 have 100 tx > packets respectively) > > > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 2. > > > > - Case: Mode 2(Balance XOR) TX Load Balance Link down > > Description: > > Use Setup#1. > > ring link down of one slave. > > Send 300 packets from non-bonded port(port3), and verify > these > > packets will be forwarded to bonded device. > > Verify that each active slave receive correct number of > packets > > (according to the mode policy), and the down slave will > not receive packets. > > Link down slave 0 at the remote end.Create 3 streams in the > IXIA like case13. > > Then respectively send 100 packets to port3 by the 3 > streams. > > > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 2. > > > > - Case: Mode 2(Balance XOR) Bring all slave links down > > Description: > > Use Setup#1. > > Bring all slave links down. > > Verify that bonded callback for link down is called. > > Verify no packet can be sent. > > > > Bring all slaves to link down at the remote end.Create > > 3 streams in the IXIA like case13.Then respectively send > 100 packets > > to port3 by the 3 streams. > > > > testpmd> show port info 4----(Verify bonding port has been > linked down) > > testpmd> show port stats all----(Verify port3 have 300 rx > packets,meanwhile > > port 0,1,2 and 4 don`t have > any packet) > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 2. > > > > > > - Case: Mode 2(Balance XOR) Layer 3+4 forwarding > > Description: > > Use Setup#1. > > Use "xmit_hash_policy()" to change to this forwarding mode > > Create a stream of traffic which will exercise all slave > ports using the transmit policy > > > > ((SRC_PORT XOR DST_PORT) XOR ((SRC_IP XOR DST_IP) AND > 0xffff) % # of Slaves > > > > Transmit data through bonded device, verify TX packet count > for each slave port is as expected > > > > Create 3 streams on a port which is mapped with unbonded > port 3 at the IXIA end. > > And set different IP by the transmit policy.Then send 100 > packets on each stream. > > > > testpmd> show port stats all----(Verify port3 have 300 rx > packets, > > meanwhile port4 have 300 rx packets, port 0-2 > have 100 tx packets respectively) > > > > Add Vlan tag in the previouse 3 streams. Everthing else > remains the same. > > Then send 100 packets on each stream. Verify the packet > statics is the same as above. > > > > testpmd> show port stats all----(Verify port3 > > have 300 rx packets,meanwhile port4 have 300 rx > packets,port 0-2 have 100 tx packets respecitvely) > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 2. > > > > - Case: Mode 2(Balance XOR) RX test > > Description: > > Use Setup#1. > > Send 100 packets to each bonded slaves(port0,1,2) > > Verify that each slave receives 100 packets and the bonded > device receive a total 300 packets. > > Verify that the bonded device forwards 300 packets to the > non-bonded port(port4). > > > > Send 100 packets to port0,1,2 respectively. > > > > testpmd> show port stats all----(Verify port0,1,2 > have 100 tx packets respectively > > and port4 have 300 rx packets,and port3 have > 300 tx packets) > > > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 2. > > > > - Case: Mode 3(Broadcast) TX/RX Test > > Description: > > Use Setup#1. > > Add ports 0-2 as slave devices to the bonded port 4. Make > all slaves > > to be active slaves on bonded device. > > > > RX: Send a packet stream(100 packets) from port A on the > traffic > > generator to be forwarded through the bonded port4 to > port3. > > Verify the sum of the packets transmitted from the > traffic generator > > portA is equal the total received packets on port0, > port4 and portD(Traffic generator). > > > > testpmd> show port stats all---(Verify port0 receive > 100 packets, > > and port4 receive 100 packets, and port3 > transmit 100 packets) > > > > TX: Send a packet stream(100 packets) from portD on the > traffic generator > > to be forwarded through port3 to the bonded port4. > Verify the sum of > > the packets(100packets) transmitted from the traffic > generator port is equal the total > > received packets on port4, portA and transmitted to > port0. > > > > testpmd> show port stats all---(Verify port3 RX 100 packets, > > and port0,1,2 TX 100 packets,port4 has 300 TX > packets) > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 3. > > > > > > - Case: Mode 3(Broadcast) Bring one slave link down > > Description: > > Use Setup#1. > > Bring one slave port link down. Send 100 packets through > portD to port3, > > then port3 forwards to bondede device(port4), verify that > the bonded device > > and other slaves TX the correct number of packets(100 > packets for each port). > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 3. > > > > - Case: Mode 3(Broadcast) Bring all slave links down > > Description: > > Use Setup#1. > > Bring all slave ports of bonded port down > > Verify that bonded callback for link down is called > > Verify that data cannot be sent or received through bonded > port. > > Expected test result: > > Verify the RX/TX status of bonded device and slaves in > mode 3. > > > > - Case: Mode 5(Transmit load balance) basic test > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D > > > > Use Setup#1 > > > > Create bonded device. Add first slave - port 0. Verify default bonded > device has default mode 5. > > Verify bonded device MAC address is that of primary slave. Add > another slaves port 1 and 2 to > > the bonded device. Verify that their MAC are different. > > > > Bring the primary slave down. Verify if bonding interface > reconfigured itself. The next port > > (in this scenario port 1) should became a primary one but the MAC > should not be changed - should > > still be the MAC of port 0. > > > > Bring a slave of bonding device down. Verify if bonding interface > reconfigured itself. > > > > Bring the portA, portB and portC down. Verify the bonded device will > link down. > > > > Set bonded device promiscuous mode to be off. Verify only the > promiscuous state of primary > > interface will be off. > > > > > > - Case: Mode 5(Transmit load balance) TX/RX test > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D > > > > Use Setup#1 > > > > Create a bonded device(port4 in this scenario). Add port 0-2 as > slaves of bonding port4. Make > > packets to transmit between port3 and port4. Then start to forward > streams. > > > > TX: Prepare a packet stream which will send packets in 5 minutes. > Send this stream from portD > > to port3. Verify that port3 will receive all packets---no missed > packets and no error packets. > > Port 0-2 transmitting packets will be represented as packet0, packet1 > and packet2 respectively > > and their average packets will be represented as mean. Then verify > port 0-2 will meet the situation: > > mean =3D (packet0 + packet1 + packet2)/3, packet0, packet1 and packet2 > will be higher than 90% of mean > > and lower than 110% of mean. Then the test of port0, port1 and port2 > balancing are finished positive. > > > > RX: A continuation of TX testing setup. Prepare 3 packet streams and > each stream has 100 packets. > > Respectively, send these streams from portA, portB and portC. Verify > only the primary slave port0 will > > receive 100 packets, and port3 will transmit 100 packets. > > > > > > - Case: Mode 5(Transmit load balance) Bring one slave link down > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D > > > > Use Setup#1 > > > > Create a bonded device(port4 in this scenario). Add port0, port1 and > port2 as slaves of bonding port4. > > Make packets to transmit between port3 and port4. Then start to > forward streams. > > > > TX: Prepare a packet stream which will send packets in 5 minutes. > Bringing port0 link down in the remote > > end. Send this stream from portD to port3. After the time of 5 > minutes is out, verify that port3 will receive > > all packets---no missed packets and no error packets. Port 1-2 > transmitting packets will be represented as > > packet1 and packet2 respectively and their average packets will be > represented as mean. Then verify port1 and > > port2 will meet the situation: > > mean =3D (packet1 + packet2)/2, packet1 and packet2 will be higher than > 90% of mean and lower than 110% of mean. > > Then the test of port1 and port2 balancing are finished positive. > > > > RX: Prepare 3 packet streams and each stream has 100 packets. > Respectively, send these streams from portA, portB > > and portC. Verify the primary port(port0 this scenario) will receive > 100 packets, and port1 and port2 will receive > > nothing, and port3 will transmit 100 packets. > > > > > > - Case: Mode 5(Transmit load balance) Bring all slaves link down > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D > > > > Use Setup#1 > > > > First, set the same setup as case 30. Second, bring all slaves link > down. > > > > TX: Prepare 1 packet stream which will have 300 packets. Send this > stream from portD to port3. Verify port0, > > port1 and port2 will transmit nothing. > > > > RX: Prepare 3 packet streams and each stream has 100 packets. > Respectively, send these streams from portA, > > portB and portC. Verify port0, port1 and port2 will receive nothing. > > > > > -----Original Message----- > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pawel > Wodkowski > > > Sent: Friday, March 20, 2015 12:09 AM > > > To: dev@dpdk.org > > > Cc: Wodkowski, PawelX > > > Subject: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non- > bulk > > > alloc mode setup > > > > > > From: Pawel Wodkowski > > > > > > When bulk alloc is enabled at compile time but preconditions for > > > it are not met at runtime the ixgbe_reset_rx_queue() function > > > overrides rxq->sw_ring not allocated elements. > > > > > > Fixes: 01fa1d6 ("ixgbe: unify Rx setup") > > > Signed-off-by: Pawel Wodkowski > > > --- > > > lib/librte_pmd_ixgbe/ixgbe_rxtx.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > > > b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > > > index 42f0aa5..dddc12f 100644 > > > --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > > > +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > > > @@ -2111,8 +2111,8 @@ ixgbe_reset_rx_queue(struct ixgbe_hw *hw, > struct > > > ixgbe_rx_queue *rxq) > > > * entries is always allocated > > > */ > > > memset(&rxq->fake_mbuf, 0x0, sizeof(rxq->fake_mbuf)); > > > - for (i =3D 0; i < RTE_PMD_IXGBE_RX_MAX_BURST; ++i) { > > > - rxq->sw_ring[rxq->nb_rx_desc + i].mbuf =3D &rxq->fake_mbuf; > > > + for (i =3D rxq->nb_rx_desc; i < len; ++i) { > > > + rxq->sw_ring[i].mbuf =3D &rxq->fake_mbuf; > > > } > > > > > > rxq->rx_nb_avail =3D 0; > > > -- > > > 1.9.1 > > >=20