netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] ibmveth: calculate gso_segs for large packets
@ 2016-12-14  0:15 Thomas Falcon
  2016-12-14 20:39 ` marcelo.leitner
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Thomas Falcon @ 2016-12-14  0:15 UTC (permalink / raw)
  To: netdev; +Cc: brking, marcelo.leitner, pradeeps, jmaxwell37, zdai, eric.dumazet

Include calculations to compute the number of segments
that comprise an aggregated large packet.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmveth.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
index fbece63..a831f94 100644
--- a/drivers/net/ethernet/ibm/ibmveth.c
+++ b/drivers/net/ethernet/ibm/ibmveth.c
@@ -1181,7 +1181,9 @@ static netdev_tx_t ibmveth_start_xmit(struct sk_buff *skb,
 
 static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt)
 {
+	struct tcphdr *tcph;
 	int offset = 0;
+	int hdr_len;
 
 	/* only TCP packets will be aggregated */
 	if (skb->protocol == htons(ETH_P_IP)) {
@@ -1208,14 +1210,20 @@ static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt)
 	/* if mss is not set through Large Packet bit/mss in rx buffer,
 	 * expect that the mss will be written to the tcp header checksum.
 	 */
+	tcph = (struct tcphdr *)(skb->data + offset);
 	if (lrg_pkt) {
 		skb_shinfo(skb)->gso_size = mss;
 	} else if (offset) {
-		struct tcphdr *tcph = (struct tcphdr *)(skb->data + offset);
-
 		skb_shinfo(skb)->gso_size = ntohs(tcph->check);
 		tcph->check = 0;
 	}
+
+	if (skb_shinfo(skb)->gso_size) {
+		hdr_len = offset + tcph->doff * 4;
+		skb_shinfo(skb)->gso_segs =
+				DIV_ROUND_UP(skb->len - hdr_len,
+					     skb_shinfo(skb)->gso_size);
+	}
 }
 
 static int ibmveth_poll(struct napi_struct *napi, int budget)
-- 
1.8.3.1

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

* Re: [PATCH net] ibmveth: calculate gso_segs for large packets
  2016-12-14  0:15 [PATCH net] ibmveth: calculate gso_segs for large packets Thomas Falcon
@ 2016-12-14 20:39 ` marcelo.leitner
  2016-12-15 21:49 ` Jonathan Maxwell
  2016-12-17 15:23 ` David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: marcelo.leitner @ 2016-12-14 20:39 UTC (permalink / raw)
  To: Thomas Falcon; +Cc: netdev, brking, pradeeps, jmaxwell37, zdai, eric.dumazet

On Tue, Dec 13, 2016 at 06:15:09PM -0600, Thomas Falcon wrote:
> Include calculations to compute the number of segments
> that comprise an aggregated large packet.
> 
> Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>

Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>


> ---
>  drivers/net/ethernet/ibm/ibmveth.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
> index fbece63..a831f94 100644
> --- a/drivers/net/ethernet/ibm/ibmveth.c
> +++ b/drivers/net/ethernet/ibm/ibmveth.c
> @@ -1181,7 +1181,9 @@ static netdev_tx_t ibmveth_start_xmit(struct sk_buff *skb,
>  
>  static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt)
>  {
> +	struct tcphdr *tcph;
>  	int offset = 0;
> +	int hdr_len;
>  
>  	/* only TCP packets will be aggregated */
>  	if (skb->protocol == htons(ETH_P_IP)) {
> @@ -1208,14 +1210,20 @@ static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt)
>  	/* if mss is not set through Large Packet bit/mss in rx buffer,
>  	 * expect that the mss will be written to the tcp header checksum.
>  	 */
> +	tcph = (struct tcphdr *)(skb->data + offset);
>  	if (lrg_pkt) {
>  		skb_shinfo(skb)->gso_size = mss;
>  	} else if (offset) {
> -		struct tcphdr *tcph = (struct tcphdr *)(skb->data + offset);
> -
>  		skb_shinfo(skb)->gso_size = ntohs(tcph->check);
>  		tcph->check = 0;
>  	}
> +
> +	if (skb_shinfo(skb)->gso_size) {
> +		hdr_len = offset + tcph->doff * 4;
> +		skb_shinfo(skb)->gso_segs =
> +				DIV_ROUND_UP(skb->len - hdr_len,
> +					     skb_shinfo(skb)->gso_size);
> +	}
>  }
>  
>  static int ibmveth_poll(struct napi_struct *napi, int budget)
> -- 
> 1.8.3.1
> 

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

