diff mbox

[SRU,Zesty,Artful}[PATCH,1/1] drivers: net: xgene: Fix redundant prefetch buffer cleanup

Message ID bab605c438903be5a0a730560ac4ae6f31409c6a.1500050804.git.joseph.salisbury@canonical.com
State New
Headers show

Commit Message

Joseph Salisbury July 14, 2017, 8:28 p.m. UTC
From: Iyappan Subramanian <isubramanian@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@apm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 8aba8474181070a30f56ffd19359f5d80665175e)
Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>
---
 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 | 20 --------------------
 drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c | 20 --------------------
 4 files changed, 1 insertion(+), 62 deletions(-)

Comments

Stefan Bader July 17, 2017, 10:44 a.m. UTC | #1
On 14.07.2017 22:28, Joseph Salisbury wrote:
> From: Iyappan Subramanian <isubramanian@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@apm.com>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> (cherry picked from commit 8aba8474181070a30f56ffd19359f5d80665175e)
> Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>

> ---

I think I need a "add justification button"... ;)

-Stefan
>  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 | 20 --------------------
>  drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c | 20 --------------------
>  4 files changed, 1 insertion(+), 62 deletions(-)
> 
> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
> index 06e6816..4492b89 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
> @@ -732,27 +732,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;
> -	int i;
> -
> -	pb = 0;
> -	for (i = 0; i < pdata->rxq_cnt; i++) {
> -		ring = pdata->rx_ring[i]->buf_pool;
> -		pb |= BIT(xgene_enet_get_fpsel(ring->id));
> -		ring = pdata->rx_ring[i]->page_pool;
> -		if (ring)
> -			pb |= BIT(xgene_enet_get_fpsel(ring->id));
> -
> -	}
> -	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];
> -		pb |= BIT(xgene_enet_ring_bufnum(ring->id));
> -	}
> -	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 b3568c4..1e4051c 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
> @@ -2112,8 +2112,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 a8e063b..2062578 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
> @@ -587,26 +587,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;
> -	int i;
> -
> -	pb = 0;
> -	for (i = 0; i < p->rxq_cnt; i++) {
> -		ring = p->rx_ring[i]->buf_pool;
> -		pb |= BIT(xgene_enet_get_fpsel(ring->id));
> -		ring = p->rx_ring[i]->page_pool;
> -		if (ring)
> -			pb |= BIT(xgene_enet_get_fpsel(ring->id));
> -	}
> -	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];
> -		pb |= BIT(xgene_enet_ring_bufnum(ring->id));
> -	}
> -	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 ece19e6..0a3666c 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c
> @@ -457,26 +457,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;
> -	int i;
> -
> -	pb = 0;
> -	for (i = 0; i < pdata->rxq_cnt; i++) {
> -		ring = pdata->rx_ring[i]->buf_pool;
> -		pb |= BIT(xgene_enet_get_fpsel(ring->id));
> -		ring = pdata->rx_ring[i]->page_pool;
> -		if (ring)
> -			pb |= BIT(xgene_enet_get_fpsel(ring->id));
> -	}
> -	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];
> -		pb |= BIT(xgene_enet_ring_bufnum(ring->id));
> -	}
> -	xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIWQRESET_ADDR, pb);
>  
>  	if (dev->of_node) {
>  		if (!IS_ERR(pdata->clk))
>
Seth Forshee July 17, 2017, 1:20 p.m. UTC | #2
On Fri, Jul 14, 2017 at 04:28:59PM -0400, Joseph Salisbury wrote:
> From: Iyappan Subramanian <isubramanian@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@apm.com>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> (cherry picked from commit 8aba8474181070a30f56ffd19359f5d80665175e)
> Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>
> ---

Acked-by: Seth Forshee <seth.forshee@canonical.com>

Applied to artful/master-next and unstable/master, thanks.
diff mbox

Patch

diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
index 06e6816..4492b89 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
@@ -732,27 +732,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;
-	int i;
-
-	pb = 0;
-	for (i = 0; i < pdata->rxq_cnt; i++) {
-		ring = pdata->rx_ring[i]->buf_pool;
-		pb |= BIT(xgene_enet_get_fpsel(ring->id));
-		ring = pdata->rx_ring[i]->page_pool;
-		if (ring)
-			pb |= BIT(xgene_enet_get_fpsel(ring->id));
-
-	}
-	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];
-		pb |= BIT(xgene_enet_ring_bufnum(ring->id));
-	}
-	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 b3568c4..1e4051c 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
@@ -2112,8 +2112,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 a8e063b..2062578 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
@@ -587,26 +587,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;
-	int i;
-
-	pb = 0;
-	for (i = 0; i < p->rxq_cnt; i++) {
-		ring = p->rx_ring[i]->buf_pool;
-		pb |= BIT(xgene_enet_get_fpsel(ring->id));
-		ring = p->rx_ring[i]->page_pool;
-		if (ring)
-			pb |= BIT(xgene_enet_get_fpsel(ring->id));
-	}
-	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];
-		pb |= BIT(xgene_enet_ring_bufnum(ring->id));
-	}
-	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 ece19e6..0a3666c 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_xgmac.c
@@ -457,26 +457,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;
-	int i;
-
-	pb = 0;
-	for (i = 0; i < pdata->rxq_cnt; i++) {
-		ring = pdata->rx_ring[i]->buf_pool;
-		pb |= BIT(xgene_enet_get_fpsel(ring->id));
-		ring = pdata->rx_ring[i]->page_pool;
-		if (ring)
-			pb |= BIT(xgene_enet_get_fpsel(ring->id));
-	}
-	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];
-		pb |= BIT(xgene_enet_ring_bufnum(ring->id));
-	}
-	xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIWQRESET_ADDR, pb);
 
 	if (dev->of_node) {
 		if (!IS_ERR(pdata->clk))