automatic DPDK test reports
 help / color / mirror / Atom feed
* |WARNING| pw127946 [PATCH] [v3] gro : ipv6-gro review comments to reduce code duplication across v4 and v6
@ 2023-06-02  6:22 dpdklab
  0 siblings, 0 replies; 5+ messages in thread
From: dpdklab @ 2023-06-02  6:22 UTC (permalink / raw)
  To: test-report; +Cc: dpdk-test-reports

Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/127946

_apply patch failure_

Submitter: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
Date: Friday, June 02 2023 06:02:15 
Applied on: CommitID:abaa473297cf21cb81e5348185a7694ae2f221e7
Apply patch set 127946 failed:

.git/rebase-apply/patch:108: trailing whitespace.
int32_t 
.git/rebase-apply/patch:109: trailing whitespace.
gro_tcp_reassemble(struct rte_mbuf *pkt, 
.git/rebase-apply/patch:110: trailing whitespace.
	void *tbl, 
.git/rebase-apply/patch:111: trailing whitespace.
	void *key, 
.git/rebase-apply/patch:135: trailing whitespace.
	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);	
Checking patch lib/gro/gro_tcp.c...
Checking patch lib/gro/gro_tcp.h...
error: lib/gro/gro_tcp.h: does not exist in index
Checking patch lib/gro/gro_tcp4.c...
Hunk #1 succeeded at 71 (offset -1 lines).
error: while searching for:
}

static inline uint32_t
insert_new_item(struct gro_tcp4_tbl *tbl,
		struct rte_mbuf *pkt,
		uint64_t start_time,
		uint32_t prev_idx,
		uint32_t sent_seq,
		uint16_t ip_id,
		uint8_t is_atomic)
{
	uint32_t item_idx;

	item_idx = find_an_empty_item(tbl);
	if (item_idx == INVALID_ARRAY_INDEX)
		return INVALID_ARRAY_INDEX;

	tbl->items[item_idx].firstseg = pkt;
	tbl->items[item_idx].lastseg = rte_pktmbuf_lastseg(pkt);
	tbl->items[item_idx].start_time = start_time;
	tbl->items[item_idx].next_pkt_idx = INVALID_ARRAY_INDEX;
	tbl->items[item_idx].sent_seq = sent_seq;
	tbl->items[item_idx].ip_id = ip_id;
	tbl->items[item_idx].nb_merged = 1;
	tbl->items[item_idx].is_atomic = is_atomic;
	tbl->item_num++;

	/* if the previous packet exists, chain them together. */
	if (prev_idx != INVALID_ARRAY_INDEX) {
		tbl->items[item_idx].next_pkt_idx =
			tbl->items[prev_idx].next_pkt_idx;
		tbl->items[prev_idx].next_pkt_idx = item_idx;
	}

	return item_idx;
}

static inline uint32_t
delete_item(struct gro_tcp4_tbl *tbl, uint32_t item_idx,
		uint32_t prev_item_idx)
{
	uint32_t next_idx = tbl->items[item_idx].next_pkt_idx;

	/* NULL indicates an empty item */
	tbl->items[item_idx].firstseg = NULL;
	tbl->item_num--;
	if (prev_item_idx != INVALID_ARRAY_INDEX)
		tbl->items[prev_item_idx].next_pkt_idx = next_idx;

	return next_idx;
}

static inline uint32_t
insert_new_flow(struct gro_tcp4_tbl *tbl,
		struct tcp4_flow_key *src,
		uint32_t item_idx)
{
	struct tcp4_flow_key *dst;
	uint32_t flow_idx;

	flow_idx = find_an_empty_flow(tbl);
	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
		return INVALID_ARRAY_INDEX;

	dst = &(tbl->flows[flow_idx].key);

	rte_ether_addr_copy(&(src->eth_saddr), &(dst->eth_saddr));
	rte_ether_addr_copy(&(src->eth_daddr), &(dst->eth_daddr));
	dst->ip_src_addr = src->ip_src_addr;
	dst->ip_dst_addr = src->ip_dst_addr;
	dst->recv_ack = src->recv_ack;
	dst->src_port = src->src_port;
	dst->dst_port = src->dst_port;

	tbl->flows[flow_idx].start_index = item_idx;
	tbl->flow_num++;

	return flow_idx;
}

/*
 * update the packet length for the flushed packet.
 */
static inline void
update_header(struct gro_tcp_item *item)
{
	struct rte_ipv4_hdr *ipv4_hdr;
	struct rte_mbuf *pkt = item->firstseg;

	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
			pkt->l2_len);
	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
			pkt->l2_len);
}

int32_t
gro_tcp4_reassemble(struct rte_mbuf *pkt,
		struct gro_tcp4_tbl *tbl,

error: patch failed: lib/gro/gro_tcp4.c:97
Hunk #3 succeeded at 183 (offset 21 lines).
Hunk #4 succeeded at 197 (offset 21 lines).
Hunk #5 succeeded at 212 (offset 21 lines).
error: while searching for:
	frag_off = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
	is_atomic = (frag_off & RTE_IPV4_HDR_DF_FLAG) == RTE_IPV4_HDR_DF_FLAG;
	ip_id = is_atomic ? 0 : rte_be_to_cpu_16(ipv4_hdr->packet_id);
	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);

	rte_ether_addr_copy(&(eth_hdr->src_addr), &(key.eth_saddr));
	rte_ether_addr_copy(&(eth_hdr->dst_addr), &(key.eth_daddr));
	key.ip_src_addr = ipv4_hdr->src_addr;
	key.ip_dst_addr = ipv4_hdr->dst_addr;
	key.src_port = tcp_hdr->src_port;
	key.dst_port = tcp_hdr->dst_port;
	key.recv_ack = tcp_hdr->recv_ack;

	/* Search for a matched flow. */
	max_flow_num = tbl->max_flow_num;
	remaining_flow_num = tbl->flow_num;
	find = 0;
	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
		if (tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
			if (is_same_tcp4_flow(tbl->flows[i].key, key)) {
				find = 1;
				break;
			}
			remaining_flow_num--;
		}
	}

	/*
	 * Fail to find a matched flow. Insert a new flow and store the
	 * packet into the flow.
	 */
	if (find == 0) {
		item_idx = insert_new_item(tbl, pkt, start_time,
				INVALID_ARRAY_INDEX, sent_seq, ip_id,
				is_atomic);
		if (item_idx == INVALID_ARRAY_INDEX)
			return -1;
		if (insert_new_flow(tbl, &key, item_idx) ==
				INVALID_ARRAY_INDEX) {
			/*
			 * Fail to insert a new flow, so delete the
			 * stored packet.
			 */
			delete_item(tbl, item_idx, INVALID_ARRAY_INDEX);
			return -1;
		}
		return 0;
	}

	/*
	 * Check all packets in the flow and try to find a neighbor for
	 * the input packet.
	 */
	cur_idx = tbl->flows[i].start_index;
	prev_idx = cur_idx;
	do {
		cmp = check_seq_option(&(tbl->items[cur_idx]), tcp_hdr,
				sent_seq, ip_id, pkt->l4_len, tcp_dl, 0,
				is_atomic);
		if (cmp) {
			if (merge_two_tcp_packets(&(tbl->items[cur_idx]),
						pkt, cmp, sent_seq, ip_id, 0))
				return 1;
			/*
			 * Fail to merge the two packets, as the packet
			 * length is greater than the max value. Store
			 * the packet into the flow.
			 */
			if (insert_new_item(tbl, pkt, start_time, cur_idx,
						sent_seq, ip_id, is_atomic) ==
					INVALID_ARRAY_INDEX)
				return -1;
			return 0;
		}
		prev_idx = cur_idx;
		cur_idx = tbl->items[cur_idx].next_pkt_idx;
	} while (cur_idx != INVALID_ARRAY_INDEX);

	/* Fail to find a neighbor, so store the packet into the flow. */
	if (insert_new_item(tbl, pkt, start_time, prev_idx, sent_seq,
				ip_id, is_atomic) == INVALID_ARRAY_INDEX)
		return -1;

	return 0;
}

uint16_t

error: patch failed: lib/gro/gro_tcp4.c:247
Hunk #7 succeeded at 330 (offset 83 lines).
Checking patch lib/gro/gro_tcp4.h...
error: while searching for:
#ifndef _GRO_TCP4_H_
#define _GRO_TCP4_H_

#define INVALID_ARRAY_INDEX 0xffffffffUL
#define GRO_TCP4_TBL_MAX_ITEM_NUM (1024UL * 1024UL)

/* Header fields representing a TCP/IPv4 flow */
struct tcp4_flow_key {
	struct rte_ether_addr eth_saddr;
	struct rte_ether_addr eth_daddr;
	uint32_t ip_src_addr;
	uint32_t ip_dst_addr;

	uint32_t recv_ack;
	uint16_t src_port;
	uint16_t dst_port;
};

struct gro_tcp4_flow {

error: patch failed: lib/gro/gro_tcp4.h:5
error: while searching for:
static inline int
is_same_tcp4_flow(struct tcp4_flow_key k1, struct tcp4_flow_key k2)
{
	return (rte_is_same_ether_addr(&k1.eth_saddr, &k2.eth_saddr) &&
			rte_is_same_ether_addr(&k1.eth_daddr, &k2.eth_daddr) &&
			(k1.ip_src_addr == k2.ip_src_addr) &&
			(k1.ip_dst_addr == k2.ip_dst_addr) &&
			(k1.recv_ack == k2.recv_ack) &&
			(k1.src_port == k2.src_port) &&
			(k1.dst_port == k2.dst_port));
}

#endif

error: patch failed: lib/gro/gro_tcp4.h:143
Checking patch lib/gro/gro_tcp6.c...
error: lib/gro/gro_tcp6.c: does not exist in index
Checking patch lib/gro/gro_tcp6.h...
error: lib/gro/gro_tcp6.h: does not exist in index
Checking patch lib/gro/gro_vxlan_tcp4.c...
Hunk #1 succeeded at 163 (offset -1 lines).
Hunk #2 succeeded at 351 (offset -1 lines).
Checking patch lib/gro/meson.build...
error: while searching for:

sources = files(
        'rte_gro.c',
        'gro_tcp4.c',
        'gro_tcp6.c',
        'gro_udp4.c',

error: patch failed: lib/gro/meson.build:3
Applied patch lib/gro/gro_tcp.c cleanly.
Applying patch lib/gro/gro_tcp4.c with 2 rejects...
Hunk #1 applied cleanly.
Rejected hunk #2.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Rejected hunk #6.
Hunk #7 applied cleanly.
Applying patch lib/gro/gro_tcp4.h with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Applied patch lib/gro/gro_vxlan_tcp4.c cleanly.
Applying patch lib/gro/meson.build with 1 reject...
Rejected hunk #1.
hint: Use 'git am --show-current-patch' to see the failed patch
diff a/lib/gro/gro_tcp4.c b/lib/gro/gro_tcp4.c	(rejected hunks)
@@ -97,98 +85,76 @@ find_an_empty_flow(struct gro_tcp4_tbl *tbl)
 }
 
