All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: fec: Fixed panic problem with non-tso
@ 2017-01-17  7:48 Yuusuke Ashiduka
  2017-01-17 11:02 ` Andy Duan
  2017-01-17 20:45 ` David Miller
  0 siblings, 2 replies; 16+ messages in thread
From: Yuusuke Ashiduka @ 2017-01-17  7:48 UTC (permalink / raw)
  To: fugang.duan; +Cc: netdev, Yuusuke Ashiduka

If highmem and 2GB or more of memory are valid,
"this_frag-> page.p" indicates the highmem area,
so the result of page_address() is NULL and panic occurs.

This commit fixes this by using the skb_frag_dma_map() helper,
which takes care of mapping the skb fragment properly. Additionally,
the type of mapping is now tracked, so it can be unmapped using
dma_unmap_page or dma_unmap_single when appropriate.
---
 drivers/net/ethernet/freescale/fec.h      |  1 +
 drivers/net/ethernet/freescale/fec_main.c | 48 +++++++++++++++++++++++--------
 2 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index 5ea740b4cf14..5b187e8aacf0 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -463,6 +463,7 @@ struct bufdesc_prop {
 struct fec_enet_priv_tx_q {
 	struct bufdesc_prop bd;
 	unsigned char *tx_bounce[TX_RING_SIZE];
+	int tx_page_mapping[TX_RING_SIZE];
 	struct  sk_buff *tx_skbuff[TX_RING_SIZE];
 
 	unsigned short tx_stop_threshold;
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 38160c2bebcb..b1562107e337 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -60,6 +60,7 @@
 #include <linux/if_vlan.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/prefetch.h>
+#include <linux/highmem.h>
 #include <soc/imx/cpuidle.h>
 
 #include <asm/cacheflush.h>
@@ -377,20 +378,28 @@ fec_enet_txq_submit_frag_skb(struct fec_enet_priv_tx_q *txq,
 			ebdp->cbd_esc = cpu_to_fec32(estatus);
 		}
 
-		bufaddr = page_address(this_frag->page.p) + this_frag->page_offset;
-
 		index = fec_enet_get_bd_index(bdp, &txq->bd);
-		if (((unsigned long) bufaddr) & fep->tx_align ||
+		txq->tx_page_mapping[index] = 0;
+		if (this_frag->page_offset & fep->tx_align ||
 			fep->quirks & FEC_QUIRK_SWAP_FRAME) {
+			bufaddr = kmap_atomic(this_frag->page.p) +
+						this_frag->page_offset;
 			memcpy(txq->tx_bounce[index], bufaddr, frag_len);
+			kunmap_atomic(bufaddr);
 			bufaddr = txq->tx_bounce[index];
 
 			if (fep->quirks & FEC_QUIRK_SWAP_FRAME)
 				swap_buffer(bufaddr, frag_len);
+			addr = dma_map_single(&fep->pdev->dev,
+					      bufaddr,
+					      frag_len,
+					      DMA_TO_DEVICE);
+		} else {
+			txq->tx_page_mapping[index] = 1;
+			addr = skb_frag_dma_map(&fep->pdev->dev, this_frag, 0,
+						frag_len, DMA_TO_DEVICE);
 		}
 
-		addr = dma_map_single(&fep->pdev->dev, bufaddr, frag_len,
-				      DMA_TO_DEVICE);
 		if (dma_mapping_error(&fep->pdev->dev, addr)) {
 			if (net_ratelimit())
 				netdev_err(ndev, "Tx DMA memory map failed\n");
@@ -411,8 +420,16 @@ fec_enet_txq_submit_frag_skb(struct fec_enet_priv_tx_q *txq,
 	bdp = txq->bd.cur;
 	for (i = 0; i < frag; i++) {
 		bdp = fec_enet_get_nextdesc(bdp, &txq->bd);
-		dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp->cbd_bufaddr),
-				 fec16_to_cpu(bdp->cbd_datlen), DMA_TO_DEVICE);
+		if (txq->tx_page_mapping[index])
+			dma_unmap_page(&fep->pdev->dev,
+				       fec32_to_cpu(bdp->cbd_bufaddr),
+				       fec16_to_cpu(bdp->cbd_datlen),
+				       DMA_TO_DEVICE);
+		else
+			dma_unmap_single(&fep->pdev->dev,
+					 fec32_to_cpu(bdp->cbd_bufaddr),
+					 fec16_to_cpu(bdp->cbd_datlen),
+					 DMA_TO_DEVICE);
 	}
 	return ERR_PTR(-ENOMEM);
 }
@@ -1201,11 +1218,18 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_id)
 
 		skb = txq->tx_skbuff[index];
 		txq->tx_skbuff[index] = NULL;
-		if (!IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr)))
-			dma_unmap_single(&fep->pdev->dev,
-					 fec32_to_cpu(bdp->cbd_bufaddr),
-					 fec16_to_cpu(bdp->cbd_datlen),
-					 DMA_TO_DEVICE);
+		if (!IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr))) {
+			if (txq->tx_page_mapping[index])
+				dma_unmap_page(&fep->pdev->dev,
+					       fec32_to_cpu(bdp->cbd_bufaddr),
+					       fec16_to_cpu(bdp->cbd_datlen),
+					       DMA_TO_DEVICE);
+			else
+				dma_unmap_single(&fep->pdev->dev,
+						 fec32_to_cpu(bdp->cbd_bufaddr),
+						 fec16_to_cpu(bdp->cbd_datlen),
+						 DMA_TO_DEVICE);
+		}
 		bdp->cbd_bufaddr = cpu_to_fec32(0);
 		if (!skb)
 			goto skb_done;
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* RE: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-17  7:48 [PATCH] net: fec: Fixed panic problem with non-tso Yuusuke Ashiduka
@ 2017-01-17 11:02 ` Andy Duan
  2017-01-18  3:12   ` Ashizuka, Yuusuke
  2017-01-17 20:45 ` David Miller
  1 sibling, 1 reply; 16+ messages in thread
From: Andy Duan @ 2017-01-17 11:02 UTC (permalink / raw)
  To: Yuusuke Ashiduka; +Cc: netdev

From: Yuusuke Ashiduka <ashiduka@jp.fujitsu.com> Sent: Tuesday, January 17, 2017 3:48 PM
>To: Andy Duan <fugang.duan@nxp.com>
>Cc: netdev@vger.kernel.org; Yuusuke Ashiduka <ashiduka@jp.fujitsu.com>
>Subject: [PATCH] net: fec: Fixed panic problem with non-tso
>
>If highmem and 2GB or more of memory are valid, "this_frag-> page.p"
>indicates the highmem area, so the result of page_address() is NULL and panic
>occurs.
>
>This commit fixes this by using the skb_frag_dma_map() helper, which takes
>care of mapping the skb fragment properly. Additionally, the type of mapping
>is now tracked, so it can be unmapped using dma_unmap_page or
>dma_unmap_single when appropriate.
>---
> drivers/net/ethernet/freescale/fec.h      |  1 +
> drivers/net/ethernet/freescale/fec_main.c | 48
>+++++++++++++++++++++++--------
> 2 files changed, 37 insertions(+), 12 deletions(-)
>
The patch itself seems fine.
The driver doesn't support skb from highmem, if to support highmem, it should add frag_skb (highmem) support for tso and non-tso.
In driver net/core/tso.c, it also add highmem support, right ? 

Thanks.

>diff --git a/drivers/net/ethernet/freescale/fec.h
>b/drivers/net/ethernet/freescale/fec.h
>index 5ea740b4cf14..5b187e8aacf0 100644
>--- a/drivers/net/ethernet/freescale/fec.h
>+++ b/drivers/net/ethernet/freescale/fec.h
>@@ -463,6 +463,7 @@ struct bufdesc_prop {  struct fec_enet_priv_tx_q {
> 	struct bufdesc_prop bd;
> 	unsigned char *tx_bounce[TX_RING_SIZE];
>+	int tx_page_mapping[TX_RING_SIZE];
> 	struct  sk_buff *tx_skbuff[TX_RING_SIZE];
>
> 	unsigned short tx_stop_threshold;
>diff --git a/drivers/net/ethernet/freescale/fec_main.c
>b/drivers/net/ethernet/freescale/fec_main.c
>index 38160c2bebcb..b1562107e337 100644
>--- a/drivers/net/ethernet/freescale/fec_main.c
>+++ b/drivers/net/ethernet/freescale/fec_main.c
>@@ -60,6 +60,7 @@
> #include <linux/if_vlan.h>
> #include <linux/pinctrl/consumer.h>
> #include <linux/prefetch.h>
>+#include <linux/highmem.h>
> #include <soc/imx/cpuidle.h>
>
> #include <asm/cacheflush.h>
>@@ -377,20 +378,28 @@ fec_enet_txq_submit_frag_skb(struct
>fec_enet_priv_tx_q *txq,
> 			ebdp->cbd_esc = cpu_to_fec32(estatus);
> 		}
>
>-		bufaddr = page_address(this_frag->page.p) + this_frag-
>>page_offset;
>-
> 		index = fec_enet_get_bd_index(bdp, &txq->bd);
>-		if (((unsigned long) bufaddr) & fep->tx_align ||
>+		txq->tx_page_mapping[index] = 0;
>+		if (this_frag->page_offset & fep->tx_align ||
> 			fep->quirks & FEC_QUIRK_SWAP_FRAME) {
>+			bufaddr = kmap_atomic(this_frag->page.p) +
>+						this_frag->page_offset;
> 			memcpy(txq->tx_bounce[index], bufaddr, frag_len);
>+			kunmap_atomic(bufaddr);
> 			bufaddr = txq->tx_bounce[index];
>
> 			if (fep->quirks & FEC_QUIRK_SWAP_FRAME)
> 				swap_buffer(bufaddr, frag_len);
>+			addr = dma_map_single(&fep->pdev->dev,
>+					      bufaddr,
>+					      frag_len,
>+					      DMA_TO_DEVICE);
>+		} else {
>+			txq->tx_page_mapping[index] = 1;
>+			addr = skb_frag_dma_map(&fep->pdev->dev,
>this_frag, 0,
>+						frag_len, DMA_TO_DEVICE);
> 		}
>
>-		addr = dma_map_single(&fep->pdev->dev, bufaddr, frag_len,
>-				      DMA_TO_DEVICE);
> 		if (dma_mapping_error(&fep->pdev->dev, addr)) {
> 			if (net_ratelimit())
> 				netdev_err(ndev, "Tx DMA memory map
>failed\n"); @@ -411,8 +420,16 @@ fec_enet_txq_submit_frag_skb(struct
>fec_enet_priv_tx_q *txq,
> 	bdp = txq->bd.cur;
> 	for (i = 0; i < frag; i++) {
> 		bdp = fec_enet_get_nextdesc(bdp, &txq->bd);
>-		dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp-
>>cbd_bufaddr),
>-				 fec16_to_cpu(bdp->cbd_datlen),
>DMA_TO_DEVICE);
>+		if (txq->tx_page_mapping[index])
>+			dma_unmap_page(&fep->pdev->dev,
>+				       fec32_to_cpu(bdp->cbd_bufaddr),
>+				       fec16_to_cpu(bdp->cbd_datlen),
>+				       DMA_TO_DEVICE);
>+		else
>+			dma_unmap_single(&fep->pdev->dev,
>+					 fec32_to_cpu(bdp->cbd_bufaddr),
>+					 fec16_to_cpu(bdp->cbd_datlen),
>+					 DMA_TO_DEVICE);
> 	}
> 	return ERR_PTR(-ENOMEM);
> }
>@@ -1201,11 +1218,18 @@ fec_enet_tx_queue(struct net_device *ndev, u16
>queue_id)
>
> 		skb = txq->tx_skbuff[index];
> 		txq->tx_skbuff[index] = NULL;
>-		if (!IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr)))
>-			dma_unmap_single(&fep->pdev->dev,
>-					 fec32_to_cpu(bdp->cbd_bufaddr),
>-					 fec16_to_cpu(bdp->cbd_datlen),
>-					 DMA_TO_DEVICE);
>+		if (!IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr)))
>{
>+			if (txq->tx_page_mapping[index])
>+				dma_unmap_page(&fep->pdev->dev,
>+					       fec32_to_cpu(bdp->cbd_bufaddr),
>+					       fec16_to_cpu(bdp->cbd_datlen),
>+					       DMA_TO_DEVICE);
>+			else
>+				dma_unmap_single(&fep->pdev->dev,
>+						 fec32_to_cpu(bdp-
>>cbd_bufaddr),
>+						 fec16_to_cpu(bdp-
>>cbd_datlen),
>+						 DMA_TO_DEVICE);
>+		}
> 		bdp->cbd_bufaddr = cpu_to_fec32(0);
> 		if (!skb)
> 			goto skb_done;
>--
>2.11.0

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-17  7:48 [PATCH] net: fec: Fixed panic problem with non-tso Yuusuke Ashiduka
  2017-01-17 11:02 ` Andy Duan
