diff --git a/0258-net-bonding-support-private-dump-operation.patch b/0258-net-bonding-support-private-dump-operation.patch new file mode 100644 index 0000000000000000000000000000000000000000..88867d19b294ff11e5399e82ce836d33db85be86 --- /dev/null +++ b/0258-net-bonding-support-private-dump-operation.patch @@ -0,0 +1,150 @@ +From fdbebc668c5df36d34a64ba627b6e373263c1fca Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Wed, 14 Dec 2022 06:13:23 +0000 +Subject: net/bonding: support private dump operation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ upstream commit 29e89fb1e30cf12937dec8a3f4f7ab86f0303d24 ] + +This patch implements eth_dev_priv_dump ops which could enhance the +debug capability. + +The dump output is similar to testpmd command +"show bonding config [port]". + +Signed-off-by: Chengwen Feng +Acked-by:Min Hu (Connor) +Acked-by: Huisong Li +Acked-by: Ferruh Yigit +--- + drivers/net/bonding/rte_eth_bond_pmd.c | 105 ++++++++++++++++++++++++- + 1 file changed, 104 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c +index 29871cf8a3..cf7d275bf5 100644 +--- a/drivers/net/bonding/rte_eth_bond_pmd.c ++++ b/drivers/net/bonding/rte_eth_bond_pmd.c +@@ -3297,6 +3297,108 @@ bond_ethdev_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) + rte_spinlock_unlock(&internals->lock); + } + ++static const char * ++bond_mode_name(uint8_t mode) ++{ ++ switch (mode) { ++ case BONDING_MODE_ROUND_ROBIN: ++ return "ROUND_ROBIN"; ++ case BONDING_MODE_ACTIVE_BACKUP: ++ return "ACTIVE_BACKUP"; ++ case BONDING_MODE_BALANCE: ++ return "BALANCE"; ++ case BONDING_MODE_BROADCAST: ++ return "BROADCAST"; ++ case BONDING_MODE_8023AD: ++ return "8023AD"; ++ case BONDING_MODE_TLB: ++ return "TLB"; ++ case BONDING_MODE_ALB: ++ return "ALB"; ++ default: ++ return "Unknown"; ++ } ++} ++ ++static int ++bond_ethdev_priv_dump(struct rte_eth_dev *dev, FILE *f) ++{ ++ struct bond_dev_private instant_priv; ++ const struct bond_dev_private *internals = &instant_priv; ++ int mode, i; ++ ++ /* Obtain a instance of dev_private to prevent data from being modified. */ ++ memcpy(&instant_priv, dev->data->dev_private, sizeof(struct bond_dev_private)); ++ mode = internals->mode; ++ ++ fprintf(f, " - Dev basic:\n"); ++ fprintf(f, "\tBonding mode: %s(%d)\n", bond_mode_name(mode), mode); ++ ++ if (mode == BONDING_MODE_BALANCE || mode == BONDING_MODE_8023AD) { ++ fprintf(f, "\tBalance Xmit Policy: "); ++ switch (internals->balance_xmit_policy) { ++ case BALANCE_XMIT_POLICY_LAYER2: ++ fprintf(f, "BALANCE_XMIT_POLICY_LAYER2"); ++ break; ++ case BALANCE_XMIT_POLICY_LAYER23: ++ fprintf(f, "BALANCE_XMIT_POLICY_LAYER23"); ++ break; ++ case BALANCE_XMIT_POLICY_LAYER34: ++ fprintf(f, "BALANCE_XMIT_POLICY_LAYER34"); ++ break; ++ default: ++ fprintf(f, "Unknown"); ++ } ++ fprintf(f, "\n"); ++ } ++ ++ if (mode == BONDING_MODE_8023AD) { ++ fprintf(f, "\tIEEE802.3AD Aggregator Mode: "); ++ switch (internals->mode4.agg_selection) { ++ case AGG_BANDWIDTH: ++ fprintf(f, "bandwidth"); ++ break; ++ case AGG_STABLE: ++ fprintf(f, "stable"); ++ break; ++ case AGG_COUNT: ++ fprintf(f, "count"); ++ break; ++ default: ++ fprintf(f, "unknown"); ++ } ++ fprintf(f, "\n"); ++ } ++ ++ if (internals->slave_count > 0) { ++ fprintf(f, "\tSlaves (%u): [", internals->slave_count); ++ for (i = 0; i < internals->slave_count - 1; i++) ++ fprintf(f, "%u ", internals->slaves[i].port_id); ++ ++ fprintf(f, "%u]\n", internals->slaves[internals->slave_count - 1].port_id); ++ } else { ++ fprintf(f, "\tSlaves: []\n"); ++ } ++ ++ if (internals->active_slave_count > 0) { ++ fprintf(f, "\tActive Slaves (%u): [", internals->active_slave_count); ++ for (i = 0; i < internals->active_slave_count - 1; i++) ++ fprintf(f, "%u ", internals->active_slaves[i]); ++ ++ fprintf(f, "%u]\n", internals->active_slaves[internals->active_slave_count - 1]); ++ ++ } else { ++ fprintf(f, "\tActive Slaves: []\n"); ++ } ++ ++ if (internals->user_defined_primary_port) ++ fprintf(f, "\tUser Defined Primary: [%u]\n", internals->primary_port); ++ if (internals->slave_count > 0) ++ fprintf(f, "\tCurrent Primary: [%u]\n", internals->current_primary_port); ++ ++ return 0; ++} ++ + const struct eth_dev_ops default_dev_ops = { + .dev_start = bond_ethdev_start, + .dev_stop = bond_ethdev_stop, +@@ -3323,7 +3425,8 @@ const struct eth_dev_ops default_dev_ops = { + .mac_addr_set = bond_ethdev_mac_address_set, + .mac_addr_add = bond_ethdev_mac_addr_add, + .mac_addr_remove = bond_ethdev_mac_addr_remove, +- .flow_ops_get = bond_flow_ops_get ++ .flow_ops_get = bond_flow_ops_get, ++ .eth_dev_priv_dump = bond_ethdev_priv_dump, + }; + + static int +-- +2.23.0 + diff --git a/0259-net-bonding-add-LACP-info-dump.patch b/0259-net-bonding-add-LACP-info-dump.patch new file mode 100644 index 0000000000000000000000000000000000000000..6839d3408b5c14542ee4be27a3d7b8eaa9417a00 --- /dev/null +++ b/0259-net-bonding-add-LACP-info-dump.patch @@ -0,0 +1,187 @@ +From a74801e4c1d59a8e40317c8ea9e4ba3a5472d633 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Wed, 14 Dec 2022 06:13:24 +0000 +Subject: net/bonding: add LACP info dump +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ upstream commit b00119fc03dc585213236ea7f550662befa68fbe ] + +This patch adds dump lacp info in eth_dev_priv_dump ops. + +The extra dump output is similar to testpmd command +"show bonding lacp info [port]". + +Signed-off-by: Chengwen Feng +Acked-by:Min Hu (Connor) +Acked-by: Huisong Li +Acked-by: Ferruh Yigit +--- + drivers/net/bonding/rte_eth_bond_pmd.c | 143 ++++++++++++++++++++++++- + 1 file changed, 141 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c +index cf7d275bf5..0f2b21a568 100644 +--- a/drivers/net/bonding/rte_eth_bond_pmd.c ++++ b/drivers/net/bonding/rte_eth_bond_pmd.c +@@ -3320,8 +3320,8 @@ bond_mode_name(uint8_t mode) + } + } + +-static int +-bond_ethdev_priv_dump(struct rte_eth_dev *dev, FILE *f) ++static void ++dump_basic(const struct rte_eth_dev *dev, FILE *f) + { + struct bond_dev_private instant_priv; + const struct bond_dev_private *internals = &instant_priv; +@@ -3395,6 +3395,145 @@ bond_ethdev_priv_dump(struct rte_eth_dev *dev, FILE *f) + fprintf(f, "\tUser Defined Primary: [%u]\n", internals->primary_port); + if (internals->slave_count > 0) + fprintf(f, "\tCurrent Primary: [%u]\n", internals->current_primary_port); ++} ++ ++static void ++dump_lacp_conf(const struct rte_eth_bond_8023ad_conf *conf, FILE *f) ++{ ++ fprintf(f, "\tfast period: %u ms\n", conf->fast_periodic_ms); ++ fprintf(f, "\tslow period: %u ms\n", conf->slow_periodic_ms); ++ fprintf(f, "\tshort timeout: %u ms\n", conf->short_timeout_ms); ++ fprintf(f, "\tlong timeout: %u ms\n", conf->long_timeout_ms); ++ fprintf(f, "\taggregate wait timeout: %u ms\n", ++ conf->aggregate_wait_timeout_ms); ++ fprintf(f, "\ttx period: %u ms\n", conf->tx_period_ms); ++ fprintf(f, "\trx marker period: %u ms\n", conf->rx_marker_period_ms); ++ fprintf(f, "\tupdate timeout: %u ms\n", conf->update_timeout_ms); ++ switch (conf->agg_selection) { ++ case AGG_BANDWIDTH: ++ fprintf(f, "\taggregation mode: bandwidth\n"); ++ break; ++ case AGG_STABLE: ++ fprintf(f, "\taggregation mode: stable\n"); ++ break; ++ case AGG_COUNT: ++ fprintf(f, "\taggregation mode: count\n"); ++ break; ++ default: ++ fprintf(f, "\taggregation mode: invalid\n"); ++ break; ++ } ++ fprintf(f, "\n"); ++} ++ ++static void ++dump_lacp_port_param(const struct port_params *params, FILE *f) ++{ ++ char buf[RTE_ETHER_ADDR_FMT_SIZE]; ++ fprintf(f, "\t\tsystem priority: %u\n", params->system_priority); ++ rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, ¶ms->system); ++ fprintf(f, "\t\tsystem mac address: %s\n", buf); ++ fprintf(f, "\t\tport key: %u\n", params->key); ++ fprintf(f, "\t\tport priority: %u\n", params->port_priority); ++ fprintf(f, "\t\tport number: %u\n", params->port_number); ++} ++ ++static void ++dump_lacp_slave(const struct rte_eth_bond_8023ad_slave_info *info, FILE *f) ++{ ++ char a_state[256] = { 0 }; ++ char p_state[256] = { 0 }; ++ int a_len = 0; ++ int p_len = 0; ++ uint32_t i; ++ ++ static const char * const state[] = { ++ "ACTIVE", ++ "TIMEOUT", ++ "AGGREGATION", ++ "SYNCHRONIZATION", ++ "COLLECTING", ++ "DISTRIBUTING", ++ "DEFAULTED", ++ "EXPIRED" ++ }; ++ static const char * const selection[] = { ++ "UNSELECTED", ++ "STANDBY", ++ "SELECTED" ++ }; ++ ++ for (i = 0; i < RTE_DIM(state); i++) { ++ if ((info->actor_state >> i) & 1) ++ a_len += snprintf(&a_state[a_len], ++ RTE_DIM(a_state) - a_len, "%s ", ++ state[i]); ++ ++ if ((info->partner_state >> i) & 1) ++ p_len += snprintf(&p_state[p_len], ++ RTE_DIM(p_state) - p_len, "%s ", ++ state[i]); ++ } ++ fprintf(f, "\tAggregator port id: %u\n", info->agg_port_id); ++ fprintf(f, "\tselection: %s\n", selection[info->selected]); ++ fprintf(f, "\tActor detail info:\n"); ++ dump_lacp_port_param(&info->actor, f); ++ fprintf(f, "\t\tport state: %s\n", a_state); ++ fprintf(f, "\tPartner detail info:\n"); ++ dump_lacp_port_param(&info->partner, f); ++ fprintf(f, "\t\tport state: %s\n", p_state); ++ fprintf(f, "\n"); ++} ++ ++static void ++dump_lacp(uint16_t port_id, FILE *f) ++{ ++ struct rte_eth_bond_8023ad_slave_info slave_info; ++ struct rte_eth_bond_8023ad_conf port_conf; ++ uint16_t slaves[RTE_MAX_ETHPORTS]; ++ int num_active_slaves; ++ int i, ret; ++ ++ fprintf(f, " - Lacp info:\n"); ++ ++ num_active_slaves = rte_eth_bond_active_slaves_get(port_id, slaves, ++ RTE_MAX_ETHPORTS); ++ if (num_active_slaves < 0) { ++ fprintf(f, "\tFailed to get active slave list for port %u\n", ++ port_id); ++ return; ++ } ++ ++ fprintf(f, "\tIEEE802.3 port: %u\n", port_id); ++ ret = rte_eth_bond_8023ad_conf_get(port_id, &port_conf); ++ if (ret) { ++ fprintf(f, "\tGet bonded device %u 8023ad config failed\n", ++ port_id); ++ return; ++ } ++ dump_lacp_conf(&port_conf, f); ++ ++ for (i = 0; i < num_active_slaves; i++) { ++ ret = rte_eth_bond_8023ad_slave_info(port_id, slaves[i], ++ &slave_info); ++ if (ret) { ++ fprintf(f, "\tGet slave device %u 8023ad info failed\n", ++ slaves[i]); ++ return; ++ } ++ fprintf(f, "\tSlave Port: %u\n", slaves[i]); ++ dump_lacp_slave(&slave_info, f); ++ } ++} ++ ++static int ++bond_ethdev_priv_dump(struct rte_eth_dev *dev, FILE *f) ++{ ++ const struct bond_dev_private *internals = dev->data->dev_private; ++ ++ dump_basic(dev, f); ++ if (internals->mode == BONDING_MODE_8023AD) ++ dump_lacp(dev->data->port_id, f); + + return 0; + } +-- +2.23.0 + diff --git a/0260-net-virtio-support-private-dump.patch b/0260-net-virtio-support-private-dump.patch new file mode 100644 index 0000000000000000000000000000000000000000..f2f65505ea0a4acef1c047e5c8b8ad0e9e589b0f --- /dev/null +++ b/0260-net-virtio-support-private-dump.patch @@ -0,0 +1,56 @@ +From a247b89fe26e5bae41159dfa59475c04ae53e8e2 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 19 Jan 2023 12:30:55 +0000 +Subject: net/virtio: support private dump + +[ upstream commit 426858d6a9975a26539f0398037558dcb418947a ] + +This patch implements eth_dev_priv_dump callback which could use for +debugging. + +Signed-off-by: Chengwen Feng +Reviewed-by: Maxime Coquelin +--- + drivers/net/virtio/virtio_ethdev.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c +index b317649d7e..a38b15d01c 100644 +--- a/drivers/net/virtio/virtio_ethdev.c ++++ b/drivers/net/virtio/virtio_ethdev.c +@@ -1018,6 +1018,24 @@ virtio_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id) + return 0; + } + ++static int ++virtio_dev_priv_dump(struct rte_eth_dev *dev, FILE *f) ++{ ++ struct virtio_hw *hw = dev->data->dev_private; ++ ++ fprintf(f, "guest_features: 0x%" PRIx64 "\n", hw->guest_features); ++ fprintf(f, "vtnet_hdr_size: %u\n", hw->vtnet_hdr_size); ++ fprintf(f, "use_vec: rx-%u tx-%u\n", hw->use_vec_rx, hw->use_vec_tx); ++ fprintf(f, "use_inorder: rx-%u tx-%u\n", hw->use_inorder_rx, hw->use_inorder_tx); ++ fprintf(f, "intr_lsc: %u\n", hw->intr_lsc); ++ fprintf(f, "max_mtu: %u\n", hw->max_mtu); ++ fprintf(f, "max_rx_pkt_len: %zu\n", hw->max_rx_pkt_len); ++ fprintf(f, "max_queue_pairs: %u\n", hw->max_queue_pairs); ++ fprintf(f, "req_guest_features: 0x%" PRIx64 "\n", hw->req_guest_features); ++ ++ return 0; ++} ++ + /* + * dev_ops for virtio, bare necessities for basic operation + */ +@@ -1054,6 +1072,7 @@ static const struct eth_dev_ops virtio_eth_dev_ops = { + .mac_addr_remove = virtio_mac_addr_remove, + .mac_addr_set = virtio_mac_addr_set, + .get_monitor_addr = virtio_get_monitor_addr, ++ .eth_dev_priv_dump = virtio_dev_priv_dump, + }; + + /* +-- +2.23.0 + diff --git a/0261-net-vhost-support-private-dump.patch b/0261-net-vhost-support-private-dump.patch new file mode 100644 index 0000000000000000000000000000000000000000..ec38d71c6ff5c2363f27918d71a8c930a472d523 --- /dev/null +++ b/0261-net-vhost-support-private-dump.patch @@ -0,0 +1,55 @@ +From 423959cfe25c9dc231b80f3df59318585df3a023 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 19 Jan 2023 12:30:56 +0000 +Subject: net/vhost: support private dump + +[ upstream commit 47b9fb64c15d60e1c8c2c8f6e63824fd2cada428 ] + +This patch implements eth_dev_priv_dump callback which could use for +debugging. + +Signed-off-by: Chengwen Feng +Reviewed-by: Maxime Coquelin +--- + drivers/net/vhost/rte_eth_vhost.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c +index 070f0e6dfd..b120341d0c 100644 +--- a/drivers/net/vhost/rte_eth_vhost.c ++++ b/drivers/net/vhost/rte_eth_vhost.c +@@ -1429,6 +1429,23 @@ vhost_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc) + return 0; + } + ++static int ++vhost_dev_priv_dump(struct rte_eth_dev *dev, FILE *f) ++{ ++ struct pmd_internal *internal = dev->data->dev_private; ++ ++ fprintf(f, "iface_name: %s\n", internal->iface_name); ++ fprintf(f, "flags: 0x%" PRIx64 "\n", internal->flags); ++ fprintf(f, "disable_flags: 0x%" PRIx64 "\n", internal->disable_flags); ++ fprintf(f, "max_queues: %u\n", internal->max_queues); ++ fprintf(f, "vid: %d\n", internal->vid); ++ fprintf(f, "started: %d\n", rte_atomic32_read(&internal->started)); ++ fprintf(f, "dev_attached: %d\n", rte_atomic32_read(&internal->dev_attached)); ++ fprintf(f, "vlan_strip: %d\n", internal->vlan_strip); ++ ++ return 0; ++} ++ + static const struct eth_dev_ops ops = { + .dev_start = eth_dev_start, + .dev_stop = eth_dev_stop, +@@ -1449,6 +1466,7 @@ static const struct eth_dev_ops ops = { + .rx_queue_intr_enable = eth_rxq_intr_enable, + .rx_queue_intr_disable = eth_rxq_intr_disable, + .get_monitor_addr = vhost_get_monitor_addr, ++ .eth_dev_priv_dump = vhost_dev_priv_dump, + }; + + static int +-- +2.23.0 + diff --git a/0262-app-testpmd-show-private-info-in-port-info.patch b/0262-app-testpmd-show-private-info-in-port-info.patch new file mode 100644 index 0000000000000000000000000000000000000000..3ba28875da008c887f6497490cbd2d887a29feaa --- /dev/null +++ b/0262-app-testpmd-show-private-info-in-port-info.patch @@ -0,0 +1,37 @@ +From 9f1acbbbe8050c3b8794d45a4af610f9e0774211 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 16 Mar 2023 09:32:16 +0000 +Subject: app/testpmd: show private info in port info + +[ upstream commit d0aa6cd7a43d737797ba139a7f18b879cc44dac3 ] + +This patch adds dump private info in 'show port info [port_id]' cmd. + +Signed-off-by: Chengwen Feng +Acked-by: Aman Singh +Acked-by: Ferruh Yigit +--- + app/test-pmd/config.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c +index 12386c4d82..873d1f1357 100644 +--- a/app/test-pmd/config.c ++++ b/app/test-pmd/config.c +@@ -891,6 +891,13 @@ port_infos_display(portid_t port_id) + printf("Switch Rx domain: %u\n", + dev_info.switch_info.rx_domain); + } ++ printf("Device private info:\n"); ++ ret = rte_eth_dev_priv_dump(port_id, stdout); ++ if (ret == -ENOTSUP) ++ printf(" none\n"); ++ else if (ret < 0) ++ fprintf(stderr, " Failed to dump private info with error (%d): %s\n", ++ ret, strerror(-ret)); + } + + void +-- +2.23.0 + diff --git a/0263-app-testpmd-display-RSS-hash-key-of-flow-rule.patch b/0263-app-testpmd-display-RSS-hash-key-of-flow-rule.patch new file mode 100644 index 0000000000000000000000000000000000000000..3dd36b7af94084a6abdc0ee0f3f9d56b1878ecf8 --- /dev/null +++ b/0263-app-testpmd-display-RSS-hash-key-of-flow-rule.patch @@ -0,0 +1,48 @@ +From 491333ae684b8303e019536900bb931b9f64b1ce Mon Sep 17 00:00:00 2001 +From: Huisong Li +Date: Thu, 16 Mar 2023 20:58:14 +0800 +Subject: app/testpmd: display RSS hash key of flow rule + +[ upstream commit f958bbe2210dcc888032e81ec1326c0df5e5c518 ] + +There are two ways to set RSS hash key with rte flow rule: +1. 'key_len' isn't zero and 'key' is NULL. +2. 'key_len' isn't zero and 'key' isn't NULL. +This patch adds displaying for the hash key of rte flow rule. + +Signed-off-by: Huisong Li +Signed-off-by: Dongdong Liu +Acked-by: Ferruh Yigit +--- + app/test-pmd/config.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c +index 873d1f1357..78af232a8a 100644 +--- a/app/test-pmd/config.c ++++ b/app/test-pmd/config.c +@@ -1651,6 +1651,21 @@ rss_config_display(struct rte_flow_action_rss *rss_conf) + return; + } + ++ printf(" RSS key:\n"); ++ if (rss_conf->key_len == 0) { ++ printf(" none"); ++ } else { ++ printf(" key_len: %u\n", rss_conf->key_len); ++ printf(" key: "); ++ if (rss_conf->key == NULL) { ++ printf("none"); ++ } else { ++ for (i = 0; i < rss_conf->key_len; i++) ++ printf("%02X", rss_conf->key[i]); ++ } ++ } ++ printf("\n"); ++ + printf(" types:\n"); + if (rss_conf->types == 0) { + printf(" none\n"); +-- +2.23.0 + diff --git a/0264-fix-clang-cflags.patch b/0264-fix-clang-cflags.patch new file mode 100644 index 0000000000000000000000000000000000000000..bfb2c0364f421f3fd6f5e31aad5642f084e3d8ea --- /dev/null +++ b/0264-fix-clang-cflags.patch @@ -0,0 +1,92 @@ +diff -up dpdk-21.11/app/meson.build.orig2 dpdk-21.11/app/meson.build +--- dpdk-21.11/app/meson.build.orig2 2023-04-21 18:37:25.851994629 +0800 ++++ dpdk-21.11/app/meson.build 2023-04-21 21:25:13.631388908 +0800 +@@ -21,9 +21,12 @@ apps = [ + ] + + default_cflags = machine_args + ['-DALLOW_EXPERIMENTAL_API'] +-default_cflags += ['-fPIE', '-pie', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] +-default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] +-default_ldflags = [] ++if meson.get_compiler('c').get_id() == 'clang' ++ default_ldflags = ['-pie', '-Wl,-z,relro,-z,now,-z,noexecstack'] ++else ++ default_cflags += ['-fPIE', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] ++ default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++endif + if get_option('default_library') == 'static' and not is_windows + default_ldflags += ['-Wl,--export-dynamic'] + endif +diff -up dpdk-21.11/buildtools/chkincs/meson.build.orig2 dpdk-21.11/buildtools/chkincs/meson.build +--- dpdk-21.11/buildtools/chkincs/meson.build.orig2 2023-04-21 18:38:05.196444066 +0800 ++++ dpdk-21.11/buildtools/chkincs/meson.build 2023-04-21 21:25:14.095512696 +0800 +@@ -13,9 +13,12 @@ gen_c_files = generator(gen_c_file_for_h + + cflags = machine_args + cflags += '-DALLOW_EXPERIMENTAL_API' +-cflags += ['-fPIE', '-pie', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] +-cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] +- ++if meson.get_compiler('c').get_id() == 'clang' ++ ldflags = ['-pie', '-Wl,-z,relro,-z,now,-z,noexecstack'] ++else ++ cflags += ['-fPIE', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] ++ cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++endif + sources = files('main.c') + sources += gen_c_files.process(dpdk_chkinc_headers) + +diff -up dpdk-21.11/drivers/meson.build.orig2 dpdk-21.11/drivers/meson.build +--- dpdk-21.11/drivers/meson.build.orig2 2023-04-21 18:37:25.855994675 +0800 ++++ dpdk-21.11/drivers/meson.build 2023-04-21 21:25:14.495619407 +0800 +@@ -45,8 +45,12 @@ enable_drivers += always_enable + default_cflags = machine_args + default_cflags += ['-DALLOW_EXPERIMENTAL_API'] + default_cflags += ['-DALLOW_INTERNAL_API'] +-default_cflags += ['-fPIE', '-pie', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] +-default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++if meson.get_compiler('c').get_id() == 'clang' ++ default_ldflags = ['-pie', '-Wl,-z,relro,-z,now,-z,noexecstack'] ++else ++ default_cflags += ['-fPIE', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] ++ default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++endif + + if cc.has_argument('-Wno-format-truncation') + default_cflags += '-Wno-format-truncation' +diff -up dpdk-21.11/examples/meson.build.orig2 dpdk-21.11/examples/meson.build +--- dpdk-21.11/examples/meson.build.orig2 2023-04-21 18:37:25.859994720 +0800 ++++ dpdk-21.11/examples/meson.build 2023-04-21 21:25:14.911730388 +0800 +@@ -90,8 +90,12 @@ default_ldflags = dpdk_extra_ldflags + if get_option('default_library') == 'static' and not is_windows + default_ldflags += ['-Wl,--export-dynamic'] + endif +-default_cflags += ['-fPIE', '-pie', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] +-default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++if meson.get_compiler('c').get_id() == 'clang' ++ default_ldflags = ['-pie', '-Wl,-z,relro,-z,now,-z,noexecstack'] ++else ++ default_cflags += ['-fPIE', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] ++ default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++endif + + foreach example: examples + name = example.split('/')[-1] +diff -up dpdk-21.11/lib/meson.build.orig2 dpdk-21.11/lib/meson.build +--- dpdk-21.11/lib/meson.build.orig2 2023-04-21 18:37:25.863994766 +0800 ++++ dpdk-21.11/lib/meson.build 2023-04-21 21:25:15.543898993 +0800 +@@ -94,8 +94,12 @@ endforeach + default_cflags = machine_args + default_cflags += ['-DALLOW_EXPERIMENTAL_API'] + default_cflags += ['-DALLOW_INTERNAL_API'] +-default_cflags += ['-fPIE', '-pie', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] +-default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++if meson.get_compiler('c').get_id() == 'clang' ++ default_ldflags = ['-pie', '-Wl,-z,relro,-z,now,-z,noexecstack'] ++else ++ default_cflags += ['-fPIE', '-fPIC', '-fstack-protector-strong', '-D_FORTIFY_SOURCE=2', '-O2', '-Wall', '-Werror'] ++ default_cflags += ['-Wl,-z,relro,-z,now,-z,noexecstack', '-Wtrampolines'] ++endif + + if cc.has_argument('-Wno-format-truncation') + default_cflags += '-Wno-format-truncation' diff --git a/dpdk.spec b/dpdk.spec index 0415192501d56e6e171c22f8bf76f22b1af52cbf..0c7a5b33563347cb55ee5fbcc34c13c9a276d9cb 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -1,6 +1,6 @@ Name: dpdk Version: 21.11 -Release: 38 +Release: 41 Packager: packaging@6wind.com URL: http://dpdk.org %global source_version 21.11 @@ -275,6 +275,13 @@ Patch9254: 0254-net-hns3-add-verification-of-RSS-types.patch Patch9255: 0255-test-mbuf-fix-mbuf-reset-test.patch Patch9256: 0256-examples-l3fwd-power-support-CPPC-cpufreq.patch Patch9257: 0257-hinic-free-mbuf-use-rte_pktmbuf_free_seg.patch +Patch9258: 0258-net-bonding-support-private-dump-operation.patch +Patch9259: 0259-net-bonding-add-LACP-info-dump.patch +Patch9260: 0260-net-virtio-support-private-dump.patch +Patch9261: 0261-net-vhost-support-private-dump.patch +Patch9262: 0262-app-testpmd-show-private-info-in-port-info.patch +Patch9263: 0263-app-testpmd-display-RSS-hash-key-of-flow-rule.patch +Patch9264: 0264-fix-clang-cflags.patch Summary: Data Plane Development Kit core Group: System Environment/Libraries @@ -371,6 +378,8 @@ cd - cd $RPM_BUILD_ROOT/usr/lib64/dpdk/pmds-22.0/lib ln -fs ../../../*.so . cd - +mkdir -p $RPM_BUILD_ROOT/usr/local/lib64/dpdk +ln -fs /usr/lib64/dpdk/pmds-22.0 $RPM_BUILD_ROOT/usr/local/lib64/dpdk/pmds-22.0 strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/rte_kni.ko strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko @@ -384,6 +393,7 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko /lib/modules/%{kern_devel_ver}/extra/dpdk/*.ko /usr/lib64/*.so* /usr/lib64/dpdk/* +/usr/local/lib64/dpdk/* %exclude /usr/lib64/dpdk/pmds-22.0/include/*.h %files devel @@ -419,6 +429,19 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko /usr/sbin/depmod %changelog +* Fri Apr 21 2023 jammyjellyfish - 21.11-41 +- fix clang build error + +* Tue Apr 11 2023 bigclouds99 - 21.11-40 +- Create a softlink to dpdk default driver path + +* Tue Apr 04 2023 chenjiji - 21.11-39 + Sync some patchs from upstreaming branch and modifies + are as follow: + 1. Add private dump for bonding, virtio and vhost. + 2. Support LACP info dump for bonding. + 3. Display RSS hash key of flow rule in testpmd. + * Sat Apr 01 2023 jiangheng - 21.11-38 - build as shared libraries to reduce the size of debug packet