 static inline uint32_t
-insert_new_item(struct gro_tcp4_tbl *tbl,
-		struct rte_mbuf *pkt,
-		uint64_t start_time,
-		uint32_t prev_idx,
-		uint32_t sent_seq,
-		uint16_t ip_id,
-		uint8_t is_atomic)
+gro_tcp4_insert_flow(void *tbl,
+		void *key,
+		uint32_t item_idx)
 {
-	uint32_t item_idx;
+	struct gro_tcp4_tbl *tcp4_tbl = (struct gro_tcp4_tbl *)tbl;
+	struct tcp4_flow_key *src_key = (struct tcp4_flow_key *)key;
+	struct tcp4_flow_key *dst_key;
+	struct gro_tcp_flow *src_flow;
+	struct gro_tcp_flow *dst_flow;
+	uint32_t flow_idx;
 
-	item_idx = find_an_empty_item(tbl);
-	if (item_idx == INVALID_ARRAY_INDEX)
+	flow_idx = find_an_empty_flow(tcp4_tbl);
+	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
 		return INVALID_ARRAY_INDEX;
 
-	tbl->items[item_idx].firstseg = pkt;
-	tbl->items[item_idx].lastseg = rte_pktmbuf_lastseg(pkt);
-	tbl->items[item_idx].start_time = start_time;
-	tbl->items[item_idx].next_pkt_idx = INVALID_ARRAY_INDEX;
-	tbl->items[item_idx].sent_seq = sent_seq;
-	tbl->items[item_idx].ip_id = ip_id;
-	tbl->items[item_idx].nb_merged = 1;
-	tbl->items[item_idx].is_atomic = is_atomic;
-	tbl->item_num++;
-
-	/* if the previous packet exists, chain them together. */
-	if (prev_idx != INVALID_ARRAY_INDEX) {
-		tbl->items[item_idx].next_pkt_idx =
-			tbl->items[prev_idx].next_pkt_idx;
-		tbl->items[prev_idx].next_pkt_idx = item_idx;
-	}
+	dst_key = &(tcp4_tbl->flows[flow_idx].key);
+	dst_flow = &dst_key->tcp_flow;
+	src_flow = &src_key->tcp_flow;
 
-	return item_idx;
-}
+	ASSIGN_TCP_FLOW_KEY(src_flow, dst_flow)	
 
-static inline uint32_t
-delete_item(struct gro_tcp4_tbl *tbl, uint32_t item_idx,
-		uint32_t prev_item_idx)
-{
-	uint32_t next_idx = tbl->items[item_idx].next_pkt_idx;
+	dst_key->ip_src_addr = src_key->ip_src_addr;
+	dst_key->ip_dst_addr = src_key->ip_dst_addr;
 
-	/* NULL indicates an empty item */
-	tbl->items[item_idx].firstseg = NULL;
-	tbl->item_num--;
-	if (prev_item_idx != INVALID_ARRAY_INDEX)
-		tbl->items[prev_item_idx].next_pkt_idx = next_idx;
+	tcp4_tbl->flows[flow_idx].start_index = item_idx;
+	tcp4_tbl->flow_num++;
 
-	return next_idx;
+	return flow_idx;
 }
 
-static inline uint32_t
-insert_new_flow(struct gro_tcp4_tbl *tbl,
-		struct tcp4_flow_key *src,
-		uint32_t item_idx)
-{
-	struct tcp4_flow_key *dst;
-	uint32_t flow_idx;
-
-	flow_idx = find_an_empty_flow(tbl);
-	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
-		return INVALID_ARRAY_INDEX;
-
-	dst = &(tbl->flows[flow_idx].key);
-
-	rte_ether_addr_copy(&(src->eth_saddr), &(dst->eth_saddr));
-	rte_ether_addr_copy(&(src->eth_daddr), &(dst->eth_daddr));
-	dst->ip_src_addr = src->ip_src_addr;
-	dst->ip_dst_addr = src->ip_dst_addr;
-	dst->recv_ack = src->recv_ack;
-	dst->src_port = src->src_port;
-	dst->dst_port = src->dst_port;
 
-	tbl->flows[flow_idx].start_index = item_idx;
-	tbl->flow_num++;
+static uint32_t
+gro_tcp4_flow_lookup(void *tbl, void *key)
+{
+	struct gro_tcp4_tbl *tcp4_tbl = (struct gro_tcp4_tbl *)tbl;
+	struct tcp4_flow_key *tcp4_key = (struct tcp4_flow_key *)key;
+	uint32_t max_flow_num = tcp4_tbl->max_flow_num;
+	uint32_t remaining_flow_num = tcp4_tbl->flow_num;
+	uint32_t i;
 
-	return flow_idx;
+	/* Search for a matched flow. */
+	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
+		if (tcp4_tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
+			if (is_same_tcp4_flow(tcp4_tbl->flows[i].key, *tcp4_key)) {
+				return i;
+			}
+			remaining_flow_num--;
+		}
+	}
+	return INVALID_ARRAY_INDEX;
 }
 
-/*
- * update the packet length for the flushed packet.
- */
-static inline void
-update_header(struct gro_tcp_item *item)
+static void
+gro_tcp4_flow_key_init(void *key, struct rte_tcp_hdr *tcp_hdr)
 {
-	struct rte_ipv4_hdr *ipv4_hdr;
-	struct rte_mbuf *pkt = item->firstseg;
+	struct tcp4_flow_key *tcp4_key = (struct tcp4_flow_key *)key;
+	struct gro_tcp_flow *tcp_flow = &tcp4_key->tcp_flow;
+
+	tcp_flow->src_port = tcp_hdr->src_port;
+	tcp_flow->dst_port = tcp_hdr->dst_port;
+	tcp_flow->recv_ack = tcp_hdr->recv_ack;
 
-	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
-			pkt->l2_len);
-	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
-			pkt->l2_len);
 }
 
+struct gro_tcp_flow_ops gro_tcp4_flows_ops = {
+	.tcp_flow_lookup = gro_tcp4_flow_lookup,
+	.tcp_flow_insert = gro_tcp4_insert_flow,
+	.tcp_flow_key_init = gro_tcp4_flow_key_init
+};
+
 int32_t
 gro_tcp4_reassemble(struct rte_mbuf *pkt,
 		struct gro_tcp4_tbl *tbl,
@@ -247,87 +202,25 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
 	frag_off = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
 	is_atomic = (frag_off & RTE_IPV4_HDR_DF_FLAG) == RTE_IPV4_HDR_DF_FLAG;
 	ip_id = is_atomic ? 0 : rte_be_to_cpu_16(ipv4_hdr->packet_id);
-	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);
 
-	rte_ether_addr_copy(&(eth_hdr->src_addr), &(key.eth_saddr));
-	rte_ether_addr_copy(&(eth_hdr->dst_addr), &(key.eth_daddr));
-	key.ip_src_addr = ipv4_hdr->src_addr;
-	key.ip_dst_addr = ipv4_hdr->dst_addr;
-	key.src_port = tcp_hdr->src_port;
-	key.dst_port = tcp_hdr->dst_port;
-	key.recv_ack = tcp_hdr->recv_ack;
-
-	/* Search for a matched flow. */
-	max_flow_num = tbl->max_flow_num;
-	remaining_flow_num = tbl->flow_num;
-	find = 0;
-	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
-		if (tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
-			if (is_same_tcp4_flow(tbl->flows[i].key, key)) {
-				find = 1;
-				break;
-			}
-			remaining_flow_num--;
-		}
-	}
-
-	/*
-	 * Fail to find a matched flow. Insert a new flow and store the
-	 * packet into the flow.
-	 */
-	if (find == 0) {
-		item_idx = insert_new_item(tbl, pkt, start_time,
-				INVALID_ARRAY_INDEX, sent_seq, ip_id,
-				is_atomic);
-		if (item_idx == INVALID_ARRAY_INDEX)
-			return -1;
-		if (insert_new_flow(tbl, &key, item_idx) ==
-				INVALID_ARRAY_INDEX) {
-			/*
-			 * Fail to insert a new flow, so delete the
-			 * stored packet.
-			 */
-			delete_item(tbl, item_idx, INVALID_ARRAY_INDEX);
-			return -1;
-		}
-		return 0;
-	}
-
-	/*
-	 * Check all packets in the flow and try to find a neighbor for
-	 * the input packet.
-	 */
-	cur_idx = tbl->flows[i].start_index;
-	prev_idx = cur_idx;
-	do {
-		cmp = check_seq_option(&(tbl->items[cur_idx]), tcp_hdr,
-				sent_seq, ip_id, pkt->l4_len, tcp_dl, 0,
-				is_atomic);
-		if (cmp) {
-			if (merge_two_tcp_packets(&(tbl->items[cur_idx]),
-						pkt, cmp, sent_seq, ip_id, 0))
-				return 1;
-			/*
-			 * Fail to merge the two packets, as the packet
-			 * length is greater than the max value. Store
-			 * the packet into the flow.
-			 */
-			if (insert_new_item(tbl, pkt, start_time, cur_idx,
-						sent_seq, ip_id, is_atomic) ==
-					INVALID_ARRAY_INDEX)
-				return -1;
-			return 0;
-		}
-		prev_idx = cur_idx;
-		cur_idx = tbl->items[cur_idx].next_pkt_idx;
-	} while (cur_idx != INVALID_ARRAY_INDEX);
+	return gro_tcp_reassemble(pkt, tbl, &key, tcp_dl, &gro_tcp4_flows_ops, tbl->items, 
+						&tbl->item_num, tbl->max_item_num, 
+						ip_id, is_atomic, start_time);
+}
 
-	/* Fail to find a neighbor, so store the packet into the flow. */
-	if (insert_new_item(tbl, pkt, start_time, prev_idx, sent_seq,
-				ip_id, is_atomic) == INVALID_ARRAY_INDEX)
-		return -1;
+/*
+ * update the packet length for the flushed packet.
+ */
+static inline void
+update_header(struct gro_tcp_item *item)
+{
+	struct rte_ipv4_hdr *ipv4_hdr;
+	struct rte_mbuf *pkt = item->firstseg;
 
-	return 0;
+	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
+			pkt->l2_len);
+	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
+			pkt->l2_len);
 }
 
 uint16_t
