Message ID | 20200103164459.71954-1-liran.alon@oracle.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [v2] net: Google gve: Remove dma_wmb() before ringing doorbell | expand |
From: Liran Alon <liran.alon@oracle.com> Date: Fri, 3 Jan 2020 18:44:59 +0200 > Current code use dma_wmb() to ensure Rx/Tx descriptors are visible > to device before writing to doorbell. > > However, these dma_wmb() are wrong and unnecessary. Therefore, > they should be removed. > > iowrite32be() called from gve_rx_write_doorbell()/gve_tx_put_doorbell() > should guaratee that all previous writes to WB/UC memory is visible to > device before the write done by iowrite32be(). > > E.g. On ARM64, iowrite32be() calls __iowmb() which expands to dma_wmb() > and only then calls __raw_writel(). > > Reviewed-by: Si-Wei Liu <si-wei.liu@oracle.com> > Signed-off-by: Liran Alon <liran.alon@oracle.com> Applied, thank you.
diff --git a/drivers/net/ethernet/google/gve/gve_rx.c b/drivers/net/ethernet/google/gve/gve_rx.c index edec61dfc868..9f52e72ff641 100644 --- a/drivers/net/ethernet/google/gve/gve_rx.c +++ b/drivers/net/ethernet/google/gve/gve_rx.c @@ -418,8 +418,6 @@ bool gve_clean_rx_done(struct gve_rx_ring *rx, int budget, rx->cnt = cnt; rx->fill_cnt += work_done; - /* restock desc ring slots */ - dma_wmb(); /* Ensure descs are visible before ringing doorbell */ gve_rx_write_doorbell(priv, rx); return gve_rx_work_pending(rx); } diff --git a/drivers/net/ethernet/google/gve/gve_tx.c b/drivers/net/ethernet/google/gve/gve_tx.c index f4889431f9b7..d0244feb0301 100644 --- a/drivers/net/ethernet/google/gve/gve_tx.c +++ b/drivers/net/ethernet/google/gve/gve_tx.c @@ -487,10 +487,6 @@ netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev) * may have added descriptors without ringing the doorbell. */ - /* Ensure tx descs from a prior gve_tx are visible before - * ringing doorbell. - */ - dma_wmb(); gve_tx_put_doorbell(priv, tx->q_resources, tx->req); return NETDEV_TX_BUSY; } @@ -505,8 +501,6 @@ netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev) if (!netif_xmit_stopped(tx->netdev_txq) && netdev_xmit_more()) return NETDEV_TX_OK; - /* Ensure tx descs are visible before ringing doorbell */ - dma_wmb(); gve_tx_put_doorbell(priv, tx->q_resources, tx->req); return NETDEV_TX_OK; }