> > Since the introduction of vector PMD, a bug in ixgbe_rxq_rearm could > > cause a crash. As long as the memory pool allocated to the RX queue > > has mbufs available, there is no problem. After allocation of _all_ > > mbufs from the memory pool, previously returned mbufs by > > rte_eth_rx_burst could be accessed by subsequent calls to the PMD and > > could be returned by subsequent calls to rte_eth_rx_burst. From the > > perspective of the application, the means that fields within the mbuf > > could change and that previously allocated mbufs could appear multiple > > times. > > > > After failure of mbuf allocation, the dd bits should indicate that the > > packets are not ready. For this, this patch adds code to reset the dd > > bits in the first RTE_IXGBE_DESCS_PER_LOOP packets of the next > > RTE_IXGBE_RXQ_REARM_THRESH packets only if the next > > RTE_IXGBE_RXQ_REARM_THRESH packets that will be accessed contain > > previously allocated packets. > > > > Setting the bits is not enough. The bits are checked _after_ setting > > the mbuf fields, thus a mechanism is needed to prevent the previously > > used mbuf pointers from being accessed during the speculative load of > > the mbuf fields. For this reason, not only the dd bits are reset, but > > also the mbufs associated to those descriptors are set to point to a > > "fake" mbuf. > > > > Signed-off-by: Balazs Nemeth <balazs.nemeth at intel.com> > > Acked-by: Konstantin Ananyev <konstantin.ananyev at intel.com>
Applied Thanks -- Thomas