diff a/lib/gro/gro_tcp4.h b/lib/gro/gro_tcp4.h	(rejected hunks)
@@ -5,19 +5,15 @@
 #ifndef _GRO_TCP4_H_
 #define _GRO_TCP4_H_
 
-#define INVALID_ARRAY_INDEX 0xffffffffUL
+#include <gro_tcp.h>
+
 #define GRO_TCP4_TBL_MAX_ITEM_NUM (1024UL * 1024UL)
 
 /* Header fields representing a TCP/IPv4 flow */
 struct tcp4_flow_key {
-	struct rte_ether_addr eth_saddr;
-	struct rte_ether_addr eth_daddr;
+	struct gro_tcp_flow tcp_flow;
 	uint32_t ip_src_addr;
 	uint32_t ip_dst_addr;
-
-	uint32_t recv_ack;
-	uint16_t src_port;
-	uint16_t dst_port;
 };
 
 struct gro_tcp4_flow {
@@ -143,13 +139,9 @@ uint32_t gro_tcp4_tbl_pkt_count(void *tbl);
 static inline int
 is_same_tcp4_flow(struct tcp4_flow_key k1, struct tcp4_flow_key k2)
 {
-	return (rte_is_same_ether_addr(&k1.eth_saddr, &k2.eth_saddr) &&
-			rte_is_same_ether_addr(&k1.eth_daddr, &k2.eth_daddr) &&
-			(k1.ip_src_addr == k2.ip_src_addr) &&
+	return ((k1.ip_src_addr == k2.ip_src_addr) &&
 			(k1.ip_dst_addr == k2.ip_dst_addr) &&
-			(k1.recv_ack == k2.recv_ack) &&
-			(k1.src_port == k2.src_port) &&
-			(k1.dst_port == k2.dst_port));
+			is_same_tcp_flow(&k1.tcp_flow, &k2.tcp_flow));
 }
 
 #endif
diff a/lib/gro/meson.build b/lib/gro/meson.build	(rejected hunks)
@@ -3,6 +3,7 @@
 
 sources = files(
         'rte_gro.c',
+        'gro_tcp.c',
         'gro_tcp4.c',
         'gro_tcp6.c',
         'gro_udp4.c',

https://lab.dpdk.org/results/dashboard/patchsets/26503/

UNH-IOL DPDK Community Lab

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

* |WARNING| pw127946 [PATCH] [v3] gro : ipv6-gro review comments to reduce code duplication across v4 and v6
@ 2023-06-10 18:32 dpdklab
  0 siblings, 0 replies; 5+ messages in thread
From: dpdklab @ 2023-06-10 18:32 UTC (permalink / raw)
  To: test-report; +Cc: dpdk-test-reports

Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/127946

_apply patch failure_

Submitter: kumaraparameshwaran rathinavel <kumaraparamesh92@gmail.com>
Date: Friday, June 02 2023 06:02:15 
Applied on: CommitID:abaa473297cf21cb81e5348185a7694ae2f221e7
Apply patch set 127946 failed:

.git/rebase-apply/patch:108: trailing whitespace.
int32_t 
.git/rebase-apply/patch:109: trailing whitespace.
gro_tcp_reassemble(struct rte_mbuf *pkt, 
.git/rebase-apply/patch:110: trailing whitespace.
	void *tbl, 
.git/rebase-apply/patch:111: trailing whitespace.
	void *key, 
.git/rebase-apply/patch:135: trailing whitespace.
	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);	
Checking patch lib/gro/gro_tcp.c...
Checking patch lib/gro/gro_tcp.h...
error: lib/gro/gro_tcp.h: does not exist in index
Checking patch lib/gro/gro_tcp4.c...
Hunk #1 succeeded at 71 (offset -1 lines).
error: while searching for:
}

static inline uint32_t
insert_new_item(struct gro_tcp4_tbl *tbl,
		struct rte_mbuf *pkt,
		uint64_t start_time,
		uint32_t prev_idx,
		uint32_t sent_seq,
		uint16_t ip_id,
		uint8_t is_atomic)
{
	uint32_t item_idx;

	item_idx = find_an_empty_item(tbl);
	if (item_idx == INVALID_ARRAY_INDEX)
		return INVALID_ARRAY_INDEX;

	tbl->items[item_idx].firstseg = pkt;
	tbl->items[item_idx].lastseg = rte_pktmbuf_lastseg(pkt);
	tbl->items[item_idx].start_time = start_time;
	tbl->items[item_idx].next_pkt_idx = INVALID_ARRAY_INDEX;
	tbl->items[item_idx].sent_seq = sent_seq;
	tbl->items[item_idx].ip_id = ip_id;
	tbl->items[item_idx].nb_merged = 1;
	tbl->items[item_idx].is_atomic = is_atomic;
	tbl->item_num++;

	/* if the previous packet exists, chain them together. */
	if (prev_idx != INVALID_ARRAY_INDEX) {
		tbl->items[item_idx].next_pkt_idx =
			tbl->items[prev_idx].next_pkt_idx;
		tbl->items[prev_idx].next_pkt_idx = item_idx;
	}

	return item_idx;
}

static inline uint32_t
delete_item(struct gro_tcp4_tbl *tbl, uint32_t item_idx,
		uint32_t prev_item_idx)
{
	uint32_t next_idx = tbl->items[item_idx].next_pkt_idx;

	/* NULL indicates an empty item */
	tbl->items[item_idx].firstseg = NULL;
	tbl->item_num--;
	if (prev_item_idx != INVALID_ARRAY_INDEX)
		tbl->items[prev_item_idx].next_pkt_idx = next_idx;

	return next_idx;
}

static inline uint32_t
insert_new_flow(struct gro_tcp4_tbl *tbl,
		struct tcp4_flow_key *src,
		uint32_t item_idx)
{
	struct tcp4_flow_key *dst;
	uint32_t flow_idx;

	flow_idx = find_an_empty_flow(tbl);
	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
		return INVALID_ARRAY_INDEX;

	dst = &(tbl->flows[flow_idx].key);

	rte_ether_addr_copy(&(src->eth_saddr), &(dst->eth_saddr));
	rte_ether_addr_copy(&(src->eth_daddr), &(dst->eth_daddr));
	dst->ip_src_addr = src->ip_src_addr;
	dst->ip_dst_addr = src->ip_dst_addr;
	dst->recv_ack = src->recv_ack;
	dst->src_port = src->src_port;
	dst->dst_port = src->dst_port;

	tbl->flows[flow_idx].start_index = item_idx;
	tbl->flow_num++;

	return flow_idx;
}

/*
 * update the packet length for the flushed packet.
 */
static inline void
update_header(struct gro_tcp_item *item)
{
	struct rte_ipv4_hdr *ipv4_hdr;
	struct rte_mbuf *pkt = item->firstseg;

	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
			pkt->l2_len);
	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
			pkt->l2_len);
}

int32_t
gro_tcp4_reassemble(struct rte_mbuf *pkt,
		struct gro_tcp4_tbl *tbl,

error: patch failed: lib/gro/gro_tcp4.c:97
Hunk #3 succeeded at 183 (offset 21 lines).
Hunk #4 succeeded at 197 (offset 21 lines).
Hunk #5 succeeded at 212 (offset 21 lines).
error: while searching for:
	frag_off = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
	is_atomic = (frag_off & RTE_IPV4_HDR_DF_FLAG) == RTE_IPV4_HDR_DF_FLAG;
	ip_id = is_atomic ? 0 : rte_be_to_cpu_16(ipv4_hdr->packet_id);
	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);

	rte_ether_addr_copy(&(eth_hdr->src_addr), &(key.eth_saddr));
	rte_ether_addr_copy(&(eth_hdr->dst_addr), &(key.eth_daddr));
	key.ip_src_addr = ipv4_hdr->src_addr;
	key.ip_dst_addr = ipv4_hdr->dst_addr;
	key.src_port = tcp_hdr->src_port;
	key.dst_port = tcp_hdr->dst_port;
	key.recv_ack = tcp_hdr->recv_ack;

	/* Search for a matched flow. */
	max_flow_num = tbl->max_flow_num;
	remaining_flow_num = tbl->flow_num;
	find = 0;
	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
		if (tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
			if (is_same_tcp4_flow(tbl->flows[i].key, key)) {
				find = 1;
				break;
			}
			remaining_flow_num--;
		}
	}

	/*
	 * Fail to find a matched flow. Insert a new flow and store the
	 * packet into the flow.
	 */
	if (find == 0) {
		item_idx = insert_new_item(tbl, pkt, start_time,
				INVALID_ARRAY_INDEX, sent_seq, ip_id,
				is_atomic);
		if (item_idx == INVALID_ARRAY_INDEX)
			return -1;
		if (insert_new_flow(tbl, &key, item_idx) ==
				INVALID_ARRAY_INDEX) {
			/*
			 * Fail to insert a new flow, so delete the
			 * stored packet.
			 */
			delete_item(tbl, item_idx, INVALID_ARRAY_INDEX);
			return -1;
		}
		return 0;
	}

	/*
	 * Check all packets in the flow and try to find a neighbor for
	 * the input packet.
	 */
	cur_idx = tbl->flows[i].start_index;
	prev_idx = cur_idx;
	do {
		cmp = check_seq_option(&(tbl->items[cur_idx]), tcp_hdr,
				sent_seq, ip_id, pkt->l4_len, tcp_dl, 0,
				is_atomic);
		if (cmp) {
			if (merge_two_tcp_packets(&(tbl->items[cur_idx]),
						pkt, cmp, sent_seq, ip_id, 0))
				return 1;
			/*
			 * Fail to merge the two packets, as the packet
			 * length is greater than the max value. Store
			 * the packet into the flow.
			 */
			if (insert_new_item(tbl, pkt, start_time, cur_idx,
						sent_seq, ip_id, is_atomic) ==
					INVALID_ARRAY_INDEX)
				return -1;
			return 0;
		}
		prev_idx = cur_idx;
		cur_idx = tbl->items[cur_idx].next_pkt_idx;
	} while (cur_idx != INVALID_ARRAY_INDEX);

	/* Fail to find a neighbor, so store the packet into the flow. */
	if (insert_new_item(tbl, pkt, start_time, prev_idx, sent_seq,
				ip_id, is_atomic) == INVALID_ARRAY_INDEX)
		return -1;

	return 0;
}

uint16_t

error: patch failed: lib/gro/gro_tcp4.c:247
Hunk #7 succeeded at 330 (offset 83 lines).
Checking patch lib/gro/gro_tcp4.h...
error: while searching for:
#ifndef _GRO_TCP4_H_
#define _GRO_TCP4_H_