@ 2017-01-17 20:45 ` David Miller
  2017-01-18  3:20   ` Ashizuka, Yuusuke
  2017-01-18  4:11   ` [PATCH v2] " Yuusuke Ashiduka
  1 sibling, 2 replies; 16+ messages in thread
From: David Miller @ 2017-01-17 20:45 UTC (permalink / raw)
  To: ashiduka; +Cc: fugang.duan, netdev

From: Yuusuke Ashiduka <ashiduka@jp.fujitsu.com>
Date: Tue, 17 Jan 2017 16:48:20 +0900

> If highmem and 2GB or more of memory are valid,
> "this_frag-> page.p" indicates the highmem area,
> so the result of page_address() is NULL and panic occurs.
> 
> This commit fixes this by using the skb_frag_dma_map() helper,
> which takes care of mapping the skb fragment properly. Additionally,
> the type of mapping is now tracked, so it can be unmapped using
> dma_unmap_page or dma_unmap_single when appropriate.

This patch submission is lacking a proper signoff.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-17 11:02 ` Andy Duan
@ 2017-01-18  3:12   ` Ashizuka, Yuusuke
  2017-01-18  4:21     ` Eric Dumazet
  0 siblings, 1 reply; 16+ messages in thread
From: Ashizuka, Yuusuke @ 2017-01-18  3:12 UTC (permalink / raw)
  To: Andy Duan; +Cc: netdev

