[dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non-bulk alloc mode setup

Jiajia, SunX sunx.jiajia at intel.com
Mon Mar 23 03:10:22 CET 2015


Hi Thomas,

> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monjalon at 6wind.com]
> Sent: Saturday, March 21, 2015 5:46 AM
> To: Jiajia, SunX
> Cc: dev at dpdk.org; Wodkowski, PawelX
> Subject: Re: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non-
> bulk alloc mode setup
> 
> 2015-03-20 06:50, Jiajia, SunX:
> > Tested-by: Jiajia, SunX <sunx.jiajia at intel.com>
> > - Tested Commit: fe4810a01e57645ad92577d628f562791408ce21
> 
> 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 found, 
Sorry for making you confused. BTW, I found this issue in the 
dpdk-2.0.0-rc2, which commit id is 1a5994ac2ce11c112d9eed69c08311b31ac7f3d2.

> 
> > - 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
> 
> 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. 

> 
> > 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
> > ================================
> >
> > 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
> >
> =======================================================================
> =====
> >
> > 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
> >
> =======================================================================
> =====
> >
> > 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 = (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
> >
> =======================================================================
> =====
> >
> > 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 = (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
> >
> =======================================================================
> ======
> >
> > 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 at dpdk.org] On Behalf Of Pawel
> Wodkowski
> > > Sent: Friday, March 20, 2015 12:09 AM
> > > To: dev at dpdk.org
> > > Cc: Wodkowski, PawelX
> > > Subject: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non-
> bulk
> > > alloc mode setup
> > >
> > > From: Pawel Wodkowski <pawelx.wdkowski at intel.com>
> > >
> > > 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 <pawelx.wodkowski at intel.com>
> > > ---
> > >  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 = 0; i < RTE_PMD_IXGBE_RX_MAX_BURST; ++i) {
> > > -		rxq->sw_ring[rxq->nb_rx_desc + i].mbuf = &rxq->fake_mbuf;
> > > +	for (i = rxq->nb_rx_desc; i < len; ++i) {
> > > +		rxq->sw_ring[i].mbuf = &rxq->fake_mbuf;
> > >  	}
> > >
> > >  	rxq->rx_nb_avail = 0;
> > > --
> > > 1.9.1
> >
> 



More information about the dev mailing list