ACK: [SRU][Xenial][Yakkety][PATCH 1/1] drivers: net: xgene: Fix redundant prefetch buffer cleanup
Stefan Bader
stefan.bader at canonical.com
Mon Jul 17 10:46:54 UTC 2017
On 14.07.2017 22:35, Joseph Salisbury wrote:
> From: Iyappan Subramanian <isubramanian at apm.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1693673
>
> Prefetch buffer cleanup code was called twice, causing EDAC to
> report errors during reboot.
>
> [ 1130.972475] xgene-edac 78800000.edac: IOB bridge agent (BA) transaction
> error
> [ 1130.979584] xgene-edac 78800000.edac: IOB BA write response error
> [ 1130.985648] xgene-edac 78800000.edac: IOB BA write access at 0x00.00000000
> ()
> [ 1130.993612] xgene-edac 78800000.edac: IOB BA requestor ID 0x00002400
> [ 1131.000242] xgene-edac 78800000.edac: IOB bridge agent (BA) transaction
> error
> ...
>
> This patch fixes the errors by,
>
> - removing the redundant prefetch buffer cleanup from port_ops->shutdown()
> - moving port_ops->shutdown() after delete_rings()
>
> Signed-off-by: Iyappan Subramanian <isubramanian at apm.com>
> Signed-off-by: David S. Miller <davem at davemloft.net>
> (back ported from commit 8aba8474181070a30f56ffd19359f5d80665175e)
> Signed-off-by: Joseph Salisbury <joseph.salisbury at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
Again like for Z/A...
> drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | 21 ---------------------
> drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 2 +-
> drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c | 21 ---------------------
> drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c | 21 ---------------------
> 4 files changed, 1 insertion(+), 64 deletions(-)
>
> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
> index 18bb955..3ca84af 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
> @@ -681,27 +681,6 @@ static void xgene_enet_clear(struct xgene_enet_pdata *pdata,
> static void xgene_gport_shutdown(struct xgene_enet_pdata *pdata)
> {
> struct device *dev = &pdata->pdev->dev;
> - struct xgene_enet_desc_ring *ring;
> - u32 pb, val;
> - int i;
> -
> - pb = 0;
> - for (i = 0; i < pdata->rxq_cnt; i++) {
> - ring = pdata->rx_ring[i]->buf_pool;
> -
> - val = xgene_enet_ring_bufnum(ring->id);
> - pb |= BIT(val - 0x20);
> - }
> - xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIFPRESET_ADDR, pb);
> -
> - pb = 0;
> - for (i = 0; i < pdata->txq_cnt; i++) {
> - ring = pdata->tx_ring[i];
> -
> - val = xgene_enet_ring_bufnum(ring->id);
> - pb |= BIT(val);
> - }
> - xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIWQRESET_ADDR, pb);
>
> if (dev->of_node) {
> if (!IS_ERR(pdata->clk))
> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
> index d1d6b5e..f58971f 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
> @@ -1706,8 +1706,8 @@ static int xgene_enet_remove(struct platform_device *pdev)
> xgene_enet_mdio_remove(pdata);
>
> unregister_netdev(ndev);
> - pdata->port_ops->shutdown(pdata);
> xgene_enet_delete_desc_rings(pdata);
> + pdata->port_ops->shutdown(pdata);
> free_netdev(ndev);
>
> return 0;
> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
> index d12e9cb..aa46458 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
> @@ -527,27 +527,6 @@ static void xgene_enet_clear(struct xgene_enet_pdata *pdata,
> static void xgene_enet_shutdown(struct xgene_enet_pdata *p)
> {
> struct device *dev = &p->pdev->dev;
> - struct xgene_enet_desc_ring *ring;
> - u32 pb, val;
> - int i;
> -
> - pb = 0;
> - for (i = 0; i < p->rxq_cnt; i++) {
> - ring = p->rx_ring[i]->buf_pool;
> -
> - val = xgene_enet_ring_bufnum(ring->id);
> - pb |= BIT(val - 0x20);
> - }
> - xgene_enet_wr_ring_if(p, ENET_CFGSSQMIFPRESET_ADDR, pb);
> -
> - pb = 0;
> - for (i = 0; i < p->txq_cnt; i++) {
> - ring = p->tx_ring[i];
> -
> - val = xgene_enet_ring_bufnum(ring->id);
> - pb |= BIT(val);
> - }
> - xgene_enet_wr_ring_if(p, ENET_CFGSSQMIWQRESET_ADDR, pb);
>
> if (dev->of_node) {
> if (!IS_ERR(p->clk))
> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c b/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c
> index 9c6ad0d..0f706f8 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c
> @@ -309,27 +309,6 @@ static void xgene_enet_xgcle_bypass(struct xgene_enet_pdata *pdata,
> static void xgene_enet_shutdown(struct xgene_enet_pdata *pdata)
> {
> struct device *dev = &pdata->pdev->dev;
> - struct xgene_enet_desc_ring *ring;
> - u32 pb, val;
> - int i;
> -
> - pb = 0;
> - for (i = 0; i < pdata->rxq_cnt; i++) {
> - ring = pdata->rx_ring[i]->buf_pool;
> -
> - val = xgene_enet_ring_bufnum(ring->id);
> - pb |= BIT(val - 0x20);
> - }
> - xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIFPRESET_ADDR, pb);
> -
> - pb = 0;
> - for (i = 0; i < pdata->txq_cnt; i++) {
> - ring = pdata->tx_ring[i];
> -
> - val = xgene_enet_ring_bufnum(ring->id);
> - pb |= BIT(val);
> - }
> - xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIWQRESET_ADDR, pb);
>
> if (dev->of_node) {
> if (!IS_ERR(pdata->clk))
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20170717/244eb636/attachment.sig>
More information about the kernel-team
mailing list