> -----Original Message-----
> From: Andy Duan [mailto:fugang.duan@nxp.com]
> Sent: Tuesday, January 17, 2017 8:02 PM
> To: Ashizuka, Yuusuke/芦塚 雄介
> Cc: netdev@vger.kernel.org
> Subject: RE: [PATCH] net: fec: Fixed panic problem with non-tso
> 
> From: Yuusuke Ashiduka <ashiduka@jp.fujitsu.com> Sent: Tuesday, January
> 17, 2017 3:48 PM
> >To: Andy Duan <fugang.duan@nxp.com>
> >Cc: netdev@vger.kernel.org; Yuusuke Ashiduka <ashiduka@jp.fujitsu.com>
> >Subject: [PATCH] net: fec: Fixed panic problem with non-tso
> >
> >If highmem and 2GB or more of memory are valid, "this_frag-> page.p"
> >indicates the highmem area, so the result of page_address() is NULL and
> >panic occurs.
> >
> >This commit fixes this by using the skb_frag_dma_map() helper, which
> >takes care of mapping the skb fragment properly. Additionally, the type
> >of mapping is now tracked, so it can be unmapped using dma_unmap_page
> >or dma_unmap_single when appropriate.
> >---
> > drivers/net/ethernet/freescale/fec.h      |  1 +
> > drivers/net/ethernet/freescale/fec_main.c | 48
> >+++++++++++++++++++++++--------
> > 2 files changed, 37 insertions(+), 12 deletions(-)
> >
> The patch itself seems fine.
> The driver doesn't support skb from highmem, if to support highmem, it should
> add frag_skb (highmem) support for tso and non-tso.
> In driver net/core/tso.c, it also add highmem support, right ?

indeed.

In the case of TSO with i.MX6 system (highmem enabled) with 2GB memory,
"this_frag->page.p" did not become highmem area.
(We confirmed by transferring about 100MB of files)

However, in the case of non-tso on an i.MX6 system with 2GB of memory,
"this_frag->page.p" may become a highmem area.
(Occurred with approximately 2MB of file transfer)

For non-tso only, I do not know the reason why "this_frag-> page.p" 
in this driver shows highmem area.

Thanks.

