Re: [PATCH 1/1] qlcnic: add wmb() call in transmit data path.
From: Sony ChackoDate: Wed, 29 Jun 2016 17:51:34 -0400 > Call wmb() to ensure writes are complete before > hardware fetches updated Tx descriptors. > > Signed-off-by: Sony Chacko Applied, thanks.
RE: [PATCH 1/1] qlcnic: add wmb() call in transmit data path.
Subject: Re: [PATCH 1/1] qlcnic: add wmb() call in transmit data path. > >> +/* Ensure writes are complete before HW fetches Tx descriptors */ >> +wmb(); >> qlcnic_update_cmd_producer(tx_ring); >> >> return NETDEV_TX_OK; >> > > Would not an mmiowb be more appropriate in this case? > > Regards, > Lino Sorry, this was nonsense.This should be "dma_wmb" not "mmiowb". Lino, The patch is based on this kernel documentation. https://www.kernel.org/doc/Documentation/memory-barriers.txt /* force memory to sync before notifying device via MMIO */ wmb(); /* notify device of new descriptors */ writel(DESC_NOTIFY, doorbell); } The wmb() is needed to guarantee that the cache coherent memory writes have completed before attempting a write to the cache incoherent MMIO region. Thanks, Sony
Re: [PATCH 1/1] qlcnic: add wmb() call in transmit data path.
On 30.06.2016 17:32, Lino Sanfilippo wrote: Hi, On 29.06.2016 23:51, Sony Chacko wrote: +/* Ensure writes are complete before HW fetches Tx descriptors */ +wmb(); qlcnic_update_cmd_producer(tx_ring); return NETDEV_TX_OK; Would not an mmiowb be more appropriate in this case? Regards, Lino Sorry, this was nonsense. This should be "dma_wmb" not "mmiowb". Regards, Lino
Re: [PATCH 1/1] qlcnic: add wmb() call in transmit data path.
Hi, On 29.06.2016 23:51, Sony Chacko wrote: + /* Ensure writes are complete before HW fetches Tx descriptors */ + wmb(); qlcnic_update_cmd_producer(tx_ring); return NETDEV_TX_OK; Would not an mmiowb be more appropriate in this case? Regards, Lino
[PATCH 1/1] qlcnic: add wmb() call in transmit data path.
Call wmb() to ensure writes are complete before hardware fetches updated Tx descriptors. Signed-off-by: Sony Chacko--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c index 607bb7d..87c642d 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c @@ -772,6 +772,8 @@ netdev_tx_t qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev) tx_ring->tx_stats.tx_bytes += skb->len; tx_ring->tx_stats.xmit_called++; + /* Ensure writes are complete before HW fetches Tx descriptors */ + wmb(); qlcnic_update_cmd_producer(tx_ring); return NETDEV_TX_OK; -- 1.7.1