#define INVALID_ARRAY_INDEX 0xffffffffUL
#define GRO_TCP4_TBL_MAX_ITEM_NUM (1024UL * 1024UL)

/* Header fields representing a TCP/IPv4 flow */
struct tcp4_flow_key {
	struct rte_ether_addr eth_saddr;
	struct rte_ether_addr eth_daddr;
	uint32_t ip_src_addr;
	uint32_t ip_dst_addr;

	uint32_t recv_ack;
	uint16_t src_port;
	uint16_t dst_port;
};

struct gro_tcp4_flow {

error: patch failed: lib/gro/gro_tcp4.h:5
error: while searching for:
static inline int
is_same_tcp4_flow(struct tcp4_flow_key k1, struct tcp4_flow_key k2)
{
	return (rte_is_same_ether_addr(&k1.eth_saddr, &k2.eth_saddr) &&
			rte_is_same_ether_addr(&k1.eth_daddr, &k2.eth_daddr) &&
			(k1.ip_src_addr == k2.ip_src_addr) &&
			(k1.ip_dst_addr == k2.ip_dst_addr) &&
			(k1.recv_ack == k2.recv_ack) &&
			(k1.src_port == k2.src_port) &&
			(k1.dst_port == k2.dst_port));
}

#endif

error: patch failed: lib/gro/gro_tcp4.h:143
Checking patch lib/gro/gro_tcp6.c...
error: lib/gro/gro_tcp6.c: does not exist in index
Checking patch lib/gro/gro_tcp6.h...
error: lib/gro/gro_tcp6.h: does not exist in index
Checking patch lib/gro/gro_vxlan_tcp4.c...
Hunk #1 succeeded at 163 (offset -1 lines).
Hunk #2 succeeded at 351 (offset -1 lines).
Checking patch lib/gro/meson.build...
error: while searching for:

sources = files(
        'rte_gro.c',
        'gro_tcp4.c',
        'gro_tcp6.c',
        'gro_udp4.c',

error: patch failed: lib/gro/meson.build:3
Applied patch lib/gro/gro_tcp.c cleanly.
Applying patch lib/gro/gro_tcp4.c with 2 rejects...
Hunk #1 applied cleanly.
Rejected hunk #2.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Rejected hunk #6.
Hunk #7 applied cleanly.
Applying patch lib/gro/gro_tcp4.h with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Applied patch lib/gro/gro_vxlan_tcp4.c cleanly.
Applying patch lib/gro/meson.build with 1 reject...
Rejected hunk #1.
hint: Use 'git am --show-current-patch' to see the failed patch
diff a/lib/gro/gro_tcp4.c b/lib/gro/gro_tcp4.c	(rejected hunks)
@@ -97,98 +85,76 @@ find_an_empty_flow(struct gro_tcp4_tbl *tbl)
 }
 
 static inline uint32_t
-insert_new_item(struct gro_tcp4_tbl *tbl,
-		struct rte_mbuf *pkt,
-		uint64_t start_time,
-		uint32_t prev_idx,
-		uint32_t sent_seq,
-		uint16_t ip_id,
-		uint8_t is_atomic)
+gro_tcp4_insert_flow(void *tbl,
+		void *key,
+		uint32_t item_idx)
 {
-	uint32_t item_idx;
+	struct gro_tcp4_tbl *tcp4_tbl = (struct gro_tcp4_tbl *)tbl;
+	struct tcp4_flow_key *src_key = (struct tcp4_flow_key *)key;
+	struct tcp4_flow_key *dst_key;
+	struct gro_tcp_flow *src_flow;
+	struct gro_tcp_flow *dst_flow;
+	uint32_t flow_idx;
 
-	item_idx = find_an_empty_item(tbl);
-	if (item_idx == INVALID_ARRAY_INDEX)
+	flow_idx = find_an_empty_flow(tcp4_tbl);
+	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
 		return INVALID_ARRAY_INDEX;
 
-	tbl->items[item_idx].firstseg = pkt;
-	tbl->items[item_idx].lastseg = rte_pktmbuf_lastseg(pkt);
-	tbl->items[item_idx].start_time = start_time;
-	tbl->items[item_idx].next_pkt_idx = INVALID_ARRAY_INDEX;
-	tbl->items[item_idx].sent_seq = sent_seq;
-	tbl->items[item_idx].ip_id = ip_id;
-	tbl->items[item_idx].nb_merged = 1;
-	tbl->items[item_idx].is_atomic = is_atomic;
-	tbl->item_num++;
-
-	/* if the previous packet exists, chain them together. */
-	if (prev_idx != INVALID_ARRAY_INDEX) {
-		tbl->items[item_idx].next_pkt_idx =
-			tbl->items[prev_idx].next_pkt_idx;
-		tbl->items[prev_idx].next_pkt_idx = item_idx;
-	}
+	dst_key = &(tcp4_tbl->flows[flow_idx].key);
+	dst_flow = &dst_key->tcp_flow;
+	src_flow = &src_key->tcp_flow;
 
-	return item_idx;
-}
+	ASSIGN_TCP_FLOW_KEY(src_flow, dst_flow)	
 
-static inline uint32_t
-delete_item(struct gro_tcp4_tbl *tbl, uint32_t item_idx,
-		uint32_t prev_item_idx)
-{
-	uint32_t next_idx = tbl->items[item_idx].next_pkt_idx;
+	dst_key->ip_src_addr = src_key->ip_src_addr;
+	dst_key->ip_dst_addr = src_key->ip_dst_addr;
 
-	/* NULL indicates an empty item */
-	tbl->items[item_idx].firstseg = NULL;
-	tbl->item_num--;
-	if (prev_item_idx != INVALID_ARRAY_INDEX)
-		tbl->items[prev_item_idx].next_pkt_idx = next_idx;
+	tcp4_tbl->flows[flow_idx].start_index = item_idx;
+	tcp4_tbl->flow_num++;
 
-	return next_idx;
+	return flow_idx;
 }
 
-static inline uint32_t
-insert_new_flow(struct gro_tcp4_tbl *tbl,
-		struct tcp4_flow_key *src,
-		uint32_t item_idx)
-{
-	struct tcp4_flow_key *dst;
-	uint32_t flow_idx;
-
-	flow_idx = find_an_empty_flow(tbl);
-	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
-		return INVALID_ARRAY_INDEX;
-
-	dst = &(tbl->flows[flow_idx].key);
-
-	rte_ether_addr_copy(&(src->eth_saddr), &(dst->eth_saddr));
-	rte_ether_addr_copy(&(src->eth_daddr), &(dst->eth_daddr));
-	dst->ip_src_addr = src->ip_src_addr;
-	dst->ip_dst_addr = src->ip_dst_addr;
-	dst->recv_ack = src->recv_ack;
-	dst->src_port = src->src_port;
-	dst->dst_port = src->dst_port;
 
-	tbl->flows[flow_idx].start_index = item_idx;
-	tbl->flow_num++;
+static uint32_t
+gro_tcp4_flow_lookup(void *tbl, void *key)
+{
+	struct gro_tcp4_tbl *tcp4_tbl = (struct gro_tcp4_tbl *)tbl;
+	struct tcp4_flow_key *tcp4_key = (struct tcp4_flow_key *)key;
+	uint32_t max_flow_num = tcp4_tbl->max_flow_num;
+	uint32_t remaining_flow_num = tcp4_tbl->flow_num;
+	uint32_t i;
 
-	return flow_idx;
+	/* Search for a matched flow. */
+	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
+		if (tcp4_tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
+			if (is_same_tcp4_flow(tcp4_tbl->flows[i].key, *tcp4_key)) {
+				return i;
+			}
+			remaining_flow_num--;
+		}
+	}
+	return INVALID_ARRAY_INDEX;
 }
 
-/*
- * update the packet length for the flushed packet.
- */
-static inline void
-update_header(struct gro_tcp_item *item)
+static void
+gro_tcp4_flow_key_init(void *key, struct rte_tcp_hdr *tcp_hdr)
 {
-	struct rte_ipv4_hdr *ipv4_hdr;
-	struct rte_mbuf *pkt = item->firstseg;
+	struct tcp4_flow_key *tcp4_key = (struct tcp4_flow_key *)key;
+	struct gro_tcp_flow *tcp_flow = &tcp4_key->tcp_flow;
+
+	tcp_flow->src_port = tcp_hdr->src_port;
+	tcp_flow->dst_port = tcp_hdr->dst_port;
+	tcp_flow->recv_ack = tcp_hdr->recv_ack;
 
-	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
-			pkt->l2_len);
-	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
-			pkt->l2_len);
 }
 
+struct gro_tcp_flow_ops gro_tcp4_flows_ops = {
+	.tcp_flow_lookup = gro_tcp4_flow_lookup,
+	.tcp_flow_insert = gro_tcp4_insert_flow,
+	.tcp_flow_key_init = gro_tcp4_flow_key_init
+};
+
 int32_t
 gro_tcp4_reassemble(struct rte_mbuf *pkt,
 		struct gro_tcp4_tbl *tbl,
@@ -247,87 +202,25 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
 	frag_off = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
 	is_atomic = (frag_off & RTE_IPV4_HDR_DF_FLAG) == RTE_IPV4_HDR_DF_FLAG;
 	ip_id = is_atomic ? 0 : rte_be_to_cpu_16(ipv4_hdr->packet_id);
-	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);
 
