On 5/1/2018 6:32 PM, gregkh@linuxfoundation.org wrote:
This is a note to let you know that I've just added the patch titled
net: qlge: Eliminate duplicate barriers on weakly-ordered archs
to the 4.16-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git%3Ba=su...
The filename of the patch is: net-qlge-eliminate-duplicate-barriers-on-weakly-ordered-archs.patch and it can be found in the queue-4.16 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let stable@vger.kernel.org know about it.
I don't think these should be pulled at this moment. There is still more barrier work to be done and the patch below goes in the wrong direction after discussion with Linus.
I'm waiting for all architectures to reach to functional parity at the end of 4.17 to pick up from where I left.
There are still few architectures still violating writel() guarantee.
From foo@baz Tue May 1 14:59:17 PDT 2018
From: Sinan Kaya okaya@codeaurora.org Date: Sun, 25 Mar 2018 10:39:19 -0400 Subject: net: qlge: Eliminate duplicate barriers on weakly-ordered archs
From: Sinan Kaya okaya@codeaurora.org
[ Upstream commit e42d8cee343a545ac2d9557a3b28708bbca2bd31 ]
Code includes wmb() followed by writel(). writel() already has a barrier on some architectures like arm64.
This ends up CPU observing two barriers back to back before executing the register write.
Create a new wrapper function with relaxed write operator. Use the new wrapper when a write is following a wmb().
Signed-off-by: Sinan Kaya okaya@codeaurora.org Signed-off-by: David S. Miller davem@davemloft.net Signed-off-by: Sasha Levin alexander.levin@microsoft.com Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
drivers/net/ethernet/qlogic/qlge/qlge.h | 16 ++++++++++++++++ drivers/net/ethernet/qlogic/qlge/qlge_main.c | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-)
--- a/drivers/net/ethernet/qlogic/qlge/qlge.h +++ b/drivers/net/ethernet/qlogic/qlge/qlge.h @@ -2185,6 +2185,22 @@ static inline void ql_write_db_reg(u32 v } /*
- Doorbell Registers:
- Doorbell registers are virtual registers in the PCI memory space.
- The space is allocated by the chip during PCI initialization. The
- device driver finds the doorbell address in BAR 3 in PCI config space.
- The registers are used to control outbound and inbound queues. For
- example, the producer index for an outbound queue. Each queue uses
- 1 4k chunk of memory. The lower half of the space is for outbound
- queues. The upper half is for inbound queues.
- Caller has to guarantee ordering.
- */
+static inline void ql_write_db_reg_relaxed(u32 val, void __iomem *addr) +{
- writel_relaxed(val, addr);
+}
+/*
- Shadow Registers:
- Outbound queues have a consumer index that is maintained by the chip.
- Inbound queues have a producer index that is maintained by the chip.
--- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c @@ -2700,7 +2700,8 @@ static netdev_tx_t qlge_send(struct sk_b tx_ring->prod_idx = 0; wmb();
- ql_write_db_reg(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
- ql_write_db_reg_relaxed(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
- mmiowb(); netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev, "tx queued, slot %d, len %d\n", tx_ring->prod_idx, skb->len);
Patches currently in stable-queue which might be from okaya@codeaurora.org are
queue-4.16/net-qlge-eliminate-duplicate-barriers-on-weakly-ordered-archs.patch
On Tue, May 01, 2018 at 06:39:06PM -0400, Sinan Kaya wrote:
On 5/1/2018 6:32 PM, gregkh@linuxfoundation.org wrote:
This is a note to let you know that I've just added the patch titled
net: qlge: Eliminate duplicate barriers on weakly-ordered archs
to the 4.16-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git%3Ba=su...
The filename of the patch is: net-qlge-eliminate-duplicate-barriers-on-weakly-ordered-archs.patch and it can be found in the queue-4.16 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let stable@vger.kernel.org know about it.
I don't think these should be pulled at this moment. There is still more barrier work to be done and the patch below goes in the wrong direction after discussion with Linus.
I'm waiting for all architectures to reach to functional parity at the end of 4.17 to pick up from where I left.
There are still few architectures still violating writel() guarantee.
Fair enough, thanks for the information, I'll drop this now.
greg k-h
linux-stable-mirror@lists.linaro.org