igb/ixgbe: fix index overflow when resetting big queues
authorThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 15 Nov 2013 11:08:10 +0000 (12:08 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 3 Jan 2014 16:08:09 +0000 (17:08 +0100)
commite8ae856140bce4e470005ecc02dfa5f7c433f2eb
tree0f1319ae0eabd7ee72e5a99584a470d382d612da
parent06bea48c368b2cd00826931f0f7d5c621e781a89
igb/ixgbe: fix index overflow when resetting big queues

Rings are resetted with a loop because memset cannot be used without
issuing a warning about volatile casting.
The index of the loop was a 16-bit variable which is sufficient for
ring entries number but not for the byte size of the whole ring.
The overflow happens when rings are configured for 4096 entries
(descriptor size is 16 bytes). The result is an endless loop.

It is fixed by indexing ring entries and resetting all bytes of the entry
with a simple assignment.
The descriptor initializer is zeroed thanks to its static declaration.

There already was a fix for ixgbe Tx only
(commit bcf457f8c0d64a5cb094fd55836b324bddb930b6).
It is reverted to use the same fix everywhere (Rx/Tx for igb/ixgbe).

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Ivan Boule <ivan.boule@6wind.com>
lib/librte_pmd_e1000/igb_rxtx.c
lib/librte_pmd_ixgbe/ixgbe_rxtx.c