-	rte_ether_addr_copy(&(eth_hdr->src_addr), &(key.eth_saddr));
-	rte_ether_addr_copy(&(eth_hdr->dst_addr), &(key.eth_daddr));
-	key.ip_src_addr = ipv4_hdr->src_addr;
-	key.ip_dst_addr = ipv4_hdr->dst_addr;
-	key.src_port = tcp_hdr->src_port;
-	key.dst_port = tcp_hdr->dst_port;
-	key.recv_ack = tcp_hdr->recv_ack;
-
-	/* Search for a matched flow. */
-	max_flow_num = tbl->max_flow_num;
-	remaining_flow_num = tbl->flow_num;
-	find = 0;
-	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
-		if (tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
-			if (is_same_tcp4_flow(tbl->flows[i].key, key)) {
-				find = 1;
-				break;
-			}
-			remaining_flow_num--;
-		}
-	}
-
-	/*
-	 * Fail to find a matched flow. Insert a new flow and store the
-	 * packet into the flow.
-	 */
-	if (find == 0) {
-		item_idx = insert_new_item(tbl, pkt, start_time,
-				INVALID_ARRAY_INDEX, sent_seq, ip_id,
-				is_atomic);
-		if (item_idx == INVALID_ARRAY_INDEX)
-			return -1;
-		if (insert_new_flow(tbl, &key, item_idx) ==
-				INVALID_ARRAY_INDEX) {
-			/*
-			 * Fail to insert a new flow, so delete the
-			 * stored packet.
-			 */
-			delete_item(tbl, item_idx, INVALID_ARRAY_INDEX);
-			return -1;
-		}
-		return 0;
-	}
-
-	/*
-	 * Check all packets in the flow and try to find a neighbor for
-	 * the input packet.
-	 */
-	cur_idx = tbl->flows[i].start_index;
-	prev_idx = cur_idx;
-	do {
-		cmp = check_seq_option(&(tbl->items[cur_idx]), tcp_hdr,
-				sent_seq, ip_id, pkt->l4_len, tcp_dl, 0,
-				is_atomic);
-		if (cmp) {
-			if (merge_two_tcp_packets(&(tbl->items[cur_idx]),
-						pkt, cmp, sent_seq, ip_id, 0))
-				return 1;
-			/*
-			 * Fail to merge the two packets, as the packet
-			 * length is greater than the max value. Store
-			 * the packet into the flow.
-			 */
-			if (insert_new_item(tbl, pkt, start_time, cur_idx,
-						sent_seq, ip_id, is_atomic) ==
-					INVALID_ARRAY_INDEX)
-				return -1;
-			return 0;
-		}
-		prev_idx = cur_idx;
-		cur_idx = tbl->items[cur_idx].next_pkt_idx;
-	} while (cur_idx != INVALID_ARRAY_INDEX);
+	return gro_tcp_reassemble(pkt, tbl, &key, tcp_dl, &gro_tcp4_flows_ops, tbl->items, 
+						&tbl->item_num, tbl->max_item_num, 
+						ip_id, is_atomic, start_time);
+}
 
-	/* Fail to find a neighbor, so store the packet into the flow. */
-	if (insert_new_item(tbl, pkt, start_time, prev_idx, sent_seq,
-				ip_id, is_atomic) == INVALID_ARRAY_INDEX)
-		return -1;
+/*
+ * update the packet length for the flushed packet.
+ */
+static inline void
+update_header(struct gro_tcp_item *item)
+{
+	struct rte_ipv4_hdr *ipv4_hdr;
+	struct rte_mbuf *pkt = item->firstseg;
 
-	return 0;
+	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
+			pkt->l2_len);
+	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
+			pkt->l2_len);
 }
 
 uint16_t
diff a/lib/gro/gro_tcp4.h b/lib/gro/gro_tcp4.h	(rejected hunks)
@@ -5,19 +5,15 @@
 #ifndef _GRO_TCP4_H_
 #define _GRO_TCP4_H_
 
-#define INVALID_ARRAY_INDEX 0xffffffffUL
+#include <gro_tcp.h>
+
 #define GRO_TCP4_TBL_MAX_ITEM_NUM (1024UL * 1024UL)
 
 /* Header fields representing a TCP/IPv4 flow */
 struct tcp4_flow_key {
-	struct rte_ether_addr eth_saddr;
-	struct rte_ether_addr eth_daddr;
+	struct gro_tcp_flow tcp_flow;
 	uint32_t ip_src_addr;
 	uint32_t ip_dst_addr;
-
-	uint32_t recv_ack;
-	uint16_t src_port;
-	uint16_t dst_port;
 };
 
 struct gro_tcp4_flow {
@@ -143,13 +139,9 @@ uint32_t gro_tcp4_tbl_pkt_count(void *tbl);
 static inline int
 is_same_tcp4_flow(struct tcp4_flow_key k1, struct tcp4_flow_key k2)
 {
-	return (rte_is_same_ether_addr(&k1.eth_saddr, &k2.eth_saddr) &&
-			rte_is_same_ether_addr(&k1.eth_daddr, &k2.eth_daddr) &&
-			(k1.ip_src_addr == k2.ip_src_addr) &&
+	return ((k1.ip_src_addr == k2.ip_src_addr) &&
 			(k1.ip_dst_addr == k2.ip_dst_addr) &&
-			(k1.recv_ack == k2.recv_ack) &&
-			(k1.src_port == k2.src_port) &&
-			(k1.dst_port == k2.dst_port));
+			is_same_tcp_flow(&k1.tcp_flow, &k2.tcp_flow));
 }
 
 #endif
diff a/lib/gro/meson.build b/lib/gro/meson.build	(rejected hunks)
@@ -3,6 +3,7 @@
 
 sources = files(
         'rte_gro.c',
+        'gro_tcp.c',
         'gro_tcp4.c',
         'gro_tcp6.c',
         'gro_udp4.c',

https://lab.dpdk.org/results/dashboard/patchsets/26503/

UNH-IOL DPDK Community Lab

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

* |WARNING| pw127946 [PATCH] [v3] gro : ipv6-gro review comments to reduce code duplication across v4 and v6
@ 2023-06-09 22:26 dpdklab
  0 siblings, 0 replies; 5+ messages in thread
From: dpdklab @ 2023-06-09 22:26 UTC (permalink / raw)
  To: test-report; +Cc: dpdk-test-reports

Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/127946

_apply patch failure_

Submitter: kumaraparameshwaran rathinavel <kumaraparamesh92@gmail.com>
Date: Friday, June 02 2023 06:02:15 
Applied on: CommitID:abaa473297cf21cb81e5348185a7694ae2f221e7
Apply patch set 127946 failed:

.git/rebase-apply/patch:108: trailing whitespace.
int32_t 
.git/rebase-apply/patch:109: trailing whitespace.
gro_tcp_reassemble(struct rte_mbuf *pkt, 
.git/rebase-apply/patch:110: trailing whitespace.
	void *tbl, 
.git/rebase-apply/patch:111: trailing whitespace.
	void *key, 
.git/rebase-apply/patch:135: trailing whitespace.
	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);	
Checking patch lib/gro/gro_tcp.c...
Checking patch lib/gro/gro_tcp.h...
error: lib/gro/gro_tcp.h: does not exist in index
Checking patch lib/gro/gro_tcp4.c...
Hunk #1 succeeded at 71 (offset -1 lines).
error: while searching for:
}

static inline uint32_t
insert_new_item(struct gro_tcp4_tbl *tbl,
		struct rte_mbuf *pkt,
		uint64_t start_time,
		uint32_t prev_idx,
		uint32_t sent_seq,
		uint16_t ip_id,
		uint8_t is_atomic)
{
	uint32_t item_idx;

	item_idx = find_an_empty_item(tbl);
	if (item_idx == INVALID_ARRAY_INDEX)
		return INVALID_ARRAY_INDEX;

	tbl->items[item_idx].firstseg = pkt;
	tbl->items[item_idx].lastseg = rte_pktmbuf_lastseg(pkt);
	tbl->items[item_idx].start_time = start_time;
	tbl->items[item_idx].next_pkt_idx = INVALID_ARRAY_INDEX;
	tbl->items[item_idx].sent_seq = sent_seq;
	tbl->items[item_idx].ip_id = ip_id;
	tbl->items[item_idx].nb_merged = 1;
	tbl->items[item_idx].is_atomic = is_atomic;
	tbl->item_num++;

	/* if the previous packet exists, chain them together. */
	if (prev_idx != INVALID_ARRAY_INDEX) {
		tbl->items[item_idx].next_pkt_idx =
			tbl->items[prev_idx].next_pkt_idx;
		tbl->items[prev_idx].next_pkt_idx = item_idx;
	}

	return item_idx;
}

static inline uint32_t
delete_item(struct gro_tcp4_tbl *tbl, uint32_t item_idx,
		uint32_t prev_item_idx)
{
	uint32_t next_idx = tbl->items[item_idx].next_pkt_idx;

	/* NULL indicates an empty item */
	tbl->items[item_idx].firstseg = NULL;
	tbl->item_num--;
	if (prev_item_idx != INVALID_ARRAY_INDEX)
		tbl->items[prev_item_idx].next_pkt_idx = next_idx;

	return next_idx;
}

static inline uint32_t
insert_new_flow(struct gro_tcp4_tbl *tbl,
		struct tcp4_flow_key *src,
		uint32_t item_idx)
{
	struct tcp4_flow_key *dst;
	uint32_t flow_idx;

	flow_idx = find_an_empty_flow(tbl);
	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
		return INVALID_ARRAY_INDEX;

	dst = &(tbl->flows[flow_idx].key);

	rte_ether_addr_copy(&(src->eth_saddr), &(dst->eth_saddr));
	rte_ether_addr_copy(&(src->eth_daddr), &(dst->eth_daddr));
	dst->ip_src_addr = src->ip_src_addr;
	dst->ip_dst_addr = src->ip_dst_addr;
	dst->recv_ack = src->recv_ack;
	dst->src_port = src->src_port;
	dst->dst_port = src->dst_port;

	tbl->flows[flow_idx].start_index = item_idx;
	tbl->flow_num++;

	return flow_idx;
}

/*
 * update the packet length for the flushed packet.
 */
static inline void
update_header(struct gro_tcp_item *item)
{
	struct rte_ipv4_hdr *ipv4_hdr;
	struct rte_mbuf *pkt = item->firstseg;

	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
			pkt->l2_len);
	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
			pkt->l2_len);
}

