From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ananyev, Konstantin" Subject: Re: [PATCH] ixgbe:Add write memory barrier for recv pkts. Date: Tue, 14 Apr 2015 22:50:15 +0000 Message-ID: <2601191342CEEE43887BDE71AB97725821415A3A@irsmsx105.ger.corp.intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable To: WangDong , "dev-VfR2kkLFssw@public.gmane.org" Return-path: In-Reply-To: Content-Language: en-US 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" Hi, > -----Original Message----- > From: dev [mailto:dev-bounces-VfR2kkLFssw@public.gmane.org] On Behalf Of WangDong > Sent: Saturday, April 11, 2015 4:34 PM > To: dev-VfR2kkLFssw@public.gmane.org > Subject: [dpdk-dev] [PATCH] ixgbe:Add write memory barrier for recv pkts. >=20 > Like transmit packets, before update receive descriptor's tail pointer, r= te_wmb() should be added after writing recv descriptor. >=20 > Signed-off-by: Dong Wang > --- > lib/librte_pmd_ixgbe/ixgbe_rxtx.c | 5 +++++ > 1 file changed, 5 insertions(+) >=20 > diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c b/lib/librte_pmd_ixgbe/ixg= be_rxtx.c > index 9da2c7e..d504688 100644 > --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > @@ -1338,6 +1338,9 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **r= x_pkts, > */ > rx_pkts[nb_rx++] =3D rxm; > } > + > + rte_wmb(); > + Why do you think it is necessary? I can't see any good reason to put wmb() here. I would understand if, at least you'll try to insert it just before updatin= g RDT: rx_id =3D (uint16_t) ((rx_id =3D=3D 0) ? (rxq->nb_rx_desc - 1) : (rx_id - 1)); + rte_wmb(); IXGBE_PCI_REG_WRITE(rxq->rdt_reg_addr, rx_id); That is not needed IA with current implementation, but would make sense for= machines with relaxed memory ordering. Though right now DPDK IXGBE PMD is supported only on IA, anyway. Same for ixgbe_recv_scattered_pkts(). Konstantin > rxq->rx_tail =3D rx_id; >=20 > /* > @@ -1595,6 +1598,8 @@ ixgbe_recv_scattered_pkts(void *rx_queue, struct rt= e_mbuf **rx_pkts, > first_seg =3D NULL; > } >=20 > + rte_wmb(); > + > /* > * Record index of the next RX descriptor to probe. > */ > -- > 1.9.1