From 4629e26c7c56a67722825cceb792508f4c029563 Mon Sep 17 00:00:00 2001
From: Aastha Mehta <aasthakm@mpi-sws.org>
Date: Tue, 24 Apr 2018 14:29:56 +0000
Subject: [PATCH] update ACK interception API to pass number of packets ACK'ed
 by this ACK

---
 drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c       | 8 +++++---
 drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h       | 3 ++-
 drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c | 5 +++--
 drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h | 3 ++-
 net/ipv4/tcp_input.c                                    | 2 +-
 5 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c
index dc36366f8..a58d15ad8 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c
@@ -19,13 +19,15 @@
 
 
 void
-(*lnk_update_cwnd) (struct sk_buff *skb, struct sock *sk, char *extra_dbg_string) = 0;
+(*lnk_update_cwnd) (struct sk_buff *skb, struct sock *sk, uint32_t delivered,
+    char *extra_dbg_string) = 0;
 EXPORT_SYMBOL(lnk_update_cwnd);
 static void
-sme_update_cwnd(struct sk_buff *skb, struct sock *sk, char *extra_dbg_string)
+sme_update_cwnd(struct sk_buff *skb, struct sock *sk, uint32_t delivered,
+    char *extra_dbg_string)
 {
 	if (lnk_update_cwnd) {
-		lnk_update_cwnd(skb, sk, extra_dbg_string);
+		lnk_update_cwnd(skb, sk, delivered, extra_dbg_string);
 	}
 }
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h
index 268cfe6f9..c79dd7326 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h
@@ -26,7 +26,8 @@
  */
 
 union sme_list_options {
-	void (*update_cwnd) (struct sk_buff *skb, struct sock *sk, char *extra_dbg_string);
+	void (*update_cwnd) (struct sk_buff *skb, struct sock *sk, uint32_t delivered,
+      char *extra_dbg_string);
   int (*intercept_select_queue) (struct net_device *dev, struct sk_buff *skb,
       char *extra_dbg_string);
   void (*intercept_tx_sent_queue) (struct netdev_queue *txq, unsigned int bytes);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c
index d7f94b3f0..33c5b55ba 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c
@@ -55,9 +55,10 @@ struct sme_hook_heads xen_sme_hook_heads = {
 //	.print_xenvif_queue = LIST_HEAD_INIT(xen_sme_hook_heads.print_xenvif_queue),
 };
 
-void xsl_update_cwnd(struct sk_buff *skb, struct sock *sk, char *extra_dbg_string)
+void xsl_update_cwnd(struct sk_buff *skb, struct sock *sk, uint32_t delivered,
+    char *extra_dbg_string)
 {
-	return call_sme_void_hook(update_cwnd, skb, sk, extra_dbg_string);
+	return call_sme_void_hook(update_cwnd, skb, sk, delivered, extra_dbg_string);
 }
 EXPORT_SYMBOL(xsl_update_cwnd);
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h
index 7dc56d4f3..f620c3773 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h
@@ -18,7 +18,8 @@
 #include "../bnx2x.h"
 #include "sme_debug.h"
 
-void xsl_update_cwnd(struct sk_buff *skb, struct sock *sk, char *extra_dbg_string);
+void xsl_update_cwnd(struct sk_buff *skb, struct sock *sk, uint32_t delivered,
+    char *extra_dbg_string);
 int xsl_intercept_select_queue(struct net_device *dev, struct sk_buff *skb,
     char *extra_dbg_string);
 void xsl_intercept_tx_sent_queue(struct netdev_queue *txq, unsigned int len);
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index a256ab4ba..c171934c5 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3720,7 +3720,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
 	tcp_xmit_recovery(sk, rexmit);
   
   #ifdef CONFIG_XEN_SME
-    xsl_update_cwnd((struct sk_buff*)skb, (struct sock*)sk, NULL);
+    xsl_update_cwnd((struct sk_buff*)skb, (struct sock*)sk, delivered, NULL);
   #endif
 	
   return 1;
-- 
GitLab