int32_t
gro_tcp4_reassemble(struct rte_mbuf *pkt,
		struct gro_tcp4_tbl *tbl,

error: patch failed: lib/gro/gro_tcp4.c:97
Hunk #3 succeeded at 183 (offset 21 lines).
Hunk #4 succeeded at 197 (offset 21 lines).
Hunk #5 succeeded at 212 (offset 21 lines).
error: while searching for:
	frag_off = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
	is_atomic = (frag_off & RTE_IPV4_HDR_DF_FLAG) == RTE_IPV4_HDR_DF_FLAG;
	ip_id = is_atomic ? 0 : rte_be_to_cpu_16(ipv4_hdr->packet_id);
	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);

	rte_ether_addr_copy(&(eth_hdr->src_addr), &(key.eth_saddr));
	rte_ether_addr_copy(&(eth_hdr->dst_addr), &(key.eth_daddr));
	key.ip_src_addr = ipv4_hdr->src_addr;
	key.ip_dst_addr = ipv4_hdr->dst_addr;
	key.src_port = tcp_hdr->src_port;
	key.dst_port = tcp_hdr->dst_port;
	key.recv_ack = tcp_hdr->recv_ack;

	/* Search for a matched flow. */
	max_flow_num = tbl->max_flow_num;
	remaining_flow_num = tbl->flow_num;
	find = 0;
	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
		if (tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
			if (is_same_tcp4_flow(tbl->flows[i].key, key)) {
				find = 1;
				break;
			}
			remaining_flow_num--;
		}
	}

	/*
	 * Fail to find a matched flow. Insert a new flow and store the
	 * packet into the flow.
	 */
	if (find == 0) {
		item_idx = insert_new_item(tbl, pkt, start_time,
				INVALID_ARRAY_INDEX, sent_seq, ip_id,
				is_atomic);
		if (item_idx == INVALID_ARRAY_INDEX)
			return -1;
		if (insert_new_flow(tbl, &key, item_idx) ==
				INVALID_ARRAY_INDEX) {
			/*
			 * Fail to insert a new flow, so delete the
			 * stored packet.
			 */
			delete_item(tbl, item_idx, INVALID_ARRAY_INDEX);
			return -1;
		}
		return 0;
	}

	/*
	 * Check all packets in the flow and try to find a neighbor for
	 * the input packet.
	 */
	cur_idx = tbl->flows[i].start_index;
	prev_idx = cur_idx;
	do {
		cmp = check_seq_option(&(tbl->items[cur_idx]), tcp_hdr,
				sent_seq, ip_id, pkt->l4_len, tcp_dl, 0,
				is_atomic);
		if (cmp) {
			if (merge_two_tcp_packets(&(tbl->items[cur_idx]),
						pkt, cmp, sent_seq, ip_id, 0))
				return 1;
			/*
			 * Fail to merge the two packets, as the packet
			 * length is greater than the max value. Store
			 * the packet into the flow.
			 */
			if (insert_new_item(tbl, pkt, start_time, cur_idx,
						sent_seq, ip_id, is_atomic) ==
					INVALID_ARRAY_INDEX)
				return -1;
			return 0;
		}
		prev_idx = cur_idx;
		cur_idx = tbl->items[cur_idx].next_pkt_idx;
	} while (cur_idx != INVALID_ARRAY_INDEX);

	/* Fail to find a neighbor, so store the packet into the flow. */
	if (insert_new_item(tbl, pkt, start_time, prev_idx, sent_seq,
				ip_id, is_atomic) == INVALID_ARRAY_INDEX)
		return -1;

	return 0;
}

uint16_t

error: patch failed: lib/gro/gro_tcp4.c:247
Hunk #7 succeeded at 330 (offset 83 lines).
Checking patch lib/gro/gro_tcp4.h...
error: while searching for:
#ifndef _GRO_TCP4_H_
#define _GRO_TCP4_H_

#define INVALID_ARRAY_INDEX 0xffffffffUL
#define GRO_TCP4_TBL_MAX_ITEM_NUM (1024UL * 1024UL)

/* Header fields representing a TCP/IPv4 flow */
struct tcp4_flow_key {
	struct rte_ether_addr eth_saddr;
	struct rte_ether_addr eth_daddr;
	uint32_t ip_src_addr;
	uint32_t ip_dst_addr;

	uint32_t recv_ack;
	uint16_t src_port;
	uint16_t dst_port;
};

struct gro_tcp4_flow {

error: patch failed: lib/gro/gro_tcp4.h:5
error: while searching for:
static inline int
is_same_tcp4_flow(struct tcp4_flow_key k1, struct tcp4_flow_key k2)
{
	return (rte_is_same_ether_addr(&k1.eth_saddr, &k2.eth_saddr) &&
			rte_is_same_ether_addr(&k1.eth_daddr, &k2.eth_daddr) &&
			(k1.ip_src_addr == k2.ip_src_addr) &&
			(k1.ip_dst_addr == k2.ip_dst_addr) &&
			(k1.recv_ack == k2.recv_ack) &&
			(k1.src_port == k2.src_port) &&
			(k1.dst_port == k2.dst_port));
}

#endif

error: patch failed: lib/gro/gro_tcp4.h:143
Checking patch lib/gro/gro_tcp6.c...
error: lib/gro/gro_tcp6.c: does not exist in index
Checking patch lib/gro/gro_tcp6.h...
error: lib/gro/gro_tcp6.h: does not exist in index
Checking patch lib/gro/gro_vxlan_tcp4.c...
Hunk #1 succeeded at 163 (offset -1 lines).
Hunk #2 succeeded at 351 (offset -1 lines).
Checking patch lib/gro/meson.build...
error: while searching for:

sources = files(
        'rte_gro.c',
        'gro_tcp4.c',
        'gro_tcp6.c',
        'gro_udp4.c',

error: patch failed: lib/gro/meson.build:3
Applied patch lib/gro/gro_tcp.c cleanly.
Applying patch lib/gro/gro_tcp4.c with 2 rejects...
Hunk #1 applied cleanly.
Rejected hunk #2.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Rejected hunk #6.
Hunk #7 applied cleanly.
Applying patch lib/gro/gro_tcp4.h with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Applied patch lib/gro/gro_vxlan_tcp4.c cleanly.
Applying patch lib/gro/meson.build with 1 reject...
Rejected hunk #1.
hint: Use 'git am --show-current-patch' to see the failed patch
diff a/lib/gro/gro_tcp4.c b/lib/gro/gro_tcp4.c	(rejected hunks)
@@ -97,98 +85,76 @@ find_an_empty_flow(struct gro_tcp4_tbl *tbl)
 }
 
 static inline uint32_t
-insert_new_item(struct gro_tcp4_tbl *tbl,
-		struct rte_mbuf *pkt,
-		uint64_t start_time,
-		uint32_t prev_idx,
-		uint32_t sent_seq,
-		uint16_t ip_id,
-		uint8_t is_atomic)
+gro_tcp4_insert_flow(void *tbl,
+		void *key,
+		uint32_t item_idx)
 {
-	uint32_t item_idx;
+	struct gro_tcp4_tbl *tcp4_tbl = (struct gro_tcp4_tbl *)tbl;
+	struct tcp4_flow_key *src_key = (struct tcp4_flow_key *)key;
+	struct tcp4_flow_key *dst_key;
+	struct gro_tcp_flow *src_flow;
+	struct gro_tcp_flow *dst_flow;
+	uint32_t flow_idx;
 
-	item_idx = find_an_empty_item(tbl);
-	if (item_idx == INVALID_ARRAY_INDEX)
+	flow_idx = find_an_empty_flow(tcp4_tbl);
+	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
 		return INVALID_ARRAY_INDEX;
 
-	tbl->items[item_idx].firstseg = pkt;
-	tbl->items[item_idx].lastseg = rte_pktmbuf_lastseg(pkt);
-	tbl->items[item_idx].start_time = start_time;
-	tbl->items[item_idx].next_pkt_idx = INVALID_ARRAY_INDEX;
-	tbl->items[item_idx].sent_seq = sent_seq;
-	tbl->items[item_idx].ip_id = ip_id;
-	tbl->items[item_idx].nb_merged = 1;
-	tbl->items[item_idx].is_atomic = is_atomic;
-	tbl->item_num++;
-
-	/* if the previous packet exists, chain them together. */
-	if (prev_idx != INVALID_ARRAY_INDEX) {
-		tbl->items[item_idx].next_pkt_idx =
-			tbl->items[prev_idx].next_pkt_idx;
-		tbl->items[prev_idx].next_pkt_idx = item_idx;
-	}
+	dst_key = &(tcp4_tbl->flows[flow_idx].key);
+	dst_flow = &dst_key->tcp_flow;
+	src_flow = &src_key->tcp_flow;
 
-	return item_idx;
-}
+	ASSIGN_TCP_FLOW_KEY(src_flow, dst_flow)	
 
-static inline uint32_t
-delete_item(struct gro_tcp4_tbl *tbl, uint32_t item_idx,
-		uint32_t prev_item_idx)
-{
-	uint32_t next_idx = tbl->items[item_idx].next_pkt_idx;
+	dst_key->ip_src_addr = src_key->ip_src_addr;
+	dst_key->ip_dst_addr = src_key->ip_dst_addr;
 
-	/* NULL indicates an empty item */
-	tbl->items[item_idx].firstseg = NULL;
-	tbl->item_num--;
-	if (prev_item_idx != INVALID_ARRAY_INDEX)
-		tbl->items[prev_item_idx].next_pkt_idx = next_idx;
+	tcp4_tbl->flows[flow_idx].start_index = item_idx;
+	tcp4_tbl->flow_num++;
 
-	return next_idx;
+	return flow_idx;
 }
 
-static inline uint32_t
-insert_new_flow(struct gro_tcp4_tbl *tbl,
-		struct tcp4_flow_key *src,
-		uint32_t item_idx)
-{
-	struct tcp4_flow_key *dst;
-	uint32_t flow_idx;
-
-	flow_idx = find_an_empty_flow(tbl);
-	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
-		return INVALID_ARRAY_INDEX;
-
-	dst = &(tbl->flows[flow_idx].key);
-
-	rte_ether_addr_copy(&(src->eth_saddr), &(dst->eth_saddr));
-	rte_ether_addr_copy(&(src->eth_daddr), &(dst->eth_daddr));
-	dst->ip_src_addr = src->ip_src_addr;
-	dst->ip_dst_addr = src->ip_dst_addr;
-	dst->recv_ack = src->recv_ack;
-	dst->src_port = src->src_port;
-	dst->dst_port = src->dst_port;
 
-	tbl->flows[flow_idx].start_index = item_idx;
-	tbl->flow_num++;
+static uint32_t
+gro_tcp4_flow_lookup(void *tbl, void *key)
+{
+	struct gro_tcp4_tbl *tcp4_tbl = (struct gro_tcp4_tbl *)tbl;
+	struct tcp4_flow_key *tcp4_key = (struct tcp4_flow_key *)key;
+	uint32_t max_flow_num = tcp4_tbl->max_flow_num;
+	uint32_t remaining_flow_num = tcp4_tbl->flow_num;
+	uint32_t i;
 
-	return flow_idx;
+	/* Search for a matched flow. */
+	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
+		if (tcp4_tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
+			if (is_same_tcp4_flow(tcp4_tbl->flows[i].key, *tcp4_key)) {
+				return i;
+			}
+			remaining_flow_num--;
+		}
+	}
+	return INVALID_ARRAY_INDEX;
 }
 
-/*
- * update the packet length for the flushed packet.
- */
-static inline void
-update_header(struct gro_tcp_item *item)
+static void
+gro_tcp4_flow_key_init(void *key, struct rte_tcp_hdr *tcp_hdr)
 {
-	struct rte_ipv4_hdr *ipv4_hdr;
-	struct rte_mbuf *pkt = item->firstseg;
+	struct tcp4_flow_key *tcp4_key = (struct tcp4_flow_key *)key;
+	struct gro_tcp_flow *tcp_flow = &tcp4_key->tcp_flow;
+
+	tcp_flow->src_port = tcp_hdr->src_port;
+	tcp_flow->dst_port = tcp_hdr->dst_port;
+	tcp_flow->recv_ack = tcp_hdr->recv_ack;
 
-	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
-			pkt->l2_len);
-	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
-			pkt->l2_len);
 }
 
