From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [PATCH] ixgbe: fix crash caused by bulk allocation failure in vector pmd Date: Mon, 29 Sep 2014 13:00:57 +0200 Message-ID: <3180739.dqlX9CSYNs@xps13> References: <1411725440-4520-1-git-send-email-balazs.nemeth@intel.com> <2601191342CEEE43887BDE71AB9772582137C148@IRSMSX104.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: dev-VfR2kkLFssw@public.gmane.org To: "Nemeth, Balazs" Return-path: In-Reply-To: <2601191342CEEE43887BDE71AB9772582137C148-kPTMFJFq+rGvNW/NfzhIbrfspsVTdybXVpNB7YpNyf8@public.gmane.org> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" > > 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 > > Acked-by: Konstantin Ananyev Applied Thanks -- Thomas