* Re: [PATCH net] ibmveth: calculate gso_segs for large packets
  2016-12-14  0:15 [PATCH net] ibmveth: calculate gso_segs for large packets Thomas Falcon
  2016-12-14 20:39 ` marcelo.leitner
@ 2016-12-15 21:49 ` Jonathan Maxwell
  2016-12-17 15:23 ` David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: Jonathan Maxwell @ 2016-12-15 21:49 UTC (permalink / raw)
  To: Thomas Falcon
  Cc: netdev, Brian King, marcelo.leitner, pradeeps, zdai, Eric Dumazet

On Wed, Dec 14, 2016 at 11:15 AM, Thomas Falcon
<tlfalcon@linux.vnet.ibm.com> wrote:
> Include calculations to compute the number of segments
> that comprise an aggregated large packet.
>
> Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>

Reviewed-by: Jonathan Maxwell <jmaxwell37@gmail.com>

> ---
>  drivers/net/ethernet/ibm/ibmveth.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
> index fbece63..a831f94 100644
> --- a/drivers/net/ethernet/ibm/ibmveth.c
> +++ b/drivers/net/ethernet/ibm/ibmveth.c
> @@ -1181,7 +1181,9 @@ static netdev_tx_t ibmveth_start_xmit(struct sk_buff *skb,
>
>  static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt)
>  {
> +       struct tcphdr *tcph;
>         int offset = 0;
> +       int hdr_len;
>
>         /* only TCP packets will be aggregated */
>         if (skb->protocol == htons(ETH_P_IP)) {
> @@ -1208,14 +1210,20 @@ static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt)
>         /* if mss is not set through Large Packet bit/mss in rx buffer,
>          * expect that the mss will be written to the tcp header checksum.
>          */
> +       tcph = (struct tcphdr *)(skb->data + offset);
>         if (lrg_pkt) {
>                 skb_shinfo(skb)->gso_size = mss;
>         } else if (offset) {
> -               struct tcphdr *tcph = (struct tcphdr *)(skb->data + offset);
> -
>                 skb_shinfo(skb)->gso_size = ntohs(tcph->check);
>                 tcph->check = 0;
>         }
> +
> +       if (skb_shinfo(skb)->gso_size) {
> +               hdr_len = offset + tcph->doff * 4;
> +               skb_shinfo(skb)->gso_segs =
> +                               DIV_ROUND_UP(skb->len - hdr_len,
> +                                            skb_shinfo(skb)->gso_size);
> +       }
>  }
>
>  static int ibmveth_poll(struct napi_struct *napi, int budget)
> --
> 1.8.3.1
>

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

* Re: [PATCH net] ibmveth: calculate gso_segs for large packets
  2016-12-14  0:15 [PATCH net] ibmveth: calculate gso_segs for large packets Thomas Falcon
  2016-12-14 20:39 ` marcelo.leitner
  2016-12-15 21:49 ` Jonathan Maxwell
@ 2016-12-17 15:23 ` David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2016-12-17 15:23 UTC (permalink / raw)
  To: tlfalcon
  Cc: netdev, brking, marcelo.leitner, pradeeps, jmaxwell37, zdai,
	eric.dumazet

From: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Date: Tue, 13 Dec 2016 18:15:09 -0600

> Include calculations to compute the number of segments
> that comprise an aggregated large packet.
> 
> Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>

Applied.

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

end of thread, other threads:[~2016-12-17 15:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-12-14  0:15 [PATCH net] ibmveth: calculate gso_segs for large packets Thomas Falcon
2016-12-14 20:39 ` marcelo.leitner
2016-12-15 21:49 ` Jonathan Maxwell
2016-12-17 15:23 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).