diff --git a/0120-resolve-the-conflict-between-the-eth_dev_ops-variabl.patch b/0120-resolve-the-conflict-between-the-eth_dev_ops-variabl.patch new file mode 100644 index 0000000..e1f0c2c --- /dev/null +++ b/0120-resolve-the-conflict-between-the-eth_dev_ops-variabl.patch @@ -0,0 +1,174 @@ +From af42b7871afc5ad80b5b2db5341a852218de0e1e Mon Sep 17 00:00:00 2001 +From: wu-changsheng +Date: Mon, 7 Nov 2022 15:15:52 +0800 +Subject: [PATCH] resolve the conflict between the eth_dev_ops variable and the + dpdk-19.11 + +--- + src/common/dpdk_common.h | 2 +- + src/lstack/core/lstack_lwip.c | 3 ++- + src/lstack/include/lstack_ethdev.h | 2 +- + src/lstack/include/lstack_protocol_stack.h | 3 ++- + src/lstack/include/lstack_vdev.h | 6 ++++-- + src/lstack/netif/lstack_ethdev.c | 8 +++----- + src/lstack/netif/lstack_vdev.c | 18 +++++------------- + 7 files changed, 18 insertions(+), 24 deletions(-) + +diff --git a/src/common/dpdk_common.h b/src/common/dpdk_common.h +index c2cbda7..753c168 100644 +--- a/src/common/dpdk_common.h ++++ b/src/common/dpdk_common.h +@@ -135,7 +135,7 @@ static __rte_always_inline uint32_t gazelle_light_ring_dequeue_burst(struct rte_ + cons.tail prod.tail prod.head cons.head + gazelle_ring_sp_enqueue: cons.head-->> cons.tal, enqueue object + gazelle_ring_sc_dequeue: cons.tal -->> prod.tail, dequeue object +- gazelle_ring_read: prod.tail-->> cons.head, read object, prod.head = prod.tail + N ++ gazelle_ring_read: prod.head-->> cons.head, read object, prod.head = prod.tail + N + gazelle_ring_read_over: prod.tail = prod.head, update prod.tail + */ + static __rte_always_inline uint32_t gazelle_ring_sp_enqueue(struct rte_ring *r, void **obj_table, uint32_t n) +diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c +index 52b4624..0437187 100644 +--- a/src/lstack/core/lstack_lwip.c ++++ b/src/lstack/core/lstack_lwip.c +@@ -619,6 +619,7 @@ ssize_t read_stack_data(int32_t fd, void *buf, size_t len, int32_t flags) + ssize_t recvd = 0; + uint16_t copy_len; + struct lwip_sock *sock = get_socket_by_fd(fd); ++ bool latency_enable = get_protocol_stack_group()->latency_start; + + if (sock->errevent > 0 && !NETCONN_IS_DATAIN(sock)) { + return 0; +@@ -650,7 +651,7 @@ ssize_t read_stack_data(int32_t fd, void *buf, size_t len, int32_t flags) + if (sock->wakeup) { + sock->wakeup->stat.app_read_cnt += 1; + } +- if (get_protocol_stack_group()->latency_start) { ++ if (latency_enable) { + calculate_lstack_latency(&sock->stack->latency, pbuf, GAZELLE_LATENCY_READ); + } + gazelle_ring_read_over(sock->recv_ring); +diff --git a/src/lstack/include/lstack_ethdev.h b/src/lstack/include/lstack_ethdev.h +index a174978..c64b4a0 100644 +--- a/src/lstack/include/lstack_ethdev.h ++++ b/src/lstack/include/lstack_ethdev.h +@@ -15,7 +15,7 @@ + + struct protocol_stack; + struct rte_mbuf; +-struct eth_dev_ops { ++struct lstack_dev_ops { + uint32_t (*rx_poll)(struct protocol_stack *stack, struct rte_mbuf **pkts, uint32_t max_mbuf); + uint32_t (*tx_xmit)(struct protocol_stack *stack, struct rte_mbuf **pkts, uint32_t nr_pkts); + }; +diff --git a/src/lstack/include/lstack_protocol_stack.h b/src/lstack/include/lstack_protocol_stack.h +index fed1882..2d9053a 100644 +--- a/src/lstack/include/lstack_protocol_stack.h ++++ b/src/lstack/include/lstack_protocol_stack.h +@@ -21,6 +21,7 @@ + + #include "gazelle_dfx_msg.h" + #include "lstack_lockless_queue.h" ++#include "lstack_ethdev.h" + #include "gazelle_opt.h" + + #define SOCK_RECV_RING_SIZE (128) +@@ -61,7 +62,7 @@ struct protocol_stack { + char pad1 __rte_cache_aligned; + + struct netif netif; +- struct eth_dev_ops *dev_ops; ++ struct lstack_dev_ops dev_ops; + uint32_t rx_ring_used; + uint32_t tx_ring_used; + +diff --git a/src/lstack/include/lstack_vdev.h b/src/lstack/include/lstack_vdev.h +index 5836257..0693c4d 100644 +--- a/src/lstack/include/lstack_vdev.h ++++ b/src/lstack/include/lstack_vdev.h +@@ -13,10 +13,12 @@ + #ifndef _GAZELLE_VDEV_H_ + #define _GAZELLE_VDEV_H_ + +-struct eth_dev_ops; ++#include ++ ++struct lstack_dev_ops; + struct gazelle_quintuple; + enum reg_ring_type; +-void vdev_dev_ops_init(struct eth_dev_ops **dev_ops); ++void vdev_dev_ops_init(struct lstack_dev_ops *dev_ops); + int vdev_reg_xmit(enum reg_ring_type type, struct gazelle_quintuple *qtuple); + + #endif /* _GAZELLE_VDEV_H_ */ +diff --git a/src/lstack/netif/lstack_ethdev.c b/src/lstack/netif/lstack_ethdev.c +index 1c35919..d410a5c 100644 +--- a/src/lstack/netif/lstack_ethdev.c ++++ b/src/lstack/netif/lstack_ethdev.c +@@ -88,7 +88,7 @@ int32_t eth_dev_poll(void) + struct rte_mbuf *pkts[READ_PKTS_MAX]; + struct protocol_stack *stack = get_protocol_stack(); + +- nr_pkts = stack->dev_ops->rx_poll(stack, pkts, READ_PKTS_MAX); ++ nr_pkts = stack->dev_ops.rx_poll(stack, pkts, READ_PKTS_MAX); + if (nr_pkts == 0) { + return 0; + } +@@ -121,7 +121,7 @@ int32_t gazelle_eth_dev_poll(struct protocol_stack *stack, bool use_ltran_flag) + uint32_t nr_pkts; + struct rte_mbuf *pkts[READ_PKTS_MAX]; + +- nr_pkts = stack->dev_ops->rx_poll(stack, pkts, READ_PKTS_MAX); ++ nr_pkts = stack->dev_ops.rx_poll(stack, pkts, READ_PKTS_MAX); + if (nr_pkts == 0) { + return 0; + } +@@ -161,13 +161,11 @@ static err_t eth_dev_output(struct netif *netif, struct pbuf *pbuf) + mbuf->data_len = pbuf->len; + mbuf->pkt_len = pbuf->tot_len; + rte_mbuf_refcnt_update(mbuf, 1); +-#if CHECKSUM_GEN_IP_HW || CHECKSUM_GEN_TCP_HW + mbuf->ol_flags = pbuf->ol_flags; + mbuf->l2_len = pbuf->l2_len; + mbuf->l3_len = pbuf->l3_len; +-#endif + +- uint32_t sent_pkts = stack->dev_ops->tx_xmit(stack, &mbuf, 1); ++ uint32_t sent_pkts = stack->dev_ops.tx_xmit(stack, &mbuf, 1); + stack->stats.tx += sent_pkts; + if (sent_pkts < 1) { + stack->stats.tx_drop++; +diff --git a/src/lstack/netif/lstack_vdev.c b/src/lstack/netif/lstack_vdev.c +index 8df0c5e..e2671b4 100644 +--- a/src/lstack/netif/lstack_vdev.c ++++ b/src/lstack/netif/lstack_vdev.c +@@ -168,21 +168,13 @@ int32_t vdev_reg_xmit(enum reg_ring_type type, struct gazelle_quintuple *qtuple) + return (int32_t)sent_pkts; + } + +-static struct eth_dev_ops g_eth_dev_ops = { +- .rx_poll = vdev_rx_poll, +- .tx_xmit = vdev_tx_xmit, +-}; +- +-static struct eth_dev_ops g_ltran_eth_dev_ops = { +- .rx_poll = ltran_rx_poll, +- .tx_xmit = ltran_tx_xmit, +-}; +- +-void vdev_dev_ops_init(struct eth_dev_ops **dev_ops) ++void vdev_dev_ops_init(struct lstack_dev_ops *dev_ops) + { + if (use_ltran()) { +- *dev_ops = &g_ltran_eth_dev_ops; ++ dev_ops->rx_poll = ltran_rx_poll; ++ dev_ops->tx_xmit = ltran_tx_xmit; + } else { +- *dev_ops = &g_eth_dev_ops; ++ dev_ops->rx_poll = vdev_rx_poll; ++ dev_ops->tx_xmit = vdev_tx_xmit; + } + } +-- +2.23.0 + diff --git a/gazelle.spec b/gazelle.spec index 06115fb..fd7b063 100644 --- a/gazelle.spec +++ b/gazelle.spec @@ -2,7 +2,7 @@ Name: gazelle Version: 1.0.1 -Release: 18 +Release: 19 Summary: gazelle is a high performance user-mode stack License: MulanPSL-2.0 URL: https://gitee.com/openeuler/gazelle @@ -134,6 +134,7 @@ Patch9116: 0116-optimize-variable-access.patch Patch9117: 0117-add-gro.patch Patch9118: 0118-expand-nic-rx-desc-size.patch Patch9119: 0119-add-kni-local-support-in-lstack.patch +Patch9120: 0120-resolve-the-conflict-between-the-eth_dev_ops-variabl.patch %description %{name} is a high performance user-mode stack. @@ -174,6 +175,9 @@ install -Dpm 0640 %{_builddir}/%{name}-%{version}/src/ltran/ltran.conf %{b %config(noreplace) %{conf_path}/ltran.conf %changelog +* Sat Nov 07 2022 wuchangsheng - 1.0.1-19 +- resolve the conflict between the eth_dev_ops variable and the dpdk-19.11 + * Sat Nov 05 2022 kircher - 1.0.1-18 - Add kni local support in lstack