+struct gro_tcp_flow_ops gro_tcp4_flows_ops = {
+	.tcp_flow_lookup = gro_tcp4_flow_lookup,
+	.tcp_flow_insert = gro_tcp4_insert_flow,
+	.tcp_flow_key_init = gro_tcp4_flow_key_init
+};
+
 int32_t
 gro_tcp4_reassemble(struct rte_mbuf *pkt,
 		struct gro_tcp4_tbl *tbl,
@@ -247,87 +202,25 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
 	frag_off = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
 	is_atomic = (frag_off & RTE_IPV4_HDR_DF_FLAG) == RTE_IPV4_HDR_DF_FLAG;
 	ip_id = is_atomic ? 0 : rte_be_to_cpu_16(ipv4_hdr->packet_id);
-	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);
 
-	rte_ether_addr_copy(&(eth_hdr->src_addr), &(key.eth_saddr));
-	rte_ether_addr_copy(&(eth_hdr->dst_addr), &(key.eth_daddr));
-	key.ip_src_addr = ipv4_hdr->src_addr;
-	key.ip_dst_addr = ipv4_hdr->dst_addr;
-	key.src_port = tcp_hdr->src_port;
-	key.dst_port = tcp_hdr->dst_port;
-	key.recv_ack = tcp_hdr->recv_ack;
-
-	/* Search for a matched flow. */
-	max_flow_num = tbl->max_flow_num;
-	remaining_flow_num = tbl->flow_num;
-	find = 0;
-	for (i = 0; i < max_flow_num && remaining_flow_num; i++) {
-		if (tbl->flows[i].start_index != INVALID_ARRAY_INDEX) {
-			if (is_same_tcp4_flow(tbl->flows[i].key, key)) {
-				find = 1;
-				break;
-			}
-			remaining_flow_num--;
-		}
-	}
-
-	/*
-	 * Fail to find a matched flow. Insert a new flow and store the
-	 * packet into the flow.
-	 */
-	if (find == 0) {
-		item_idx = insert_new_item(tbl, pkt, start_time,
-				INVALID_ARRAY_INDEX, sent_seq, ip_id,
-				is_atomic);
-		if (item_idx == INVALID_ARRAY_INDEX)
-			return -1;
-		if (insert_new_flow(tbl, &key, item_idx) ==
-				INVALID_ARRAY_INDEX) {
-			/*
-			 * Fail to insert a new flow, so delete the
-			 * stored packet.
-			 */
-			delete_item(tbl, item_idx, INVALID_ARRAY_INDEX);
-			return -1;
-		}
-		return 0;
-	}
-
-	/*
-	 * Check all packets in the flow and try to find a neighbor for
-	 * the input packet.
-	 */
-	cur_idx = tbl->flows[i].start_index;
-	prev_idx = cur_idx;
-	do {
-		cmp = check_seq_option(&(tbl->items[cur_idx]), tcp_hdr,
-				sent_seq, ip_id, pkt->l4_len, tcp_dl, 0,
-				is_atomic);
-		if (cmp) {
-			if (merge_two_tcp_packets(&(tbl->items[cur_idx]),
-						pkt, cmp, sent_seq, ip_id, 0))
-				return 1;
-			/*
-			 * Fail to merge the two packets, as the packet
-			 * length is greater than the max value. Store
-			 * the packet into the flow.
-			 */
-			if (insert_new_item(tbl, pkt, start_time, cur_idx,
-						sent_seq, ip_id, is_atomic) ==
-					INVALID_ARRAY_INDEX)
-				return -1;
-			return 0;
-		}
-		prev_idx = cur_idx;
-		cur_idx = tbl->items[cur_idx].next_pkt_idx;
-	} while (cur_idx != INVALID_ARRAY_INDEX);
+	return gro_tcp_reassemble(pkt, tbl, &key, tcp_dl, &gro_tcp4_flows_ops, tbl->items, 
+						&tbl->item_num, tbl->max_item_num, 
+						ip_id, is_atomic, start_time);
+}
 
-	/* Fail to find a neighbor, so store the packet into the flow. */
-	if (insert_new_item(tbl, pkt, start_time, prev_idx, sent_seq,
-				ip_id, is_atomic) == INVALID_ARRAY_INDEX)
-		return -1;
+/*
+ * update the packet length for the flushed packet.
+ */
+static inline void
+update_header(struct gro_tcp_item *item)
+{
+	struct rte_ipv4_hdr *ipv4_hdr;
+	struct rte_mbuf *pkt = item->firstseg;
 
-	return 0;
+	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
+			pkt->l2_len);
+	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
+			pkt->l2_len);
 }
 
 uint16_t
diff a/lib/gro/gro_tcp4.h b/lib/gro/gro_tcp4.h	(rejected hunks)
@@ -5,19 +5,15 @@
 #ifndef _GRO_TCP4_H_
 #define _GRO_TCP4_H_
 