> 
> Thanks.
> 
> >diff --git a/drivers/net/ethernet/freescale/fec.h
> >b/drivers/net/ethernet/freescale/fec.h
> >index 5ea740b4cf14..5b187e8aacf0 100644
> >--- a/drivers/net/ethernet/freescale/fec.h
> >+++ b/drivers/net/ethernet/freescale/fec.h
> >@@ -463,6 +463,7 @@ struct bufdesc_prop {  struct fec_enet_priv_tx_q {
> > 	struct bufdesc_prop bd;
> > 	unsigned char *tx_bounce[TX_RING_SIZE];
> >+	int tx_page_mapping[TX_RING_SIZE];
> > 	struct  sk_buff *tx_skbuff[TX_RING_SIZE];
> >
> > 	unsigned short tx_stop_threshold;
> >diff --git a/drivers/net/ethernet/freescale/fec_main.c
> >b/drivers/net/ethernet/freescale/fec_main.c
> >index 38160c2bebcb..b1562107e337 100644
> >--- a/drivers/net/ethernet/freescale/fec_main.c
> >+++ b/drivers/net/ethernet/freescale/fec_main.c
> >@@ -60,6 +60,7 @@
> > #include <linux/if_vlan.h>
> > #include <linux/pinctrl/consumer.h>
> > #include <linux/prefetch.h>
> >+#include <linux/highmem.h>
> > #include <soc/imx/cpuidle.h>
> >
> > #include <asm/cacheflush.h>
> >@@ -377,20 +378,28 @@ fec_enet_txq_submit_frag_skb(struct
> >fec_enet_priv_tx_q *txq,
> > 			ebdp->cbd_esc = cpu_to_fec32(estatus);
> > 		}
> >
> >-		bufaddr = page_address(this_frag->page.p) + this_frag-
> >>page_offset;
> >-
> > 		index = fec_enet_get_bd_index(bdp, &txq->bd);
> >-		if (((unsigned long) bufaddr) & fep->tx_align ||
> >+		txq->tx_page_mapping[index] = 0;
> >+		if (this_frag->page_offset & fep->tx_align ||
> > 			fep->quirks & FEC_QUIRK_SWAP_FRAME) {
> >+			bufaddr = kmap_atomic(this_frag->page.p) +
> >+
> 	this_frag->page_offset;
> > 			memcpy(txq->tx_bounce[index], bufaddr,
> frag_len);
> >+			kunmap_atomic(bufaddr);
> > 			bufaddr = txq->tx_bounce[index];
> >
> > 			if (fep->quirks & FEC_QUIRK_SWAP_FRAME)
> > 				swap_buffer(bufaddr, frag_len);
> >+			addr = dma_map_single(&fep->pdev->dev,
> >+					      bufaddr,
> >+					      frag_len,
> >+					      DMA_TO_DEVICE);
> >+		} else {
> >+			txq->tx_page_mapping[index] = 1;
> >+			addr = skb_frag_dma_map(&fep->pdev->dev,
> >this_frag, 0,
> >+						frag_len,
> DMA_TO_DEVICE);
> > 		}
> >
> >-		addr = dma_map_single(&fep->pdev->dev, bufaddr,
> frag_len,
> >-				      DMA_TO_DEVICE);
> > 		if (dma_mapping_error(&fep->pdev->dev, addr)) {
> > 			if (net_ratelimit())
> > 				netdev_err(ndev, "Tx DMA memory map
> failed\n"); @@ -411,8 +420,16
> >@@ fec_enet_txq_submit_frag_skb(struct
> >fec_enet_priv_tx_q *txq,
> > 	bdp = txq->bd.cur;
> > 	for (i = 0; i < frag; i++) {
> > 		bdp = fec_enet_get_nextdesc(bdp, &txq->bd);
> >-		dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp-
> >>cbd_bufaddr),
> >-				 fec16_to_cpu(bdp->cbd_datlen),
> >DMA_TO_DEVICE);
> >+		if (txq->tx_page_mapping[index])
> >+			dma_unmap_page(&fep->pdev->dev,
> >+				       fec32_to_cpu(bdp->cbd_bufaddr),
> >+				       fec16_to_cpu(bdp->cbd_datlen),
> >+				       DMA_TO_DEVICE);
> >+		else
> >+			dma_unmap_single(&fep->pdev->dev,
> >+
> fec32_to_cpu(bdp->cbd_bufaddr),
> >+
> fec16_to_cpu(bdp->cbd_datlen),
> >+					 DMA_TO_DEVICE);
> > 	}
> > 	return ERR_PTR(-ENOMEM);
> > }
> >@@ -1201,11 +1218,18 @@ fec_enet_tx_queue(struct net_device *ndev, u16
> >queue_id)
> >
> > 		skb = txq->tx_skbuff[index];
> > 		txq->tx_skbuff[index] = NULL;
> >-		if (!IS_TSO_HEADER(txq,
> fec32_to_cpu(bdp->cbd_bufaddr)))
> >-			dma_unmap_single(&fep->pdev->dev,
> >-
> fec32_to_cpu(bdp->cbd_bufaddr),
> >-
> fec16_to_cpu(bdp->cbd_datlen),
> >-					 DMA_TO_DEVICE);
> >+		if (!IS_TSO_HEADER(txq,
> fec32_to_cpu(bdp->cbd_bufaddr)))
> >{
> >+			if (txq->tx_page_mapping[index])
> >+				dma_unmap_page(&fep->pdev->dev,
> >+
> fec32_to_cpu(bdp->cbd_bufaddr),
> >+
> fec16_to_cpu(bdp->cbd_datlen),
> >+					       DMA_TO_DEVICE);
> >+			else
> >+				dma_unmap_single(&fep->pdev->dev,
> >+						 fec32_to_cpu(bdp-
> >>cbd_bufaddr),
> >+						 fec16_to_cpu(bdp-
> >>cbd_datlen),
> >+						 DMA_TO_DEVICE);
> >+		}
> > 		bdp->cbd_bufaddr = cpu_to_fec32(0);
> > 		if (!skb)
> > 			goto skb_done;
> >--
> >2.11.0

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-17 20:45 ` David Miller
@ 2017-01-18  3:20   ` Ashizuka, Yuusuke
  2017-01-18  4:11   ` [PATCH v2] " Yuusuke Ashiduka
  1 sibling, 0 replies; 16+ messages in thread
From: Ashizuka, Yuusuke @ 2017-01-18  3:20 UTC (permalink / raw)
  To: David Miller; +Cc: fugang.duan, netdev

> -----Original Message-----
> From: David Miller [mailto:davem@davemloft.net]
> Sent: Wednesday, January 18, 2017 5:45 AM
> To: Ashizuka, Yuusuke/芦塚 雄介
> Cc: fugang.duan@nxp.com; netdev@vger.kernel.org
> Subject: Re: [PATCH] net: fec: Fixed panic problem with non-tso
> 
> From: Yuusuke Ashiduka <ashiduka@jp.fujitsu.com>
> Date: Tue, 17 Jan 2017 16:48:20 +0900
> 
> > If highmem and 2GB or more of memory are valid, "this_frag-> page.p"
> > indicates the highmem area, so the result of page_address() is NULL
> > and panic occurs.
> >
> > This commit fixes this by using the skb_frag_dma_map() helper, which
> > takes care of mapping the skb fragment properly. Additionally, the
> > type of mapping is now tracked, so it can be unmapped using
> > dma_unmap_page or dma_unmap_single when appropriate.
> 
> This patch submission is lacking a proper signoff.

Thank you for pointing out my mistake.
I will submit the patch again.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v2] net: fec: Fixed panic problem with non-tso
  2017-01-17 20:45 ` David Miller
  2017-01-18  3:20   ` Ashizuka, Yuusuke
@ 2017-01-18  4:11   ` Yuusuke Ashiduka
  2017-01-18  5:02     ` Eric Dumazet
  1 sibling, 1 reply; 16+ messages in thread
From: Yuusuke Ashiduka @ 2017-01-18  4:11 UTC (permalink / raw)
  To: fugang.duan; +Cc: netdev, Yuusuke Ashiduka

If highmem and 2GB or more of memory are valid,
"this_frag-> page.p" indicates the highmem area,
so the result of page_address() is NULL and panic occurs.

This commit fixes this by using the skb_frag_dma_map() helper,
which takes care of mapping the skb fragment properly. Additionally,
the type of mapping is now tracked, so it can be unmapped using
dma_unmap_page or dma_unmap_single when appropriate.

Signed-off-by: Yuusuke Ashiduka <ashiduka@jp.fujitsu.com>
---

Changes for v2:
 - Added signed-off
---
 drivers/net/ethernet/freescale/fec.h      |  1 +
 drivers/net/ethernet/freescale/fec_main.c | 48 +++++++++++++++++++++++--------
 2 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index 5ea740b4cf14..5b187e8aacf0 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -463,6 +463,7 @@ struct bufdesc_prop {
 struct fec_enet_priv_tx_q {
 	struct bufdesc_prop bd;
 	unsigned char *tx_bounce[TX_RING_SIZE];
+	int tx_page_mapping[TX_RING_SIZE];
 	struct  sk_buff *tx_skbuff[TX_RING_SIZE];
 
 	unsigned short tx_stop_threshold;
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 38160c2bebcb..b1562107e337 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -60,6 +60,7 @@
 #include <linux/if_vlan.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/prefetch.h>
+#include <linux/highmem.h>
 #include <soc/imx/cpuidle.h>
 
 #include <asm/cacheflush.h>
@@ -377,20 +378,28 @@ fec_enet_txq_submit_frag_skb(struct fec_enet_priv_tx_q *txq,
 			ebdp->cbd_esc = cpu_to_fec32(estatus);
 		}
 
-		bufaddr = page_address(this_frag->page.p) + this_frag->page_offset;
-
 		index = fec_enet_get_bd_index(bdp, &txq->bd);
-		if (((unsigned long) bufaddr) & fep->tx_align ||
+		txq->tx_page_mapping[index] = 0;
+		if (this_frag->page_offset & fep->tx_align ||
 			fep->quirks & FEC_QUIRK_SWAP_FRAME) {
+			bufaddr = kmap_atomic(this_frag->page.p) +
+						this_frag->page_offset;
 			memcpy(txq->tx_bounce[index], bufaddr, frag_len);
+			kunmap_atomic(bufaddr);
 			bufaddr = txq->tx_bounce[index];
 
 			if (fep->quirks & FEC_QUIRK_SWAP_FRAME)
 				swap_buffer(bufaddr, frag_len);
+			addr = dma_map_single(&fep->pdev->dev,
+					      bufaddr,
+					      frag_len,
+					      DMA_TO_DEVICE);
+		} else {
+			txq->tx_page_mapping[index] = 1;
+			addr = skb_frag_dma_map(&fep->pdev->dev, this_frag, 0,
+						frag_len, DMA_TO_DEVICE);
 		}
 
-		addr = dma_map_single(&fep->pdev->dev, bufaddr, frag_len,
-				      DMA_TO_DEVICE);
 		if (dma_mapping_error(&fep->pdev->dev, addr)) {
 			if (net_ratelimit())
 				netdev_err(ndev, "Tx DMA memory map failed\n");
@@ -411,8 +420,16 @@ fec_enet_txq_submit_frag_skb(struct fec_enet_priv_tx_q *txq,
 	bdp = txq->bd.cur;
 	for (i = 0; i < frag; i++) {
 		bdp = fec_enet_get_nextdesc(bdp, &txq->bd);
-		dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp->cbd_bufaddr),
-				 fec16_to_cpu(bdp->cbd_datlen), DMA_TO_DEVICE);
+		if (txq->tx_page_mapping[index])
+			dma_unmap_page(&fep->pdev->dev,
+				       fec32_to_cpu(bdp->cbd_bufaddr),
+				       fec16_to_cpu(bdp->cbd_datlen),
+				       DMA_TO_DEVICE);
+		else
+			dma_unmap_single(&fep->pdev->dev,
+					 fec32_to_cpu(bdp->cbd_bufaddr),
+					 fec16_to_cpu(bdp->cbd_datlen),
+					 DMA_TO_DEVICE);
 	}
 	return ERR_PTR(-ENOMEM);
 }
@@ -1201,11 +1218,18 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_id)
 
 		skb = txq->tx_skbuff[index];
 		txq->tx_skbuff[index] = NULL;
-		if (!IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr)))
-			dma_unmap_single(&fep->pdev->dev,
-					 fec32_to_cpu(bdp->cbd_bufaddr),
-					 fec16_to_cpu(bdp->cbd_datlen),
-					 DMA_TO_DEVICE);
+		if (!IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr))) {
+			if (txq->tx_page_mapping[index])
+				dma_unmap_page(&fep->pdev->dev,
+					       fec32_to_cpu(bdp->cbd_bufaddr),
+					       fec16_to_cpu(bdp->cbd_datlen),
+					       DMA_TO_DEVICE);
+			else
+				dma_unmap_single(&fep->pdev->dev,
+						 fec32_to_cpu(bdp->cbd_bufaddr),
+						 fec16_to_cpu(bdp->cbd_datlen),
+						 DMA_TO_DEVICE);
+		}
 		bdp->cbd_bufaddr = cpu_to_fec32(0);
 		if (!skb)
 			goto skb_done;
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-18  3:12   ` Ashizuka, Yuusuke
@ 2017-01-18  4:21     ` Eric Dumazet
  2017-01-18  4:35       ` Eric Dumazet
  0 siblings, 1 reply; 16+ messages in thread
From: Eric Dumazet @ 2017-01-18  4:21 UTC (permalink / raw)
  To: Ashizuka, Yuusuke; +Cc: Andy Duan, netdev

On Wed, 2017-01-18 at 03:12 +0000, Ashizuka, Yuusuke wrote:

> indeed.
> 
> In the case of TSO with i.MX6 system (highmem enabled) with 2GB memory,
> "this_frag->page.p" did not become highmem area.
> (We confirmed by transferring about 100MB of files)
> 
> However, in the case of non-tso on an i.MX6 system with 2GB of memory,
> "this_frag->page.p" may become a highmem area.
> (Occurred with approximately 2MB of file transfer)
> 
> For non-tso only, I do not know the reason why "this_frag-> page.p" 
> in this driver shows highmem area.

This worries me, since this driver does not set NETIF_F_HIGHDMA in its
features.

No packet should be given to this driver with a highmem fragment

Check is done in illegal_highdma() in net/core/dev.c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-18  4:21     ` Eric Dumazet
@ 2017-01-18  4:35       ` Eric Dumazet
  2017-01-18 18:18         ` Pravin Shelar
  2017-01-19  8:18         ` [PATCH] net: fec: Fixed panic problem with non-tso Andy Duan
  0 siblings, 2 replies; 16+ messages in thread
From: Eric Dumazet @ 2017-01-18  4:35 UTC (permalink / raw)
  To: Ashizuka, Yuusuke; +Cc: Andy Duan, netdev, Pravin B Shelar

On Tue, 2017-01-17 at 20:21 -0800, Eric Dumazet wrote:
> On Wed, 2017-01-18 at 03:12 +0000, Ashizuka, Yuusuke wrote:
> 
> > indeed.
> > 
> > In the case of TSO with i.MX6 system (highmem enabled) with 2GB memory,
> > "this_frag->page.p" did not become highmem area.
> > (We confirmed by transferring about 100MB of files)
> > 
> > However, in the case of non-tso on an i.MX6 system with 2GB of memory,
> > "this_frag->page.p" may become a highmem area.
> > (Occurred with approximately 2MB of file transfer)
> > 
> > For non-tso only, I do not know the reason why "this_frag-> page.p" 
> > in this driver shows highmem area.
> 
> This worries me, since this driver does not set NETIF_F_HIGHDMA in its
> features.
> 
> No packet should be given to this driver with a highmem fragment
> 
> Check is done in illegal_highdma() in net/core/dev.c

This used to work.

I suspect commit ec5f061564238892005257c83565a0b58ec79295
("net: Kill link between CSUM and SG features.")

added this bug.

Can you try this hot fix :

diff --git a/net/core/dev.c b/net/core/dev.c
index ad5959e561166f445bdd9d7260652a338f74cfea..073b832b945257dba9ed47f4bf875605225effc9 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2773,9 +2773,9 @@ static netdev_features_t harmonize_features(struct sk_buff *skb,
 	if (skb->ip_summed != CHECKSUM_NONE &&
 	    !can_checksum_protocol(features, type)) {
 		features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
-	} else if (illegal_highdma(skb->dev, skb)) {
-		features &= ~NETIF_F_SG;
 	}
+	if (illegal_highdma(skb->dev, skb))
+		features &= ~NETIF_F_SG;
 
 	return features;
 }

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] net: fec: Fixed panic problem with non-tso
  2017-01-18  4:11   ` [PATCH v2] " Yuusuke Ashiduka
@ 2017-01-18  5:02     ` Eric Dumazet
  2017-01-18  5:38       ` Andy Duan
  0 siblings, 1 reply; 16+ messages in thread
From: Eric Dumazet @ 2017-01-18  5:02 UTC (permalink / raw)
  To: Yuusuke Ashiduka; +Cc: fugang.duan, netdev

On Wed, 2017-01-18 at 13:11 +0900, Yuusuke Ashiduka wrote:
> If highmem and 2GB or more of memory are valid,
> "this_frag-> page.p" indicates the highmem area,
> so the result of page_address() is NULL and panic occurs.
> 
> This commit fixes this by using the skb_frag_dma_map() helper,
> which takes care of mapping the skb fragment properly. Additionally,
> the type of mapping is now tracked, so it can be unmapped using
> dma_unmap_page or dma_unmap_single when appropriate.


I would prefer we fix the root cause, instead of tweaking all legacy
drivers out there :/

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH v2] net: fec: Fixed panic problem with non-tso
  2017-01-18  5:02     ` Eric Dumazet
@ 2017-01-18  5:38       ` Andy Duan
  0 siblings, 0 replies; 16+ messages in thread
From: Andy Duan @ 2017-01-18  5:38 UTC (permalink / raw)
  To: Eric Dumazet, Yuusuke Ashiduka; +Cc: netdev

From: Eric Dumazet <eric.dumazet@gmail.com> Sent: Wednesday, January 18, 2017 1:02 PM
>To: Yuusuke Ashiduka <ashiduka@jp.fujitsu.com>
>Cc: Andy Duan <fugang.duan@nxp.com>; netdev@vger.kernel.org
>Subject: Re: [PATCH v2] net: fec: Fixed panic problem with non-tso
>
>On Wed, 2017-01-18 at 13:11 +0900, Yuusuke Ashiduka wrote:
>> If highmem and 2GB or more of memory are valid, "this_frag-> page.p"
>> indicates the highmem area, so the result of page_address() is NULL
>> and panic occurs.
>>
>> This commit fixes this by using the skb_frag_dma_map() helper, which
>> takes care of mapping the skb fragment properly. Additionally, the
>> type of mapping is now tracked, so it can be unmapped using
>> dma_unmap_page or dma_unmap_single when appropriate.
>
>
>I would prefer we fix the root cause, instead of tweaking all legacy drivers out
>there :/
>
>
I agree with you.

The driver always doesn't support highmem. The fragment shouldn't  allocate from highmem except the common code bug.
If request the driver to support NETIF_F_HIGHDMA feature, we also add highmem support for tso driver.

Andy

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-18  4:35       ` Eric Dumazet
@ 2017-01-18 18:18         ` Pravin Shelar
  2017-01-18 19:51           ` Eric Dumazet
  2017-01-19  8:18         ` [PATCH] net: fec: Fixed panic problem with non-tso Andy Duan
  1 sibling, 1 reply; 16+ messages in thread
From: Pravin Shelar @ 2017-01-18 18:18 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Ashizuka, Yuusuke, Andy Duan, netdev, Pravin B Shelar

On Tue, Jan 17, 2017 at 8:35 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Tue, 2017-01-17 at 20:21 -0800, Eric Dumazet wrote:
>> On Wed, 2017-01-18 at 03:12 +0000, Ashizuka, Yuusuke wrote:
>>
>> > indeed.
>> >
>> > In the case of TSO with i.MX6 system (highmem enabled) with 2GB memory,
>> > "this_frag->page.p" did not become highmem area.
>> > (We confirmed by transferring about 100MB of files)
>> >
>> > However, in the case of non-tso on an i.MX6 system with 2GB of memory,
>> > "this_frag->page.p" may become a highmem area.
>> > (Occurred with approximately 2MB of file transfer)
>> >
>> > For non-tso only, I do not know the reason why "this_frag-> page.p"
>> > in this driver shows highmem area.
>>
>> This worries me, since this driver does not set NETIF_F_HIGHDMA in its
>> features.
>>
>> No packet should be given to this driver with a highmem fragment
>>
>> Check is done in illegal_highdma() in net/core/dev.c
>
> This used to work.
>
> I suspect commit ec5f061564238892005257c83565a0b58ec79295
> ("net: Kill link between CSUM and SG features.")
>
> added this bug.
>
> Can you try this hot fix :
>
> diff --git a/net/core/dev.c b/net/core/dev.c
> index ad5959e561166f445bdd9d7260652a338f74cfea..073b832b945257dba9ed47f4bf875605225effc9 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -2773,9 +2773,9 @@ static netdev_features_t harmonize_features(struct sk_buff *skb,
>         if (skb->ip_summed != CHECKSUM_NONE &&
>             !can_checksum_protocol(features, type)) {
>                 features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
> -       } else if (illegal_highdma(skb->dev, skb)) {
> -               features &= ~NETIF_F_SG;
>         }
> +       if (illegal_highdma(skb->dev, skb))
> +               features &= ~NETIF_F_SG;
>
>         return features;
>  }

Right, this high mem check should be decoupled from csum check.

Thanks,
Pravin.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-18 18:18         ` Pravin Shelar
@ 2017-01-18 19:51           ` Eric Dumazet
  2017-01-18 20:12             ` [PATCH net] net: fix harmonize_features() vs NETIF_F_HIGHDMA Eric Dumazet
  0 siblings, 1 reply; 16+ messages in thread
From: Eric Dumazet @ 2017-01-18 19:51 UTC (permalink / raw)
  To: Pravin Shelar; +Cc: Ashizuka, Yuusuke, Andy Duan, netdev, Pravin B Shelar

On Wed, 2017-01-18 at 10:18 -0800, Pravin Shelar wrote:
\
> Right, this high mem check should be decoupled from csum check.

I must say I am surprised nobody hit this problem before today.

linux-3.10 is more than 3 years old.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH net] net: fix harmonize_features() vs NETIF_F_HIGHDMA
  2017-01-18 19:51           ` Eric Dumazet
@ 2017-01-18 20:12             ` Eric Dumazet
  2017-01-18 20:25               ` David Miller
  0 siblings, 1 reply; 16+ messages in thread
From: Eric Dumazet @ 2017-01-18 20:12 UTC (permalink / raw)
  To: Pravin Shelar, David Miller
  Cc: Ashizuka, Yuusuke, Andy Duan, netdev, Pravin B Shelar

From: Eric Dumazet <edumazet@google.com>

Ashizuka reported a highmem oddity and sent a patch for freescale
fec driver.

But the problem root cause is that core networking stack
must ensure no skb with highmem fragment is ever sent through
a device that does not assert NETIF_F_HIGHDMA in its features.

We need to call illegal_highdma() from harmonize_features()
regardless of CSUM checks.

Fixes: ec5f06156423 ("net: Kill link between CSUM and SG features.")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Pravin Shelar <pshelar@ovn.org>
Reported-by: "Ashizuka, Yuusuke" <ashiduka@jp.fujitsu.com>
---
 net/core/dev.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 07b307b0b414730688b64fdb2295b0fa1b721e51..7f218e095361520d11c243d650e053321ea7274f 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2795,9 +2795,9 @@ static netdev_features_t harmonize_features(struct sk_buff *skb,
 	if (skb->ip_summed != CHECKSUM_NONE &&
 	    !can_checksum_protocol(features, type)) {
 		features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
-	} else if (illegal_highdma(skb->dev, skb)) {
-		features &= ~NETIF_F_SG;
 	}
+	if (illegal_highdma(skb->dev, skb))
+		features &= ~NETIF_F_SG;
 
 	return features;
 }

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH net] net: fix harmonize_features() vs NETIF_F_HIGHDMA
  2017-01-18 20:12             ` [PATCH net] net: fix harmonize_features() vs NETIF_F_HIGHDMA Eric Dumazet
@ 2017-01-18 20:25               ` David Miller
  0 siblings, 0 replies; 16+ messages in thread
From: David Miller @ 2017-01-18 20:25 UTC (permalink / raw)
  To: eric.dumazet; +Cc: pshelar, ashiduka, fugang.duan, netdev, pshelar

From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Wed, 18 Jan 2017 12:12:17 -0800

> From: Eric Dumazet <edumazet@google.com>
> 
> Ashizuka reported a highmem oddity and sent a patch for freescale
> fec driver.
> 
> But the problem root cause is that core networking stack
> must ensure no skb with highmem fragment is ever sent through
> a device that does not assert NETIF_F_HIGHDMA in its features.
> 
> We need to call illegal_highdma() from harmonize_features()
> regardless of CSUM checks.
> 
> Fixes: ec5f06156423 ("net: Kill link between CSUM and SG features.")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Cc: Pravin Shelar <pshelar@ovn.org>
> Reported-by: "Ashizuka, Yuusuke" <ashiduka@jp.fujitsu.com>

Applied, thanks Eric.

I guess few devices support SG and lack highmem support.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-18  4:35       ` Eric Dumazet
  2017-01-18 18:18         ` Pravin Shelar
@ 2017-01-19  8:18         ` Andy Duan
  2017-01-19 13:24           ` Eric Dumazet
  1 sibling, 1 reply; 16+ messages in thread
From: Andy Duan @ 2017-01-19  8:18 UTC (permalink / raw)
  To: Eric Dumazet, Ashizuka, Yuusuke; +Cc: netdev, Pravin B Shelar

From: Eric Dumazet <eric.dumazet@gmail.com> Sent: Wednesday, January 18, 2017 12:36 PM
>To: Ashizuka, Yuusuke <ashiduka@jp.fujitsu.com>
>Cc: Andy Duan <fugang.duan@nxp.com>; netdev@vger.kernel.org; Pravin B
>Shelar <pshelar@nicira.com>
>Subject: Re: [PATCH] net: fec: Fixed panic problem with non-tso
>
>On Tue, 2017-01-17 at 20:21 -0800, Eric Dumazet wrote:
>> On Wed, 2017-01-18 at 03:12 +0000, Ashizuka, Yuusuke wrote:
>>
>> > indeed.
>> >
>> > In the case of TSO with i.MX6 system (highmem enabled) with 2GB
>> > memory, "this_frag->page.p" did not become highmem area.
>> > (We confirmed by transferring about 100MB of files)
>> >
>> > However, in the case of non-tso on an i.MX6 system with 2GB of
>> > memory, "this_frag->page.p" may become a highmem area.
>> > (Occurred with approximately 2MB of file transfer)
>> >
>> > For non-tso only, I do not know the reason why "this_frag-> page.p"
>> > in this driver shows highmem area.
>>
>> This worries me, since this driver does not set NETIF_F_HIGHDMA in its
>> features.
>>
>> No packet should be given to this driver with a highmem fragment
>>
>> Check is done in illegal_highdma() in net/core/dev.c
>
>This used to work.
>
>I suspect commit ec5f061564238892005257c83565a0b58ec79295
>("net: Kill link between CSUM and SG features.")
>
>added this bug.
>
>Can you try this hot fix :
>
>diff --git a/net/core/dev.c b/net/core/dev.c index
>ad5959e561166f445bdd9d7260652a338f74cfea..073b832b945257dba9ed47f4bf
>875605225effc9 100644
>--- a/net/core/dev.c
>+++ b/net/core/dev.c
>@@ -2773,9 +2773,9 @@ static netdev_features_t harmonize_features(struct
>sk_buff *skb,
> 	if (skb->ip_summed != CHECKSUM_NONE &&
> 	    !can_checksum_protocol(features, type)) {
> 		features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
>-	} else if (illegal_highdma(skb->dev, skb)) {
>-		features &= ~NETIF_F_SG;
> 	}
>+	if (illegal_highdma(skb->dev, skb))
>+		features &= ~NETIF_F_SG;
>
> 	return features;
> }
>
>

I will double check your fix. Thanks.

And, if driver is to support highmem,  then we should add tso highmem support in net/core/tso.c,  do you think it is necessary ?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] net: fec: Fixed panic problem with non-tso
  2017-01-19  8:18         ` [PATCH] net: fec: Fixed panic problem with non-tso Andy Duan
@ 2017-01-19 13:24           ` Eric Dumazet
  0 siblings, 0 replies; 16+ messages in thread
From: Eric Dumazet @ 2017-01-19 13:24 UTC (permalink / raw)
  To: Andy Duan; +Cc: Ashizuka, Yuusuke, netdev, Pravin B Shelar

On Thu, 2017-01-19 at 08:18 +0000, Andy Duan wrote:

> I will double check your fix. Thanks.
> 
> And, if driver is to support highmem,  then we should add tso highmem
> support in net/core/tso.c,  do you think it is necessary ?


Adding TSO highmem support would mean changing net/core/tso.c ABI and
thus changing all net/core/tso.c users.

Looks a lot of work to me.

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2017-01-19 13:58 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-17  7:48 [PATCH] net: fec: Fixed panic problem with non-tso Yuusuke Ashiduka
2017-01-17 11:02 ` Andy Duan
2017-01-18  3:12   ` Ashizuka, Yuusuke
2017-01-18  4:21     ` Eric Dumazet
2017-01-18  4:35       ` Eric Dumazet
2017-01-18 18:18         ` Pravin Shelar
2017-01-18 19:51           ` Eric Dumazet
2017-01-18 20:12             ` [PATCH net] net: fix harmonize_features() vs NETIF_F_HIGHDMA Eric Dumazet
2017-01-18 20:25               ` David Miller
2017-01-19  8:18         ` [PATCH] net: fec: Fixed panic problem with non-tso Andy Duan
2017-01-19 13:24           ` Eric Dumazet
2017-01-17 20:45 ` David Miller
2017-01-18  3:20   ` Ashizuka, Yuusuke
2017-01-18  4:11   ` [PATCH v2] " Yuusuke Ashiduka
2017-01-18  5:02     ` Eric Dumazet
2017-01-18  5:38       ` Andy Duan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.