-#define INVALID_ARRAY_INDEX 0xffffffffUL
+#include <gro_tcp.h>
+
 #define GRO_TCP4_TBL_MAX_ITEM_NUM (1024UL * 1024UL)
 
 /* Header fields representing a TCP/IPv4 flow */
 struct tcp4_flow_key {
-	struct rte_ether_addr eth_saddr;
-	struct rte_ether_addr eth_daddr;
+	struct gro_tcp_flow tcp_flow;
 	uint32_t ip_src_addr;
 	uint32_t ip_dst_addr;
-
-	uint32_t recv_ack;
-	uint16_t src_port;
-	uint16_t dst_port;
 };
 
 struct gro_tcp4_flow {
@@ -143,13 +139,9 @@ uint32_t gro_tcp4_tbl_pkt_count(void *tbl);
 static inline int
 is_same_tcp4_flow(struct tcp4_flow_key k1, struct tcp4_flow_key k2)
 {
-	return (rte_is_same_ether_addr(&k1.eth_saddr, &k2.eth_saddr) &&
-			rte_is_same_ether_addr(&k1.eth_daddr, &k2.eth_daddr) &&
-			(k1.ip_src_addr == k2.ip_src_addr) &&
+	return ((k1.ip_src_addr == k2.ip_src_addr) &&
 			(k1.ip_dst_addr == k2.ip_dst_addr) &&
-			(k1.recv_ack == k2.recv_ack) &&
-			(k1.src_port == k2.src_port) &&
-			(k1.dst_port == k2.dst_port));
+			is_same_tcp_flow(&k1.tcp_flow, &k2.tcp_flow));
 }
 
 #endif
diff a/lib/gro/meson.build b/lib/gro/meson.build	(rejected hunks)
@@ -3,6 +3,7 @@
 
 sources = files(
         'rte_gro.c',
+        'gro_tcp.c',
         'gro_tcp4.c',
         'gro_tcp6.c',
         'gro_udp4.c',

https://lab.dpdk.org/results/dashboard/patchsets/26503/

UNH-IOL DPDK Community Lab

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

* |WARNING| pw127946 [PATCH v3] gro : ipv6-gro review comments to reduce code duplication across v4 and v6
       [not found] <20230602060215.23900-1-kumaraparamesh92@gmail.com>
  2023-06-02  5:49 ` |WARNING| pw127946 [PATCH v3] " qemudev
@ 2023-06-02  6:04 ` checkpatch
  1 sibling, 0 replies; 5+ messages in thread
From: checkpatch @ 2023-06-02  6:04 UTC (permalink / raw)
  To: test-report; +Cc: Kumara Parameshwaran

Test-Label: checkpatch
Test-Status: WARNING
http://dpdk.org/patch/127946

_coding style issues_


WARNING:COMMIT_MESSAGE: Missing commit description - Add an appropriate one

ERROR:TRAILING_WHITESPACE: trailing whitespace
#192: FILE: lib/gro/gro_tcp.c:75:
+int32_t $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#193: FILE: lib/gro/gro_tcp.c:76:
+gro_tcp_reassemble(struct rte_mbuf *pkt, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#194: FILE: lib/gro/gro_tcp.c:77:
+^Ivoid *tbl, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#195: FILE: lib/gro/gro_tcp.c:78:
+^Ivoid *key, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#219: FILE: lib/gro/gro_tcp.c:102:
+^Isent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);^I$

WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#260: FILE: lib/gro/gro_tcp.c:143:
+			if (insert_new_tcp_item(pkt, items, item_num, table_size, start_time, cur_idx,

ERROR:MULTISTATEMENT_MACRO_USE_DO_WHILE: Macros with multiple statements should be enclosed in a do - while loop
#303: FILE: lib/gro/gro_tcp.h:27:
+#define ASSIGN_TCP_FLOW_KEY(k1, k2) \
+	rte_ether_addr_copy(&(k1->eth_saddr), &(k2->eth_saddr)); \
+	rte_ether_addr_copy(&(k1->eth_daddr), &(k2->eth_daddr)); \
+	k2->recv_ack = k1->recv_ack; \
+	k2->src_port = k1->src_port; \
+	k2->dst_port = k1->dst_port;

WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#303: FILE: lib/gro/gro_tcp.h:27:
+#define ASSIGN_TCP_FLOW_KEY(k1, k2) \
+	rte_ether_addr_copy(&(k1->eth_saddr), &(k2->eth_saddr)); \
+	rte_ether_addr_copy(&(k1->eth_daddr), &(k2->eth_daddr)); \
+	k2->recv_ack = k1->recv_ack; \
+	k2->src_port = k1->src_port; \
+	k2->dst_port = k1->dst_port;

ERROR:TRAILING_WHITESPACE: trailing whitespace
#339: FILE: lib/gro/gro_tcp.h:86:
+delete_tcp_item(struct gro_tcp_item *items, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#340: FILE: lib/gro/gro_tcp.h:87:
+^I^Iuint32_t item_idx, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#344: FILE: lib/gro/gro_tcp.h:91:
+int32_t $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#345: FILE: lib/gro/gro_tcp.h:92:
+gro_tcp_reassemble(struct rte_mbuf *pkt, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#346: FILE: lib/gro/gro_tcp.h:93:
+^Ivoid *tbl, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#347: FILE: lib/gro/gro_tcp.h:94:
+^Ivoid *key, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#445: FILE: lib/gro/gro_tcp4.c:107:
+^IASSIGN_TCP_FLOW_KEY(src_flow, dst_flow)^I$

WARNING:BRACES: braces {} are not necessary for single statement blocks
#504: FILE: lib/gro/gro_tcp4.c:131:
+			if (is_same_tcp4_flow(tcp4_tbl->flows[i].key, *tcp4_key)) {
+				return i;
+			}

ERROR:TRAILING_WHITESPACE: trailing whitespace
#675: FILE: lib/gro/gro_tcp4.c:206:
+^Ireturn gro_tcp_reassemble(pkt, tbl, &key, tcp_dl, &gro_tcp4_flows_ops, tbl->items, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#676: FILE: lib/gro/gro_tcp4.c:207:
+^I^I^I^I^I^I&tbl->item_num, tbl->max_item_num, $

WARNING:LONG_LINE: line length of 104 exceeds 100 columns
#706: FILE: lib/gro/gro_tcp4.c:250:
+				j = delete_tcp_item(tbl->items, j, &tbl->item_num, INVALID_ARRAY_INDEX);

ERROR:TRAILING_WHITESPACE: trailing whitespace
#860: FILE: lib/gro/gro_tcp6.c:107:
+^IASSIGN_TCP_FLOW_KEY(src_flow, dst_flow)^I$

WARNING:BRACES: braces {} are not necessary for single statement blocks
#891: FILE: lib/gro/gro_tcp6.c:147:
+			if (is_same_tcp6_flow(&tcp6_tbl->flows[i].key, tcp6_key)) {
+				return i;
+			}

ERROR:TRAILING_WHITESPACE: trailing whitespace
#1049: FILE: lib/gro/gro_tcp6.c:218:
+^Ireturn gro_tcp_reassemble(pkt, tbl, &key, tcp_dl, &gro_tcp6_flows_ops, tbl->items, $

ERROR:TRAILING_WHITESPACE: trailing whitespace
#1050: FILE: lib/gro/gro_tcp6.c:219:
+^I^I^I^I^I^I&tbl->item_num, tbl->max_item_num, $

WARNING:LONG_LINE: line length of 104 exceeds 100 columns
#1060: FILE: lib/gro/gro_tcp6.c:247:
+				j = delete_tcp_item(tbl->items, j, &tbl->item_num, INVALID_ARRAY_INDEX);

WARNING:BRACES: braces {} are not necessary for single statement blocks
#1107: FILE: lib/gro/gro_tcp6.h:146:
+	if (memcmp(&k1->src_addr, &k2->src_addr, 16)) {
+		return 0;
+	}

WARNING:BRACES: braces {} are not necessary for single statement blocks
#1110: FILE: lib/gro/gro_tcp6.h:149:
+	if (memcmp(&k1->dst_addr, &k2->dst_addr, 16)) {
+		return 0;
+	}

WARNING:BLOCK_COMMENT_STYLE: Block comments should align the * on each line
#1114: FILE: lib/gro/gro_tcp6.h:153:
+	/*
+	* IP version (4) Traffic Class (8) Flow Label (20)

total: 18 errors, 10 warnings, 1006 lines checked

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

* |WARNING| pw127946 [PATCH v3] gro : ipv6-gro review comments to reduce code duplication across v4 and v6
       [not found] <20230602060215.23900-1-kumaraparamesh92@gmail.com>
@ 2023-06-02  5:49 ` qemudev
  2023-06-02  6:04 ` checkpatch
  1 sibling, 0 replies; 5+ messages in thread
From: qemudev @ 2023-06-02  5:49 UTC (permalink / raw)
  To: test-report; +Cc: Kumara Parameshwaran, zhoumin

Test-Label: loongarch-compilation
Test-Status: WARNING
http://dpdk.org/patch/127946

_apply patch failure_

Submitter: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
Date: Fri,  2 Jun 2023 11:32:15 +0530
DPDK git baseline: Repo:dpdk
  Branch: main
  CommitID: abaa473297cf21cb81e5348185a7694ae2f221e7

Apply patch set 127946 failed:

/home/zhoumin/dpdk-ci/tools/../series/28316/127946.patch:192: trailing whitespace.
int32_t 
/home/zhoumin/dpdk-ci/tools/../series/28316/127946.patch:193: trailing whitespace.
gro_tcp_reassemble(struct rte_mbuf *pkt, 
/home/zhoumin/dpdk-ci/tools/../series/28316/127946.patch:194: trailing whitespace.
	void *tbl, 
/home/zhoumin/dpdk-ci/tools/../series/28316/127946.patch:195: trailing whitespace.
	void *key, 
/home/zhoumin/dpdk-ci/tools/../series/28316/127946.patch:219: trailing whitespace.
	sent_seq = rte_be_to_cpu_32(tcp_hdr->sent_seq);	
Checking patch lib/gro/gro_tcp.c...
Checking patch lib/gro/gro_tcp.h...
error: lib/gro/gro_tcp.h: No such file or directory
Checking patch lib/gro/gro_tcp4.c...
Hunk #1 succeeded at 71 (offset -1 lines).
error: while searching for:
}

static inline uint32_t
insert_new_item(struct gro_tcp4_tbl *tbl,
		struct rte_mbuf *pkt,
		uint64_t start_time,
		uint32_t prev_idx,
		uint32_t sent_seq,
		uint16_t ip_id,
		uint8_t is_atomic)
{
	uint32_t item_idx;

	item_idx = find_an_empty_item(tbl);
	if (item_idx == INVALID_ARRAY_INDEX)
		return INVALID_ARRAY_INDEX;

	tbl->items[item_idx].firstseg = pkt;
	tbl->items[item_idx].lastseg = rte_pktmbuf_lastseg(pkt);
	tbl->items[item_idx].start_time = start_time;
	tbl->items[item_idx].next_pkt_idx = INVALID_ARRAY_INDEX;
	tbl->items[item_idx].sent_seq = sent_seq;
	tbl->items[item_idx].ip_id = ip_id;
	tbl->items[item_idx].nb_merged = 1;
	tbl->items[item_idx].is_atomic = is_atomic;
	tbl->item_num++;

	/* if the previous packet exists, chain them together. */
	if (prev_idx != INVALID_ARRAY_INDEX) {
		tbl->items[item_idx].next_pkt_idx =
			tbl->items[prev_idx].next_pkt_idx;
		tbl->items[prev_idx].next_pkt_idx = item_idx;
	}

	return item_idx;
}

static inline uint32_t
delete_item(struct gro_tcp4_tbl *tbl, uint32_t item_idx,
		uint32_t prev_item_idx)
{
	uint32_t next_idx = tbl->items[item_idx].next_pkt_idx;

	/* NULL indicates an empty item */
	tbl->items[item_idx].firstseg = NULL;
	tbl->item_num--;
	if (prev_item_idx != INVALID_ARRAY_INDEX)
		tbl->items[prev_item_idx].next_pkt_idx = next_idx;

	return next_idx;
}

static inline uint32_t
insert_new_flow(struct gro_tcp4_tbl *tbl,
		struct tcp4_flow_key *src,
		uint32_t item_idx)
{
	struct tcp4_flow_key *dst;
	uint32_t flow_idx;

	flow_idx = find_an_empty_flow(tbl);
	if (unlikely(flow_idx == INVALID_ARRAY_INDEX))
		return INVALID_ARRAY_INDEX;

	dst = &(tbl->flows[flow_idx].key);

	rte_ether_addr_copy(&(src->eth_saddr), &(dst->eth_saddr));
	rte_ether_addr_copy(&(src->eth_daddr), &(dst->eth_daddr));
	dst->ip_src_addr = src->ip_src_addr;
	dst->ip_dst_addr = src->ip_dst_addr;
	dst->recv_ack = src->recv_ack;
	dst->src_port = src->src_port;
	dst->dst_port = src->dst_port;

	tbl->flows[flow_idx].start_index = item_idx;
	tbl->flow_num++;

	return flow_idx;
}

/*
 * update the packet length for the flushed packet.
 */
static inline void
update_header(struct gro_tcp_item *item)
{
	struct rte_ipv4_hdr *ipv4_hdr;
	struct rte_mbuf *pkt = item->firstseg;

	ipv4_hdr = (struct rte_ipv4_hdr *)(rte_pktmbuf_mtod(pkt, char *) +
			pkt->l2_len);
	ipv4_hdr->total_length = rte_cpu_to_be_16(pkt->pkt_len -
			pkt->l2_len);
}

int32_t
gro_tcp4_reassemble(struct rte_mbuf *pkt,
		struct gro_tcp4_tbl *tbl,

error: patch failed: lib/gro/gro_tcp4.c:97
error: lib/gro/gro_tcp4.c: patch does not apply
Checking patch lib/gro/gro_tcp4.h...
error: while searching for:
#ifndef _GRO_TCP4_H_
#define _GRO_TCP4_H_

#define INVALID_ARRAY_INDEX 0xffffffffUL
#define GRO_TCP4_TBL_MAX_ITEM_NUM (1024UL * 1024UL)

/* Header fields representing a TCP/IPv4 flow */
struct tcp4_flow_key {
	struct rte_ether_addr eth_saddr;
	struct rte_ether_addr eth_daddr;
	uint32_t ip_src_addr;
	uint32_t ip_dst_addr;

	uint32_t recv_ack;
	uint16_t src_port;
	uint16_t dst_port;
};

struct gro_tcp4_flow {

error: patch failed: lib/gro/gro_tcp4.h:5
error: lib/gro/gro_tcp4.h: patch does not apply
Checking patch lib/gro/gro_tcp6.c...
error: lib/gro/gro_tcp6.c: No such file or directory
Checking patch lib/gro/gro_tcp6.h...
error: lib/gro/gro_tcp6.h: No such file or directory
Checking patch lib/gro/gro_vxlan_tcp4.c...
Hunk #1 succeeded at 163 (offset -1 lines).
Hunk #2 succeeded at 351 (offset -1 lines).
Checking patch lib/gro/meson.build...
error: while searching for:

sources = files(
        'rte_gro.c',
        'gro_tcp4.c',
        'gro_tcp6.c',
        'gro_udp4.c',

error: patch failed: lib/gro/meson.build:3
error: lib/gro/meson.build: patch does not apply


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

end of thread, other threads:[~2023-06-10 18:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-02  6:22 |WARNING| pw127946 [PATCH] [v3] gro : ipv6-gro review comments to reduce code duplication across v4 and v6 dpdklab
  -- strict thread matches above, loose matches on Subject: below --
2023-06-10 18:32 dpdklab
2023-06-09 22:26 dpdklab
     [not found] <20230602060215.23900-1-kumaraparamesh92@gmail.com>
2023-06-02  5:49 ` |WARNING| pw127946 [PATCH v3] " qemudev
2023-06-02  6:04 ` checkpatch

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).