include: fix sys/queue.h.
Subsystems (3)
PATCH v2 1/1 include: fix sys/queue.h.
Currently there are a couple of header files include 'sys/queue.h', which is a POSIX functionality. When compiling DPDK with OVS on Windows, we encountered issues such as, found the missing header. In file included from ../lib/dpdk.c:27:
C:\temp\dpdk\include\rte_log.h:24:10: fatal error: 'sys/queue.h' file not found
The patch fixes it by 1) removing the #include <sys/queue.h> from a couple of headers, replace it with #include <rte_os.h>, and
2) include sys/queue.h in the rte_os.h. As a result, for Linux/BSD, it is using the sys/queue.h from its POSIX library, and for Windows, DPDK will use the bundled sys/queue.h.
1) fixes the case that DPDK library shouldn't export POSIX functionality into the environment (symbols, macros, headers etc), which cause definitions clashing with the application.
2) fixes the case that DPDK should depend only on the C library and not require POSIX functionality from the underlying system.
There are still a couple of headers using sys/queue.h, ex:rte_bus_pci.h. Since it's not been used in Windows yet, we can fix them later.
---v1->v2:
- follow the suggestion by Nick and Dmitry
- http://mails.dpdk.org/archives/dev/2021-August/216304.html
--- lib/eal/freebsd/include/rte_os.h | 1 + lib/eal/include/rte_bus.h | 2 +- lib/eal/include/rte_class.h | 2 -- lib/eal/include/rte_dev.h | 2 +- lib/eal/include/rte_devargs.h | 1 - lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 2 +- lib/eal/linux/include/rte_os.h | 1 + lib/eal/windows/include/meson.build | 4 ++++ lib/eal/windows/include/rte_os.h | 1 + lib/eal/windows/include/sys/meson.build | 6 ++++++ lib/mempool/rte_mempool.h | 1 - 13 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 lib/eal/windows/include/sys/meson.build
lib/eal/freebsd/include/rte_os.h +1 -0
@@ -11,6 +11,7 @@*/ #include <pthread_np.h> +#include <sys/queue.h> typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +1 -1
@@ -19,8 +19,8 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> +#include <rte_os.h> #include <rte_log.h> #include <rte_dev.h>
lib/eal/include/rte_class.h +0 -2
@@ -22,8 +22,6 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */
lib/eal/include/rte_dev.h +1 -1
@@ -18,8 +18,8 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> +#include <rte_os.h> #include <rte_config.h> #include <rte_compat.h> #include <rte_log.h>
lib/eal/include/rte_devargs.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +1 -1
@@ -15,8 +15,8 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> +#include <rte_os.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */
lib/eal/linux/include/rte_os.h +1 -0
@@ -11,6 +11,7 @@*/ #include <sched.h> +#include <sys/queue.h> #ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/include/meson.build +4 -0
@@ -8,3 +8,7 @@ headers += files( 'rte_virt2phys.h', 'rte_windows.h', ) + +sys_headers = [] +subdir('sys') +install_headers(sys_headers, subdir: 'sys')
lib/eal/windows/include/rte_os.h +1 -0
@@ -13,6 +13,7 @@#include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/eal/windows/include/sys/meson.build new file +6 -0
@@ -0,0 +1,6 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2021 VMware, Inc + +sys_headers += files( + 'queue.h', +)
lib/mempool/rte_mempool.h +0 -1
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
Signature · 1 line
2.30.2
Hi William,
2021-08-11 20:46 (UTC+0000), William Tu:
Quoted 13 lines
Currently there are a couple of header files include '
sys/queue.h', which is a POSIX functionality. When compiling DPDK with OVS on Windows, we encountered issues such as, found the missing header. In file included from../lib/dpdk.c:27:
C:\temp\dpdk\include\rte_log.h:24:10: fatal error: 'sys/queue.h' file not foundThe patch fixes it by 1) removing the #include <
sys/queue.h> from a couple of headers, replace it with #include <rte_os.h>, and
2) includesys/queue.hin therte_os.h. As a result, for Linux/BSD, it is using thesys/queue.hfrom its POSIX library, and for Windows, DPDK will use the bundledsys/queue.h.
Quoted 5 lines
1) fixes the case that DPDK library shouldn't export POSIX functionality into the environment (symbols, macros, headers etc), which cause definitions clashing with the application.
2) fixes the case that DPDK should depend only on the C library and not require POSIX functionality from the underlying system.
Sorry, this is not exactly what was suggested here:
http://inbox.dpdk.org/dev/20210811013325.34c36220@sovereign/
The point was not to install <sys/queue.h>. Its full content is not needed for DPDK interface, only for implementation. Public headers only need a handful of macros for list/tailq heads and links. Those macros should be provided by DPDK, with RTE_ prefix. For Linux and FreeBSD it will just be:
#include <sys/queue.h> #define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type) /* ... */
For Windows you would have to copy definitions from <sys/queue.h> to some public header, <rte_os.h> seems OK. All public headers that need <sys/queue.h> macros must have them replaced with RTE_ version. Implementation remains unchanged. No new files need to be installed, because when DPDK is built on Windows, it uses the bundled <sys/queue.h>, and when it is installed, only RTE_ macros you created are visible.
Macro documentation should clearly state that they are compatible with system <sys/queue.h> for Linux and FreeBSD, and for Windows they are compatible with the version used during build.
+Bruce, David, Ray, Tyler to confirm/object the idea.
Quoted 3 lines
There are still a couple of headers using
sys/queue.h, ex:rte_bus_pci.h. Since it's not been used in Windows yet, we can fix them later.
Another item I think of is a checkpatch rule to prohibit TAILQ_xxx, etc macro in public headers after replacing them all.
Quoted 7 lines
Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
v1->v2:
- follow the suggestion by Nick and Dmitry
- http://mails.dpdk.org/archives/dev/2021-August/216304.html
Please send new versions as replies to the previous ones:
git send-email --in-reply-to MSGID ...
Quoted 64 lines · Dmitry Kozlyuk
Hi William,
2021-08-11 20:46 (UTC+0000), William Tu:
Quoted 13 lines
Currently there are a couple of header files include '
sys/queue.h', which is a POSIX functionality. When compiling DPDK with OVS on Windows, we encountered issues such as, found the missing header. In file included from../lib/dpdk.c:27:
C:\temp\dpdk\include\rte_log.h:24:10: fatal error: 'sys/queue.h' file not foundThe patch fixes it by 1) removing the #include <
sys/queue.h> from a couple of headers, replace it with #include <rte_os.h>, and
2) includesys/queue.hin therte_os.h. As a result, for Linux/BSD, it is using thesys/queue.hfrom its POSIX library, and for Windows, DPDK will use the bundledsys/queue.h.Quoted 5 lines
1) fixes the case that DPDK library shouldn't export POSIX functionality into the environment (symbols, macros, headers etc), which cause definitions clashing with the application.
2) fixes the case that DPDK should depend only on the C library and not require POSIX functionality from the underlying system.Sorry, this is not exactly what was suggested here:
http://inbox.dpdk.org/dev/20210811013325.34c36220@sovereign/The point was not to install <
sys/queue.h>. Its full content is not needed for DPDK interface, only for implementation. Public headers only need a handful of macros for list/tailq heads and links. Those macros should be provided by DPDK, withRTE_prefix. For Linux and FreeBSD it will just be:#include <sys/queue.h> #define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type) /* ... */For Windows you would have to copy definitions from <
sys/queue.h> to some public header, <rte_os.h> seems OK. All public headers that need <sys/queue.h> macros must have them replaced withRTE_version. Implementation remains unchanged. No new files need to be installed, because when DPDK is built on Windows, it uses the bundled <sys/queue.h>, and when it is installed, onlyRTE_macros you created are visible.Macro documentation should clearly state that they are compatible with system <
sys/queue.h> for Linux and FreeBSD, and for Windows they are compatible with the version used during build.+Bruce, David, Ray, Tyler to confirm/object the idea.
Quoted 3 lines
There are still a couple of headers using
sys/queue.h, ex:rte_bus_pci.h. Since it's not been used in Windows yet, we can fix them later.Another item I think of is a checkpatch rule to prohibit
TAILQ_xxx, etc macro in public headers after replacing them all.Quoted 7 lines
Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
v1->v2:
- follow the suggestion by Nick and Dmitry
- http://mails.dpdk.org/archives/dev/2021-August/216304.html
Quoted 5 lines
Please send new versions as replies to the previous ones:
git send-email --in-reply-to MSGID ...
Hi Dmitry,
Thanks! I see your point now. I will work on the next patch. William
PATCH v3 1/1 include: fix sys/queue.h.
In reply to William TuCurrently there are a couple of public header files include 'sys/queue.h', which is a POSIX functionality. When compiling DPDK with OVS on Windows, we encountered issues such as, found the missing header. In file included from ../lib/dpdk.c:27:
C:\temp\dpdk\include\rte_log.h:24:10: fatal error: 'sys/queue.h' file not found
The patch fixes it by removing the #include <sys/queue.h> from DPDK public headers, so programs including DPDK headers don't depend on POSIX sys/queue.h. For Linux/FreeBSD, DPDK public headers only need a handful of macros for list/tailq heads and links. Those macros should be provided by DPDK, with RTE_ prefix. For Linux and FreeBSD it will just be:
#include <sys/queue.h>
#define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type)
/* ... */For Windows, we copy these definitions from <sys/queue.h> to rte_os.h. With this patch, all the public headers should not have "#include <sys/queue.h>" or "TAILQ_xxx" macros.
---v2->v3:
* follow the suggestion by Dmitry
* run checkpatches, there are some errors but I think either the original file has over 80-char line due to comments, or some false positive about macro.v1->v2:
- follow the suggestion by Nick and Dmitry
- http://mails.dpdk.org/archives/dev/2021-August/216304.html
--- drivers/bus/auxiliary/private.h | 1 + drivers/bus/auxiliary/rte_bus_auxiliary.h | 5 +- drivers/bus/ifpga/rte_bus_ifpga.h | 8 +- drivers/bus/pci/pci_params.c | 2 + drivers/bus/pci/rte_bus_pci.h | 13 +- drivers/bus/pci/windows/pci.c | 3 + drivers/bus/pci/windows/pci_netuio.c | 2 + drivers/bus/vdev/rte_bus_vdev.h | 7 +- drivers/bus/vmbus/rte_bus_vmbus.h | 13 +- drivers/net/i40e/i40e_ethdev.h | 1 + drivers/net/ice/ice_dcf_ethdev.c | 1 + lib/bbdev/rte_bbdev.h | 2 +- lib/cryptodev/rte_cryptodev.h | 2 +- lib/cryptodev/rte_cryptodev_pmd.h | 2 +- lib/eal/common/eal_common_devargs.c | 2 + lib/eal/common/eal_common_fbarray.c | 1 + lib/eal/common/eal_common_log.c | 1 + lib/eal/common/eal_common_memalloc.c | 1 + lib/eal/common/eal_common_options.c | 1 + lib/eal/common/eal_trace.h | 2 + lib/eal/freebsd/include/rte_os.h | 33 ++++++ lib/eal/include/rte_bus.h | 5 +- lib/eal/include/rte_class.h | 6 +- lib/eal/include/rte_dev.h | 5 +- lib/eal/include/rte_devargs.h | 3 +- lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 15 ++- lib/eal/linux/include/rte_os.h | 33 ++++++ lib/eal/windows/eal_alarm.c | 1 + lib/eal/windows/include/rte_os.h | 138 ++++++++++++++++++++++ lib/ethdev/rte_ethdev_core.h | 2 +- lib/hash/rte_fbk_hash.h | 1 - lib/hash/rte_thash.c | 2 + lib/ip_frag/rte_ip_frag.h | 4 +- lib/mempool/rte_mempool.h | 9 +- lib/pci/rte_pci.h | 1 - lib/ring/rte_ring_core.h | 1 - lib/table/rte_swx_table.h | 7 +- lib/table/rte_swx_table_selector.h | 5 +- lib/vhost/rte_vdpa_dev.h | 2 +- 41 files changed, 277 insertions(+), 68 deletions(-)
drivers/bus/auxiliary/private.h +1 -0
@@ -7,6 +7,7 @@#include <stdbool.h> #include <stdio.h> +#include <sys/queue.h> #include "rte_bus_auxiliary.h"
drivers/bus/auxiliary/rte_bus_auxiliary.h +2 -3
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -113,7 +112,7 @@ typedef int (rte_auxiliary_dma_unmap_t)(struct rte_auxiliary_device *dev,* A structure describing an auxiliary device. */ struct rte_auxiliary_device { -TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ +RTE_TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ struct rte_device device;/**< Inherit core device */ char name[RTE_DEV_NAME_MAX_LEN +1 ];/**< ASCII device name */ struct rte_intr_handle intr_handle;/**< Interrupt handle */
@@ -124,7 +123,7 @@ struct rte_auxiliary_device {* A structure describing an auxiliary driver. */ struct rte_auxiliary_driver { -TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_auxiliary_bus *bus;/**< Auxiliary bus reference. */ rte_auxiliary_match_t *match;/**< Device match function. */
drivers/bus/ifpga/rte_bus_ifpga.h +4 -4
@@ -28,9 +28,9 @@ struct rte_afu_device;struct rte_afu_driver ;/** Double linked list of Intel FPGA AFU device. */ -TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device); +RTE_TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device);/** Double linked list of Intel FPGA AFU device drivers. */ -TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver); +RTE_TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver);#define IFPGA_BUS_BITSTREAM_PATH_MAX_LEN 256
@@ -71,7 +71,7 @@ struct rte_afu_shared {* A structure describing a AFU device. */ struct rte_afu_device { -TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ +RTE_TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ struct rte_device device;/**< Inherit core device */ struct rte_rawdev *rawdev;/**< Point Rawdev */ struct rte_afu_id id;/**< AFU id within FPGA. */
@@ -105,7 +105,7 @@ typedef int (afu_remove_t)(struct rte_afu_device *);* A structure describing a AFU device. */ struct rte_afu_driver { -TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
drivers/bus/pci/pci_params.c +2 -0
@@ -2,6 +2,8 @@* Copyright 2018 Gaëtan Rivet */ +#include <sys/queue.h> +#include <rte_bus.h> #include <rte_bus_pci.h> #include <rte_dev.h>
drivers/bus/pci/rte_bus_pci.h +6 -7
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -37,16 +36,16 @@ struct rte_pci_device;struct rte_pci_driver ;/** List of PCI devices */ -TAILQ_HEAD (rte_pci_device_list, rte_pci_device); +RTE_TAILQ_HEAD (rte_pci_device_list, rte_pci_device);/** List of PCI drivers */ -TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver); +RTE_TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver);/* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next)#define FOREACH_DRIVER_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next)struct rte_devargs ;
@@ -64,7 +63,7 @@ enum rte_pci_kernel_driver {* A structure describing a PCI device. */ struct rte_pci_device { -TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ +RTE_TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ struct rte_device device;/**< Inherit core device */ struct rte_pci_addr addr;/**< PCI location. */ struct rte_pci_id id;/**< PCI ID. */
@@ -160,7 +159,7 @@ typedef int (pci_dma_unmap_t)(struct rte_pci_device *dev, void *addr,* A structure describing a PCI driver. */ struct rte_pci_driver { -TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_pci_bus *bus;/**< PCI bus reference. */ rte_pci_probe_t *probe;/**< Device probe function. */
drivers/bus/pci/windows/pci.c +3 -0
@@ -1,6 +1,9 @@/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2020 Mellanox Technologies, Ltd */ + +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/pci/windows/pci_netuio.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2020 Intel Corporation. */ +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/vdev/rte_bus_vdev.h +3 -4
@@ -15,12 +15,11 @@extern "C" {#endif -#include <sys/queue.h> #include <rte_dev.h> #include <rte_devargs.h> struct rte_vdev_device { -TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ +RTE_TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ struct rte_device device;/**< Inherit core device */ };
@@ -53,7 +52,7 @@ rte_vdev_device_args(const struct rte_vdev_device *dev) }/** Double linked list of virtual device drivers. */ -TAILQ_HEAD (vdev_driver_list, rte_vdev_driver); +RTE_TAILQ_HEAD (vdev_driver_list, rte_vdev_driver);/** * Probe function called for each virtual device driver once.
@@ -107,7 +106,7 @@ typedef int (rte_vdev_dma_unmap_t)(struct rte_vdev_device *dev, void *addr,* A virtual device driver abstraction. */ struct rte_vdev_driver { -TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherited general driver. */ rte_vdev_probe_t *probe;/**< Virtual device probe function. */ rte_vdev_remove_t *remove;/**< Virtual device remove function. */
drivers/bus/vmbus/rte_bus_vmbus.h +6 -7
@@ -20,7 +20,6 @@ extern "C" {#include <limits.h> #include <stdbool.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -38,15 +37,15 @@ struct rte_vmbus_bus;struct vmbus_channel ;struct vmbus_mon_page ; -TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); -TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver); +RTE_TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); +RTE_TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver);/* VMBus iterators */ #define FOREACH_DEVICE_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next)#define FOREACH_DRIVER_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next)/** Maximum number of VMBUS resources. */ enum hv_uio_map {
@@ -62,7 +61,7 @@ enum hv_uio_map {* A structure describing a VMBUS device. */ struct rte_vmbus_device { -TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ +RTE_TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ const struct rte_vmbus_driver *driver;/**< Associated driver */ struct rte_device device;/**< Inherit core device */ rte_uuid_t device_id;/**< VMBUS device id */
@@ -93,7 +92,7 @@ typedef int (vmbus_remove_t)(struct rte_vmbus_device *);* A structure describing a VMBUS driver. */ struct rte_vmbus_driver { -TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ struct rte_driver driver;struct rte_vmbus_bus *bus;/**< VM bus reference. */ vmbus_probe_t *probe;/**< Device Probe function. */
drivers/net/i40e/i40e_ethdev.h +1 -0
@@ -6,6 +6,7 @@#define _I40E_ETHDEV_H_#include <stdint.h> +#include <sys/queue.h> #include <rte_time.h> #include <rte_kvargs.h>
drivers/net/ice/ice_dcf_ethdev.c +1 -0
@@ -4,6 +4,7 @@#include <errno.h> #include <stdbool.h> +#include <sys/queue.h> #include <sys/types.h> #include <unistd.h>
lib/bbdev/rte_bbdev.h +1 -1
@@ -434,7 +434,7 @@ struct rte_bbdev_callback;struct rte_intr_handle ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback); +RTE_TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback);/** * @internal The data structure associated with a device. Drivers can access
lib/cryptodev/rte_cryptodev.h +1 -1
@@ -879,7 +879,7 @@ typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,struct rte_cryptodev_callback ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback); +RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback);/** * Structure used to hold information about the callbacks to be called for a
lib/cryptodev/rte_cryptodev_pmd.h +1 -1
@@ -66,7 +66,7 @@ struct rte_cryptodev_global {/* Cryptodev driver, containing the driver ID */ struct cryptodev_driver { -TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ const struct rte_driver *driver;uint8_t id; };
lib/eal/common/eal_common_devargs.c +2 -0
@@ -9,6 +9,7 @@#include <stdio.h> #include <string.h> #include <stdarg.h> +#include <sys/queue.h> #include <rte_bus.h> #include <rte_class.h>
@@ -18,6 +19,7 @@#include <rte_errno.h> #include <rte_kvargs.h> #include <rte_log.h> +#include <rte_os.h> #include <rte_tailq.h> #include "eal_private.h"
lib/eal/common/eal_common_fbarray.c +1 -0
@@ -9,6 +9,7 @@#include <errno.h> #include <string.h> #include <unistd.h> +#include <sys/queue.h> #include <rte_common.h> #include <rte_eal_paging.h>
lib/eal/common/eal_common_log.c +1 -0
@@ -10,6 +10,7 @@#include <errno.h> #include <regex.h> #include <fnmatch.h> +#include <sys/queue.h> #include <rte_eal.h> #include <rte_log.h>
lib/eal/common/eal_common_memalloc.c +1 -0
@@ -3,6 +3,7 @@*/ #include <string.h> +#include <sys/queue.h> #include <rte_errno.h> #include <rte_lcore.h>
lib/eal/common/eal_common_options.c +1 -0
@@ -6,6 +6,7 @@#include <stdlib.h> #include <unistd.h> #include <string.h> +#include <sys/queue.h> #ifndef RTE_EXEC_ENV_WINDOWS #include <syslog.h> #endif
lib/eal/common/eal_trace.h +2 -0
@@ -5,6 +5,8 @@#ifndef __EAL_TRACE_H#define __EAL_TRACE_H +#include <sys/queue.h> +#include <rte_cycles.h> #include <rte_log.h> #include <rte_malloc.h>
lib/eal/freebsd/include/rte_os.h +33 -0
@@ -11,6 +11,39 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_INIT (head) TAILQ_INIT(head) +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_LAST (head, headname) TAILQ_LAST(head, headname) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_EMPTY (head) TAILQ_EMPTY(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_TAILQ_HEAD_INITIALIZER (head) TAILQ_HEAD_INITIALIZER(head) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_INSERT_TAIL (head, elm, field) \ + TAILQ_INSERT_TAIL(head, elm, field) +#define RTE_TAILQ_REMOVE (head, elm, field) TAILQ_REMOVE(head, elm, field) +#define RTE_TAILQ_INSERT_BEFORE (listelm, elm, field) \ + TAILQ_INSERT_BEFORE(listelm, elm, field) +#define RTE_TAILQ_INSERT_AFTER (head, listelm, elm, field) \ + TAILQ_INSERT_AFTER(head, listelm, elm, field) +#define RTE_TAILQ_INSERT_HEAD (head, elm, field) \ + TAILQ_INSERT_HEAD(head, elm, field) + +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_HEAD_INITIALIZER (head) STAILQ_HEAD_INITIALIZER(head) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) + +/* This is not defined in sys/queue.h */ +#ifndef TAILQ_FOREACH_SAFE +#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#endif typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +2 -3
@@ -19,13 +19,12 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_log.h> #include <rte_dev.h> /** Double linked list of buses */ -TAILQ_HEAD (rte_bus_list, rte_bus); +RTE_TAILQ_HEAD (rte_bus_list, rte_bus);/**
@@ -250,7 +249,7 @@ typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);* A structure describing a generic bus. */ struct rte_bus { -TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ +RTE_TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ const char *name;/**< Name of the bus */ rte_bus_scan_t scan;/**< Scan for devices attached to bus */ rte_bus_probe_t probe;/**< Probe devices on bus */
lib/eal/include/rte_class.h +2 -4
@@ -22,18 +22,16 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */ -TAILQ_HEAD (rte_class_list, rte_class); +RTE_TAILQ_HEAD (rte_class_list, rte_class);/** * A structure describing a generic device class. */ struct rte_class { -TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ +RTE_TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ const char *name;/**< Name of the class */ rte_dev_iterate_t dev_iterate;/**< Device iterator. */ };
lib/eal/include/rte_dev.h +2 -3
@@ -18,7 +18,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_compat.h>
@@ -75,7 +74,7 @@ struct rte_mem_resource {* A structure describing a device driver. */ struct rte_driver { -TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ const char *name;/**< Driver name. */ const char *alias;/**< Driver alias. */ };
@@ -90,7 +89,7 @@ struct rte_driver {* A structure describing a generic device. */ struct rte_device { -TAILQ_ENTRY (rte_device) next;/**< Next device */ +RTE_TAILQ_ENTRY (rte_device) next;/**< Next device */ const char *name;/**< Device name */ const struct rte_driver *driver;/**< Driver assigned after probing */ const struct rte_bus *bus;/**< Bus handle assigned on scan */
lib/eal/include/rte_devargs.h +1 -2
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
@@ -76,7 +75,7 @@ enum rte_devtype {*/ struct rte_devargs {/** Next in list. */ -TAILQ_ENTRY (rte_devargs) next; +RTE_TAILQ_ENTRY (rte_devargs) next;/** Type of device. */ enum rte_devtype type;/** Device policy. */
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +7 -8
@@ -15,17 +15,16 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { -TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ +RTE_TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ void *data;/**< Pointer to the data referenced by this tailq entry */ };/** dummy */ -TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry); +RTE_TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry);#define RTE_TAILQ_NAMESIZE 32
@@ -48,7 +47,7 @@ struct rte_tailq_elem {* rte_eal_tailqs_init() */ struct rte_tailq_head *head; -TAILQ_ENTRY (rte_tailq_elem) next; +RTE_TAILQ_ENTRY (rte_tailq_elem) next;const char name[RTE_TAILQ_NAMESIZE ]; };
@@ -126,10 +125,10 @@ RTE_INIT(tailqinitfn_ ##t) \ }/* This macro permits both remove and free var within the loop safely.*/ -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif
lib/eal/linux/include/rte_os.h +33 -0
@@ -11,6 +11,39 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_INIT (head) TAILQ_INIT(head) +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_LAST (head, headname) TAILQ_LAST(head, headname) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_EMPTY (head) TAILQ_EMPTY(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_TAILQ_HEAD_INITIALIZER (head) TAILQ_HEAD_INITIALIZER(head) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_INSERT_TAIL (head, elm, field) \ + TAILQ_INSERT_TAIL(head, elm, field) +#define RTE_TAILQ_REMOVE (head, elm, field) TAILQ_REMOVE(head, elm, field) +#define RTE_TAILQ_INSERT_BEFORE (listelm, elm, field) \ + TAILQ_INSERT_BEFORE(listelm, elm, field) +#define RTE_TAILQ_INSERT_AFTER (head, listelm, elm, field) \ + TAILQ_INSERT_AFTER(head, listelm, elm, field) +#define RTE_TAILQ_INSERT_HEAD (head, elm, field) \ + TAILQ_INSERT_HEAD(head, elm, field) + +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_HEAD_INITIALIZER (head) STAILQ_HEAD_INITIALIZER(head) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) + +/* This is not defined in sys/queue.h */ +#ifndef TAILQ_FOREACH_SAFE +#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#endif #ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/eal_alarm.c +1 -0
@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h>
lib/eal/windows/include/rte_os.h +138 -0
144 lines not on this page · raw message
lib/ethdev/rte_ethdev_core.h +1 -1
@@ -21,7 +21,7 @@struct rte_eth_dev_callback ;/** @internal Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback); +RTE_TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback);struct rte_eth_dev ;
lib/hash/rte_fbk_hash.h +0 -1
@@ -17,7 +17,6 @@#include <stdint.h> #include <errno.h> -#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/hash/rte_thash.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2021 Intel Corporation */ +#include <sys/queue.h> +#include <rte_thash.h> #include <rte_tailq.h> #include <rte_random.h>
lib/ip_frag/rte_ip_frag.h +2 -2
@@ -62,7 +62,7 @@ struct ip_frag_key {* First two entries in the frags[] array are for the last and first fragments. */ struct ip_frag_pkt { -TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ +RTE_TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ struct ip_frag_key key;/**< fragmentation key */ uint64_t start;/**< creation timestamp */ uint32_t total_size;/**< expected reassembled size */
@@ -83,7 +83,7 @@ struct rte_ip_frag_death_row {/**< mbufs to be freed */ }; -TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ +RTE_TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ /** fragmentation table statistics */ struct ip_frag_tbl_stat {
lib/mempool/rte_mempool.h +4 -5
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
@@ -141,7 +140,7 @@ struct rte_mempool_objsz {* double-frees. */ struct rte_mempool_objhdr { -STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the object. */ rte_iova_t iova;/**< IO address of the object. */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -152,7 +151,7 @@ struct rte_mempool_objhdr {/** * A list of object headers type */ -STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr); +RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr);#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -171,7 +170,7 @@ struct rte_mempool_objtlr {/** * A list of memory where objects are stored */ -STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr); +RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr);/** * Callback used to free a memory chunk
@@ -186,7 +185,7 @@ typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,* and physically contiguous. */ struct rte_mempool_memhdr { -STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the chunk */ void *addr;/**< Virtual address of the chunk */ rte_iova_t iova;/**< IO address of the chunk */
lib/pci/rte_pci.h +0 -1
@@ -18,7 +18,6 @@ extern "C" {#include <stdio.h> #include <limits.h> -#include <sys/queue.h> #include <inttypes.h> #include <sys/types.h>
lib/ring/rte_ring_core.h +0 -1
@@ -26,7 +26,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> #include <string.h> -#include <sys/queue.h> #include <errno.h> #include <rte_common.h> #include <rte_config.h>
lib/table/rte_swx_table.h +4 -3
@@ -16,7 +16,8 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> + +#include <rte_os.h> /** Match type. */ enum rte_swx_table_match_type {
@@ -68,7 +69,7 @@ struct rte_swx_table_entry {/** Used to facilitate the membership of this table entry to a * linked list. */ -TAILQ_ENTRY (rte_swx_table_entry) node; +RTE_TAILQ_ENTRY (rte_swx_table_entry) node;/** Key value for the current entry. Array of *key_size* bytes or NULL * if the *key_size* for the current table is 0.
@@ -111,7 +112,7 @@ struct rte_swx_table_entry { };/** List of table entries. */ -TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry); +RTE_TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry);/** * Table memory footprint get
lib/table/rte_swx_table_selector.h +2 -3
@@ -16,7 +16,6 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> #include <rte_compat.h>
@@ -56,7 +55,7 @@ struct rte_swx_table_selector_params {/** Group member parameters. */ struct rte_swx_table_selector_member {/** Linked list connectivity. */ -TAILQ_ENTRY (rte_swx_table_selector_member) node; +RTE_TAILQ_ENTRY (rte_swx_table_selector_member) node;/** Member ID. */ uint32_t member_id;
@@ -66,7 +65,7 @@ struct rte_swx_table_selector_member { };/** List of group members. */ -TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member); +RTE_TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member);/** Group parameters. */ struct rte_swx_table_selector_group {
lib/vhost/rte_vdpa_dev.h +1 -1
@@ -71,7 +71,7 @@ struct rte_vdpa_dev_ops {* vdpa device structure includes device address and device operations. */ struct rte_vdpa_device { -TAILQ_ENTRY (rte_vdpa_device) next; +RTE_TAILQ_ENTRY (rte_vdpa_device) next;/** Generic device information */ struct rte_device *device;/** vdpa device operations */
Signature · 1 line
2.30.2
2021-08-12 20:05 (UTC+0000), William Tu:
Quoted 1 line
Currently there are a couple of public header files include
Suggested subject: "eal: remove sys/queue.h from public headers".
1. The state before the patch should be described in the past tense.
2. Really ten times more than "a couple", suggesting "some" (nit).
2. "files _that_ include"?
Quoted 1 line
'
sys/queue.h', which is a POSIX functionality.
It's not POSIX, it's found on many Unix systems.
Quoted 2 lines
When compiling DPDK with OVS on Windows, we encountered issues such as, found the missing header.
This sentence is a little hard to parse. Instead, suggesting:
This file is missing on Windows. During the build, DPDK uses a bundled copy, but it cannot be installed because macros it exports may conflict with the ones from application code or environment.
Quoted 3 lines
In file included from
../lib/dpdk.c:27:
C:\temp\dpdk\include\rte_log.h:24:10: fatal error: 'sys/queue.h' file not found
An explanation is missing why <sys/queue.h> embedded in DPDK shouldn't be installed (see above, maybe you can come up with something better).
Quoted 6 lines
The patch fixes it by removing the #include <
sys/queue.h> from DPDK public headers, so programs including DPDK headers don't depend on POSIXsys/queue.h. For Linux/FreeBSD, DPDK public headers only need a handful of macros for list/tailq heads and links. Those macros should be provided by DPDK, withRTE_prefix.
It is worth noting that RTE_ macros must be compatible with <sys/queue.h> at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Nit: "Should" is not the right word for things done in the patch. Same below.
Quoted 5 lines
For Linux and FreeBSD it will just be:
#include <sys/queue.h> #define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type) /* ... */For Windows, we copy these definitions from <
sys/queue.h> torte_os.h.
No need to describe what's inside the patch, diff already does it :)
Quoted 18 lines
With this patch, all the public headers should not have "#include <
sys/queue.h>" or "TAILQ_xxx" macros.Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
v2->v3:
* follow the suggestion by Dmitry
* run checkpatches, there are some errors but I think either the original file has over 80-char line due to comments, or some false positive about macro.v1->v2:
- follow the suggestion by Nick and Dmitry
- http://mails.dpdk.org/archives/dev/2021-August/216304.htmlSigned-off-by William Tu <[email protected]>---
[...]
Quoted 23 lines
lib/eal/freebsd/include/rte_os.h +15
-0@@ -11,6 +11,39 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_INIT (head) TAILQ_INIT(head) +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_LAST (head, headname) TAILQ_LAST(head, headname) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_EMPTY (head) TAILQ_EMPTY(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_TAILQ_HEAD_INITIALIZER (head) TAILQ_HEAD_INITIALIZER(head) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_INSERT_TAIL (head, elm, field) \ + TAILQ_INSERT_TAIL(head, elm, field) +#define RTE_TAILQ_REMOVE (head, elm, field) TAILQ_REMOVE(head, elm, field)
lib/eal/freebsd/include/rte_os.h line 38
Quoted 10 lines
lib/eal/freebsd/include/rte_os.h +10
-0+#define RTE_TAILQ_INSERT_BEFORE (listelm, elm, field) \ + TAILQ_INSERT_BEFORE(listelm, elm, field) +#define RTE_TAILQ_INSERT_AFTER (head, listelm, elm, field) \ + TAILQ_INSERT_AFTER(head, listelm, elm, field) +#define RTE_TAILQ_INSERT_HEAD (head, elm, field) \ + TAILQ_INSERT_HEAD(head, elm, field) + +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_HEAD_INITIALIZER (head) STAILQ_HEAD_INITIALIZER(head) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type)
Most of these macros are not used in public headers and are not needed. The idea is that TAILQ_* macros from sys/queue.h can be used in C files with variables declared with RTE_TAILQ_HEAD/ENTRY in public headers. Needed macros:
RTE_TAILQ_HEAD
RTE_TAILQ_ENTRY
RTE_TAILQ_FOREACH
RTE_TAILQ_FIRST (for RTE_TAILQ_FOREACH_SAFE only) RTE_TAILQ_NEXT (ditto)
RTE_STAILQ_HEAD
RTE_STAILQ_ENTRY
lib/eal/freebsd/include/rte_os.h line 46
Quoted 8 lines
lib/eal/freebsd/include/rte_os.h +8
-0+ +/* This is not defined in sys/queue.h */ +#ifndef TAILQ_FOREACH_SAFE +#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#endif
Please simply change the three usages of TAILQ_FOREACH_SAFE to RTE_TAILQ_FOREACH_SAFE and remove this one. It cannot be placed in rte_os.h, because rte_os.h is public and it must not export non-RTE symbols.
All comments to this file obviously apply to Linux version as well.
Quoted 3 lines
lib/eal/freebsd/include/rte_os.h +0
-0typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
[...]
lib/eal/windows/include/rte_os.h line 21
Quoted 9 lines
lib/eal/windows/include/rte_os.h +1
-0@@ -18,6 +18,144 @@extern "C" {#endif +#ifdef QUEUE_MACRO_DEBUG_TRACE
IMO we all these debugging macros should be removed from this header, including their use in user-facing macros.
They are implementation detail for <sys/queue.h> developers.
Quoted 12 lines
lib/eal/windows/include/rte_os.h +12
-0+/* Store the last 2 places the queue element or head was altered */ +struct qm_trace { +unsigned long lastline; +unsigned long prevline; +const char *lastfile; +const char *prevfile; +}; + +/** +* These macros are compatible with the sys/queue.h provided +* at DPDK source code. +*/
[...]
lib/eal/windows/include/rte_os.h line 71
Quoted 5 lines
lib/eal/windows/include/rte_os.h +5
-0+ +#define QMD_TAILQ_CHECK_HEAD (head, field) +#define QMD_TAILQ_CHECK_TAIL (head, headname) +#define QMD_TAILQ_CHECK_NEXT (elm, field) +#define QMD_TAILQ_CHECK_PREV (elm, field)
Redundant empty lines below.
lib/eal/windows/include/rte_os.h line 78
Quoted 7 lines
lib/eal/windows/include/rte_os.h +7
-0+ + +#define RTE_TAILQ_EMPTY (head) ((head)->tqh_first == NULL) + +#define RTE_TAILQ_FIRST (head) ((head)->tqh_first) + +#define RTE_TAILQ_INIT (head) do { \
I suggest removing all spaces but one before the backslash so that you don't need to manually align.
At least please keep the lines within 80 characters.
Quoted 4 lines
lib/eal/windows/include/rte_os.h +4
-0+RTE_TAILQ_FIRST ((head)) =NULL ; \ + (head)->tqh_last = &RTE_TAILQ_FIRST ((head)); \ +QMD_TRACE_HEAD (head); \ +}while (0 )
[...]
PATCH v4 1/1 eal: remove sys/queue.h from public headers.
In reply to William TuCurrently there are some public headers that include 'sys/queue.h', which is not POSIX, but usually provided by Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the windows build, DPDK uses a bundled copy, so building DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers error due to no such file.
One solution is to installl the 'lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functinoalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
The patch fixes it by removing the "#include <sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on system to provide 'sys/queue.h'. When these public headers use macros such as TAILQ_xxx, we replace it with RTE_ prefix. For Windows, we copy the definitions from <sys/queue.h> to rte_os.h under windows. Note that these RTE_ macros are compatible with <sys/queue.h>, only at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Additionally, the TAILQ_FOREACH_SAFE is not part of <sys/queue.h>, the patch replaces it with RTE_TAILQ_FOREACH_SAFE.
With this patch, all the public headers no longer have "#include <sys/queue.h>" or "TAILQ_xxx" macros.
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
---
v3-v4:
* address comments from Dmitry
--- drivers/bus/auxiliary/private.h | 1 + drivers/bus/auxiliary/rte_bus_auxiliary.h | 5 ++-- drivers/bus/dpaa/dpaa_bus.c | 4 +-- drivers/bus/fslmc/fslmc_bus.c | 4 +-- drivers/bus/fslmc/fslmc_vfio.c | 9 ++++--- drivers/bus/ifpga/rte_bus_ifpga.h | 8 +++--- drivers/bus/pci/pci_params.c | 2 ++ drivers/bus/pci/rte_bus_pci.h | 13 +++++---- drivers/bus/pci/windows/pci.c | 3 +++ drivers/bus/pci/windows/pci_netuio.c | 2 ++ drivers/bus/vdev/rte_bus_vdev.h | 7 +++-- drivers/bus/vdev/vdev.c | 3 ++- drivers/bus/vmbus/rte_bus_vmbus.h | 13 +++++---- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 2 +- drivers/net/bonding/rte_eth_bond_flow.c | 2 +- drivers/net/failsafe/failsafe_flow.c | 2 +- drivers/net/i40e/i40e_ethdev.c | 9 ++++--- drivers/net/i40e/i40e_ethdev.h | 1 + drivers/net/i40e/i40e_flow.c | 6 ++--- drivers/net/i40e/i40e_hash.c | 2 +- drivers/net/i40e/rte_pmd_i40e.c | 6 ++--- drivers/net/iavf/iavf_generic_flow.c | 14 +++++----- drivers/net/ice/ice_dcf_ethdev.c | 1 + drivers/net/ice/ice_ethdev.c | 4 +-- drivers/net/ice/ice_generic_flow.c | 14 +++++----- drivers/net/softnic/rte_eth_softnic_flow.c | 3 ++- drivers/net/softnic/rte_eth_softnic_swq.c | 2 +- drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 2 +- lib/bbdev/rte_bbdev.h | 2 +- lib/cryptodev/rte_cryptodev.h | 2 +- lib/cryptodev/rte_cryptodev_pmd.h | 2 +- lib/eal/common/eal_common_devargs.c | 6 +++-- lib/eal/common/eal_common_fbarray.c | 1 + lib/eal/common/eal_common_log.c | 1 + lib/eal/common/eal_common_memalloc.c | 1 + lib/eal/common/eal_common_options.c | 3 ++- lib/eal/common/eal_trace.h | 2 ++ lib/eal/freebsd/include/rte_os.h | 15 +++++++++++ lib/eal/include/rte_bus.h | 5 ++-- lib/eal/include/rte_class.h | 6 ++--- lib/eal/include/rte_dev.h | 5 ++-- lib/eal/include/rte_devargs.h | 3 +-- lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 15 +++++------ lib/eal/linux/include/rte_os.h | 15 +++++++++++ lib/eal/windows/eal_alarm.c | 1 + lib/eal/windows/include/rte_os.h | 31 ++++++++++++++++++++++ lib/efd/rte_efd.c | 2 +- lib/ethdev/rte_ethdev_core.h | 2 +- lib/hash/rte_fbk_hash.h | 1 - lib/hash/rte_thash.c | 2 ++ lib/ip_frag/rte_ip_frag.h | 4 +-- lib/mempool/rte_mempool.c | 2 +- lib/mempool/rte_mempool.h | 9 +++---- lib/pci/rte_pci.h | 1 - lib/ring/rte_ring_core.h | 1 - lib/table/rte_swx_table.h | 7 ++--- lib/table/rte_swx_table_selector.h | 5 ++-- lib/vhost/iotlb.c | 11 ++++---- lib/vhost/rte_vdpa_dev.h | 2 +- lib/vhost/vdpa.c | 2 +- 62 files changed, 193 insertions(+), 120 deletions(-)
drivers/bus/auxiliary/private.h +1 -0
@@ -7,6 +7,7 @@#include <stdbool.h> #include <stdio.h> +#include <sys/queue.h> #include "rte_bus_auxiliary.h"
drivers/bus/auxiliary/rte_bus_auxiliary.h +2 -3
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -113,7 +112,7 @@ typedef int (rte_auxiliary_dma_unmap_t)(struct rte_auxiliary_device *dev,* A structure describing an auxiliary device. */ struct rte_auxiliary_device { -TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ +RTE_TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ struct rte_device device;/**< Inherit core device */ char name[RTE_DEV_NAME_MAX_LEN +1 ];/**< ASCII device name */ struct rte_intr_handle intr_handle;/**< Interrupt handle */
@@ -124,7 +123,7 @@ struct rte_auxiliary_device {* A structure describing an auxiliary driver. */ struct rte_auxiliary_driver { -TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_auxiliary_bus *bus;/**< Auxiliary bus reference. */ rte_auxiliary_match_t *match;/**< Device match function. */
drivers/bus/dpaa/dpaa_bus.c +2 -2
@@ -105,7 +105,7 @@ dpaa_add_to_device_list(struct rte_dpaa_device *newdev)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { comp =compare_dpaa_devices (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
@@ -245,7 +245,7 @@ dpaa_clean_device_list(void)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) {TAILQ_REMOVE (&rte_dpaa_bus.device_list, dev, next);free (dev); dev =NULL ;
drivers/bus/fslmc/fslmc_bus.c +2 -2
@@ -45,7 +45,7 @@ cleanup_fslmc_device_list(void)struct rte_dpaa2_device *dev;struct rte_dpaa2_device *t_dev; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) {TAILQ_REMOVE (&rte_fslmc_bus.device_list, dev, next);free (dev); dev =NULL ;
@@ -82,7 +82,7 @@ insert_in_device_list(struct rte_dpaa2_device *newdev)struct rte_dpaa2_device *dev =NULL ;struct rte_dpaa2_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { comp =compare_dpaa2_devname (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
drivers/bus/fslmc/fslmc_vfio.c +6 -3
@@ -808,7 +808,8 @@ fslmc_vfio_process_group(void)bool is_dpmcp_in_blocklist = false, is_dpio_in_blocklist = false;int dpmcp_count =0 , dpio_count =0 , current_device; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { dpmcp_count++; if (dev->device.devargs &&
@@ -825,7 +826,8 @@ fslmc_vfio_process_group(void)/* Search the MCP as that should be initialized first. */ current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { current_device++; if (dev->device.devargs &&
@@ -872,7 +874,8 @@ fslmc_vfio_process_group(void) } current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_IO ) current_device++; if (dev->device.devargs &&
drivers/bus/ifpga/rte_bus_ifpga.h +4 -4
@@ -28,9 +28,9 @@ struct rte_afu_device;struct rte_afu_driver ;/** Double linked list of Intel FPGA AFU device. */ -TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device); +RTE_TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device);/** Double linked list of Intel FPGA AFU device drivers. */ -TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver); +RTE_TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver);#define IFPGA_BUS_BITSTREAM_PATH_MAX_LEN 256
@@ -71,7 +71,7 @@ struct rte_afu_shared {* A structure describing a AFU device. */ struct rte_afu_device { -TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ +RTE_TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ struct rte_device device;/**< Inherit core device */ struct rte_rawdev *rawdev;/**< Point Rawdev */ struct rte_afu_id id;/**< AFU id within FPGA. */
@@ -105,7 +105,7 @@ typedef int (afu_remove_t)(struct rte_afu_device *);* A structure describing a AFU device. */ struct rte_afu_driver { -TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
drivers/bus/pci/pci_params.c +2 -0
@@ -2,6 +2,8 @@* Copyright 2018 Gaëtan Rivet */ +#include <sys/queue.h> +#include <rte_bus.h> #include <rte_bus_pci.h> #include <rte_dev.h>
drivers/bus/pci/rte_bus_pci.h +6 -7
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -37,16 +36,16 @@ struct rte_pci_device;struct rte_pci_driver ;/** List of PCI devices */ -TAILQ_HEAD (rte_pci_device_list, rte_pci_device); +RTE_TAILQ_HEAD (rte_pci_device_list, rte_pci_device);/** List of PCI drivers */ -TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver); +RTE_TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver);/* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next)#define FOREACH_DRIVER_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next)struct rte_devargs ;
@@ -64,7 +63,7 @@ enum rte_pci_kernel_driver {* A structure describing a PCI device. */ struct rte_pci_device { -TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ +RTE_TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ struct rte_device device;/**< Inherit core device */ struct rte_pci_addr addr;/**< PCI location. */ struct rte_pci_id id;/**< PCI ID. */
@@ -160,7 +159,7 @@ typedef int (pci_dma_unmap_t)(struct rte_pci_device *dev, void *addr,* A structure describing a PCI driver. */ struct rte_pci_driver { -TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_pci_bus *bus;/**< PCI bus reference. */ rte_pci_probe_t *probe;/**< Device probe function. */
drivers/bus/pci/windows/pci.c +3 -0
@@ -1,6 +1,9 @@/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2020 Mellanox Technologies, Ltd */ + +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/pci/windows/pci_netuio.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2020 Intel Corporation. */ +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/vdev/rte_bus_vdev.h +3 -4
@@ -15,12 +15,11 @@extern "C" {#endif -#include <sys/queue.h> #include <rte_dev.h> #include <rte_devargs.h> struct rte_vdev_device { -TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ +RTE_TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ struct rte_device device;/**< Inherit core device */ };
@@ -53,7 +52,7 @@ rte_vdev_device_args(const struct rte_vdev_device *dev) }/** Double linked list of virtual device drivers. */ -TAILQ_HEAD (vdev_driver_list, rte_vdev_driver); +RTE_TAILQ_HEAD (vdev_driver_list, rte_vdev_driver);/** * Probe function called for each virtual device driver once.
@@ -107,7 +106,7 @@ typedef int (rte_vdev_dma_unmap_t)(struct rte_vdev_device *dev, void *addr,* A virtual device driver abstraction. */ struct rte_vdev_driver { -TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherited general driver. */ rte_vdev_probe_t *probe;/**< Virtual device probe function. */ rte_vdev_remove_t *remove;/**< Virtual device remove function. */
drivers/bus/vdev/vdev.c +2 -1
@@ -100,7 +100,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)struct vdev_custom_scan *custom_scan, *tmp_scan;rte_spinlock_lock (&vdev_custom_scan_lock); - TAILQ_FOREACH_SAFE(custom_scan, &vdev_custom_scans, next, tmp_scan) { +RTE_TAILQ_FOREACH_SAFE (custom_scan, &vdev_custom_scans, next, + tmp_scan) {if (custom_scan->callback != callback || (custom_scan->user_arg != (void *)-1 && custom_scan->user_arg != user_arg))
drivers/bus/vmbus/rte_bus_vmbus.h +6 -7
@@ -20,7 +20,6 @@ extern "C" {#include <limits.h> #include <stdbool.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -38,15 +37,15 @@ struct rte_vmbus_bus;struct vmbus_channel ;struct vmbus_mon_page ; -TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); -TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver); +RTE_TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); +RTE_TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver);/* VMBus iterators */ #define FOREACH_DEVICE_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next)#define FOREACH_DRIVER_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next)/** Maximum number of VMBUS resources. */ enum hv_uio_map {
@@ -62,7 +61,7 @@ enum hv_uio_map {* A structure describing a VMBUS device. */ struct rte_vmbus_device { -TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ +RTE_TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ const struct rte_vmbus_driver *driver;/**< Associated driver */ struct rte_device device;/**< Inherit core device */ rte_uuid_t device_id;/**< VMBUS device id */
@@ -93,7 +92,7 @@ typedef int (vmbus_remove_t)(struct rte_vmbus_device *);* A structure describing a VMBUS driver. */ struct rte_vmbus_driver { -TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ struct rte_driver driver;struct rte_vmbus_bus *bus;/**< VM bus reference. */ vmbus_probe_t *probe;/**< Device Probe function. */
drivers/net/bnxt/tf_ulp/bnxt_ulp.c +1 -1
@@ -2018,7 +2018,7 @@ bnxt_ulp_cntxt_list_del(struct bnxt_ulp_context *ulp_ctx)struct ulp_context_list_entry *entry, *temp;rte_spinlock_lock (&bnxt_ulp_ctxt_lock); - TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) {if (entry->ulp_ctx == ulp_ctx) {TAILQ_REMOVE (&ulp_cntx_list, entry, next);rte_free (entry);
drivers/net/bonding/rte_eth_bond_flow.c +1 -1
@@ -157,7 +157,7 @@ bond_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *err)/* Destroy all bond flows from its slaves instead of flushing them to * keep the LACP flow or any other external flows. */ - TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { lret =bond_flow_destroy (dev, flow, err);if (unlikely (lret !=0 )) ret = lret;
drivers/net/failsafe/failsafe_flow.c +1 -1
@@ -180,7 +180,7 @@ fs_flow_flush(struct rte_eth_dev *dev,return ret; } } - TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) {TAILQ_REMOVE (&PRIV (dev)->flow_list, flow, next);fs_flow_release (&flow); }
drivers/net/i40e/i40e_ethdev.c +5 -4
@@ -5436,7 +5436,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* VSI has child to attach, release child first */ if (vsi->veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) { + RTE_TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5444,7 +5444,8 @@ i40e_vsi_release(struct i40e_vsi *vsi) }if (vsi->floating_veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->floating_veb->head, list, temp) { +RTE_TAILQ_FOREACH_SAFE (vsi_list, &vsi->floating_veb->head, + list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5452,7 +5453,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* Remove all macvlan filters of the VSI */ i40e_vsi_remove_all_macvlan_filter (vsi); - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)rte_free (f); if (vsi->type != I40E_VSI_MAIN &&
@@ -6055,7 +6056,7 @@ i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on) i =0 ;/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { mac_filter[i] = f->mac_info; ret =i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr);if (ret) {
drivers/net/i40e/i40e_ethdev.h +1 -0
@@ -6,6 +6,7 @@#define _I40E_ETHDEV_H_#include <stdint.h> +#include <sys/queue.h> #include <rte_time.h> #include <rte_kvargs.h>
drivers/net/i40e/i40e_flow.c +3 -3
@@ -4917,7 +4917,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf) }/* Delete FDIR flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_FDIR ) {TAILQ_REMOVE (&pf->flow_list, flow, node); }
@@ -4972,7 +4972,7 @@ i40e_flow_flush_ethertype_filter(struct i40e_pf *pf) }/* Delete ethertype flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_ETHERTYPE ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
@@ -5000,7 +5000,7 @@ i40e_flow_flush_tunnel_filter(struct i40e_pf *pf) }/* Delete tunnel flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_TUNNEL ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
drivers/net/i40e/i40e_hash.c +1 -1
@@ -1366,7 +1366,7 @@ i40e_hash_filter_flush(struct i40e_pf *pf) {struct rte_flow *flow, *next; - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) {if (flow->filter_type !=RTE_ETH_FILTER_HASH )continue ;
drivers/net/i40e/rte_pmd_i40e.c +3 -3
@@ -216,7 +216,7 @@ i40e_vsi_rm_mac_filter(struct i40e_vsi *vsi)void *temp;/* remove all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { vlan_num = vsi->vlan_num; filter_type = f->mac_info.filter_type; if (filter_type == I40E_MACVLAN_PERFECT_MATCH ||
@@ -274,7 +274,7 @@ i40e_vsi_restore_mac_filter(struct i40e_vsi *vsi)void *temp;/* restore all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) {if (f->mac_info.filter_type ==I40E_MACVLAN_PERFECT_MATCH || f->mac_info.filter_type ==I40E_MACVLAN_HASH_MATCH ) {/**
@@ -563,7 +563,7 @@ rte_pmd_i40e_set_vf_mac_addr(uint16_t port, uint16_t vf_id,rte_ether_addr_copy (mac_addr, &vf->mac_addr);/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)if (i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr) !=I40E_SUCCESS )PMD_DRV_LOG (WARNING ,"Delete MAC failed" );
drivers/net/iavf/iavf_generic_flow.c +7 -7
@@ -1637,7 +1637,7 @@ iavf_flow_init(struct iavf_adapter *ad)TAILQ_INIT (&vf->dist_parser_list);rte_spinlock_init (&vf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1663,7 +1663,7 @@ iavf_flow_uninit(struct iavf_adapter *ad)struct iavf_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1733,7 +1733,7 @@ iavf_unregister_parser(struct iavf_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -1917,7 +1917,7 @@ iavf_parse_engine_create(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -1946,7 +1946,7 @@ iavf_parse_engine_validate(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2089,7 +2089,7 @@ iavf_flow_is_valid(struct rte_flow *flow)void *temp;if (flow && flow->engine) { - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine == flow->engine)return true; }
@@ -2142,7 +2142,7 @@ iavf_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { ret =iavf_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
drivers/net/ice/ice_dcf_ethdev.c +1 -0
@@ -4,6 +4,7 @@#include <errno.h> #include <stdbool.h> +#include <sys/queue.h> #include <sys/types.h> #include <unistd.h>
drivers/net/ice/ice_ethdev.c +2 -2
@@ -1104,7 +1104,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (!vsi || !vsi->mac_num)return -EINVAL ; - TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { ret =ice_remove_mac_filter (vsi, &m_f->mac_info.mac_addr);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
@@ -1115,7 +1115,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (vsi->vlan_num ==0 )return 0 ; - TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { ret =ice_remove_vlan_filter (vsi, &v_f->vlan_info.vlan);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
drivers/net/ice/ice_generic_flow.c +7 -7
@@ -1820,7 +1820,7 @@ ice_flow_init(struct ice_adapter *ad)TAILQ_INIT (&pf->dist_parser_list);rte_spinlock_init (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1846,7 +1846,7 @@ ice_flow_uninit(struct ice_adapter *ad)struct ice_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1946,7 +1946,7 @@ ice_unregister_parser(struct ice_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -2272,7 +2272,7 @@ ice_parse_engine_create(struct ice_adapter *ad,void *meta =NULL ;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {int ret; if (parser_node->parser->parse_pattern_action(ad,
@@ -2305,7 +2305,7 @@ ice_parse_engine_validate(struct ice_adapter *ad,struct ice_flow_parser_node *parser_node;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2477,7 +2477,7 @@ ice_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { ret =ice_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
@@ -2541,7 +2541,7 @@ ice_flow_redirect(struct ice_adapter *ad,rte_spinlock_lock (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {if (!p_flow->engine->redirect)continue ; ret = p_flow->engine->redirect (ad, p_flow, rd);
drivers/net/softnic/rte_eth_softnic_flow.c +2 -1
@@ -2207,7 +2207,8 @@ pmd_flow_flush(struct rte_eth_dev *dev,void *temp;int status; - TAILQ_FOREACH_SAFE(flow, &table->flows, node, temp) { +RTE_TAILQ_FOREACH_SAFE (flow, &table->flows, node, + temp) {/* Rule delete. */ status = softnic_pipeline_table_rule_delete (softnic,
drivers/net/softnic/rte_eth_softnic_swq.c +1 -1
@@ -39,7 +39,7 @@ softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p) {struct softnic_swq *swq, *tswq; - TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) { + RTE_TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) {if ((strncmp (swq->name,"RXQ" ,strlen ("RXQ" )) ==0 ) || (strncmp (swq->name,"TXQ" ,strlen ("TXQ" )) ==0 ))continue ;
drivers/raw/dpaa2_qdma/dpaa2_qdma.c +1 -1
@@ -1606,7 +1606,7 @@ remove_hw_queues_from_list(struct dpaa2_dpdmai_dev *dpdmai_dev)DPAA2_QDMA_FUNC_TRACE (); - TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) { + RTE_TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) {if (queue->dpdmai_dev == dpdmai_dev) {TAILQ_REMOVE (&qdma_queue_list, queue, next);rte_free (queue);
lib/bbdev/rte_bbdev.h +1 -1
@@ -434,7 +434,7 @@ struct rte_bbdev_callback;struct rte_intr_handle ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback); +RTE_TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback);/** * @internal The data structure associated with a device. Drivers can access
lib/cryptodev/rte_cryptodev.h +1 -1
@@ -879,7 +879,7 @@ typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,struct rte_cryptodev_callback ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback); +RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback);/** * Structure used to hold information about the callbacks to be called for a
lib/cryptodev/rte_cryptodev_pmd.h +1 -1
@@ -66,7 +66,7 @@ struct rte_cryptodev_global {/* Cryptodev driver, containing the driver ID */ struct cryptodev_driver { -TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ const struct rte_driver *driver;uint8_t id; };
lib/eal/common/eal_common_devargs.c +4 -2
@@ -9,6 +9,7 @@#include <stdio.h> #include <string.h> #include <stdarg.h> +#include <sys/queue.h> #include <rte_bus.h> #include <rte_class.h>
@@ -18,6 +19,7 @@#include <rte_errno.h> #include <rte_kvargs.h> #include <rte_log.h> +#include <rte_os.h> #include <rte_tailq.h> #include "eal_private.h"
@@ -291,7 +293,7 @@ rte_devargs_insert(struct rte_devargs **da)if (*da ==NULL || (*da)->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) {if (listed_da == *da)/* devargs already in the list */ return 0 ;
@@ -358,7 +360,7 @@ rte_devargs_remove(struct rte_devargs *devargs)if (devargs ==NULL || devargs->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {if (strcmp (d->bus->name, devargs->bus->name) ==0 &&strcmp (d->name, devargs->name) ==0 ) {TAILQ_REMOVE (&devargs_list, d, next);
lib/eal/common/eal_common_fbarray.c +1 -0
@@ -9,6 +9,7 @@#include <errno.h> #include <string.h> #include <unistd.h> +#include <sys/queue.h> #include <rte_common.h> #include <rte_eal_paging.h>
lib/eal/common/eal_common_log.c +1 -0
@@ -10,6 +10,7 @@#include <errno.h> #include <regex.h> #include <fnmatch.h> +#include <sys/queue.h> #include <rte_eal.h> #include <rte_log.h>
lib/eal/common/eal_common_memalloc.c +1 -0
@@ -3,6 +3,7 @@*/ #include <string.h> +#include <sys/queue.h> #include <rte_errno.h> #include <rte_lcore.h>
lib/eal/common/eal_common_options.c +2 -1
@@ -6,6 +6,7 @@#include <stdlib.h> #include <unistd.h> #include <string.h> +#include <sys/queue.h> #ifndef RTE_EXEC_ENV_WINDOWS #include <syslog.h> #endif
@@ -283,7 +284,7 @@ eal_option_device_parse(void)void *tmp;int ret =0 ; - TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) {if (ret ==0 ) { ret =rte_devargs_add (devopt->type, devopt->arg);if (ret)
lib/eal/common/eal_trace.h +2 -0
@@ -5,6 +5,8 @@#ifndef __EAL_TRACE_H#define __EAL_TRACE_H +#include <sys/queue.h> +#include <rte_cycles.h> #include <rte_log.h> #include <rte_malloc.h>
lib/eal/freebsd/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +2 -3
@@ -19,13 +19,12 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_log.h> #include <rte_dev.h> /** Double linked list of buses */ -TAILQ_HEAD (rte_bus_list, rte_bus); +RTE_TAILQ_HEAD (rte_bus_list, rte_bus);/**
@@ -250,7 +249,7 @@ typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);* A structure describing a generic bus. */ struct rte_bus { -TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ +RTE_TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ const char *name;/**< Name of the bus */ rte_bus_scan_t scan;/**< Scan for devices attached to bus */ rte_bus_probe_t probe;/**< Probe devices on bus */
lib/eal/include/rte_class.h +2 -4
@@ -22,18 +22,16 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */ -TAILQ_HEAD (rte_class_list, rte_class); +RTE_TAILQ_HEAD (rte_class_list, rte_class);/** * A structure describing a generic device class. */ struct rte_class { -TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ +RTE_TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ const char *name;/**< Name of the class */ rte_dev_iterate_t dev_iterate;/**< Device iterator. */ };
lib/eal/include/rte_dev.h +2 -3
@@ -18,7 +18,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_compat.h>
@@ -75,7 +74,7 @@ struct rte_mem_resource {* A structure describing a device driver. */ struct rte_driver { -TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ const char *name;/**< Driver name. */ const char *alias;/**< Driver alias. */ };
@@ -90,7 +89,7 @@ struct rte_driver {* A structure describing a generic device. */ struct rte_device { -TAILQ_ENTRY (rte_device) next;/**< Next device */ +RTE_TAILQ_ENTRY (rte_device) next;/**< Next device */ const char *name;/**< Device name */ const struct rte_driver *driver;/**< Driver assigned after probing */ const struct rte_bus *bus;/**< Bus handle assigned on scan */
lib/eal/include/rte_devargs.h +1 -2
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
@@ -76,7 +75,7 @@ enum rte_devtype {*/ struct rte_devargs {/** Next in list. */ -TAILQ_ENTRY (rte_devargs) next; +RTE_TAILQ_ENTRY (rte_devargs) next;/** Type of device. */ enum rte_devtype type;/** Device policy. */
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +7 -8
@@ -15,17 +15,16 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { -TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ +RTE_TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ void *data;/**< Pointer to the data referenced by this tailq entry */ };/** dummy */ -TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry); +RTE_TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry);#define RTE_TAILQ_NAMESIZE 32
@@ -48,7 +47,7 @@ struct rte_tailq_elem {* rte_eal_tailqs_init() */ struct rte_tailq_head *head; -TAILQ_ENTRY (rte_tailq_elem) next; +RTE_TAILQ_ENTRY (rte_tailq_elem) next;const char name[RTE_TAILQ_NAMESIZE ]; };
@@ -126,10 +125,10 @@ RTE_INIT(tailqinitfn_ ##t) \ }/* This macro permits both remove and free var within the loop safely.*/ -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif
lib/eal/linux/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/eal_alarm.c +1 -0
@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h>
lib/eal/windows/include/rte_os.h +31 -0
@@ -18,6 +18,37 @@ extern "C" { #endif +#define RTE_TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} +#define RTE_TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#define RTE_TAILQ_FOREACH(var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST(head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} +#define RTE_STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + + /* cpu_set macros implementation */ #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2)
lib/efd/rte_efd.c +1 -1
@@ -759,7 +759,7 @@ rte_efd_free(struct rte_efd_table *table) efd_list =RTE_TAILQ_CAST (rte_efd_tailq.head, rte_efd_list);rte_mcfg_tailq_write_lock (); - TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(te, efd_list, next, temp) {if (te->data == (void *) table) {TAILQ_REMOVE (efd_list, te, next);rte_free (te);
lib/ethdev/rte_ethdev_core.h +1 -1
@@ -21,7 +21,7 @@struct rte_eth_dev_callback ;/** @internal Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback); +RTE_TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback);struct rte_eth_dev ;
lib/hash/rte_fbk_hash.h +0 -1
@@ -17,7 +17,6 @@#include <stdint.h> #include <errno.h> -#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/hash/rte_thash.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2021 Intel Corporation */ +#include <sys/queue.h> +#include <rte_thash.h> #include <rte_tailq.h> #include <rte_random.h>
lib/ip_frag/rte_ip_frag.h +2 -2
@@ -62,7 +62,7 @@ struct ip_frag_key {* First two entries in the frags[] array are for the last and first fragments. */ struct ip_frag_pkt { -TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ +RTE_TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ struct ip_frag_key key;/**< fragmentation key */ uint64_t start;/**< creation timestamp */ uint32_t total_size;/**< expected reassembled size */
@@ -83,7 +83,7 @@ struct rte_ip_frag_death_row {/**< mbufs to be freed */ }; -TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ +RTE_TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ /** fragmentation table statistics */ struct ip_frag_tbl_stat {
lib/mempool/rte_mempool.c +1 -1
@@ -1337,7 +1337,7 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),rte_mcfg_mempool_read_lock (); - TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { + RTE_TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { (*func)((struct rte_mempool *) te->data, arg); }
lib/mempool/rte_mempool.h +4 -5
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
@@ -141,7 +140,7 @@ struct rte_mempool_objsz {* double-frees. */ struct rte_mempool_objhdr { -STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the object. */ rte_iova_t iova;/**< IO address of the object. */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -152,7 +151,7 @@ struct rte_mempool_objhdr {/** * A list of object headers type */ -STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr); +RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr);#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -171,7 +170,7 @@ struct rte_mempool_objtlr {/** * A list of memory where objects are stored */ -STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr); +RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr);/** * Callback used to free a memory chunk
@@ -186,7 +185,7 @@ typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,* and physically contiguous. */ struct rte_mempool_memhdr { -STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the chunk */ void *addr;/**< Virtual address of the chunk */ rte_iova_t iova;/**< IO address of the chunk */
lib/pci/rte_pci.h +0 -1
@@ -18,7 +18,6 @@ extern "C" {#include <stdio.h> #include <limits.h> -#include <sys/queue.h> #include <inttypes.h> #include <sys/types.h>
lib/ring/rte_ring_core.h +0 -1
@@ -26,7 +26,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> #include <string.h> -#include <sys/queue.h> #include <errno.h> #include <rte_common.h> #include <rte_config.h>
lib/table/rte_swx_table.h +4 -3
@@ -16,7 +16,8 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> + +#include <rte_os.h> /** Match type. */ enum rte_swx_table_match_type {
@@ -68,7 +69,7 @@ struct rte_swx_table_entry {/** Used to facilitate the membership of this table entry to a * linked list. */ -TAILQ_ENTRY (rte_swx_table_entry) node; +RTE_TAILQ_ENTRY (rte_swx_table_entry) node;/** Key value for the current entry. Array of *key_size* bytes or NULL * if the *key_size* for the current table is 0.
@@ -111,7 +112,7 @@ struct rte_swx_table_entry { };/** List of table entries. */ -TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry); +RTE_TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry);/** * Table memory footprint get
lib/table/rte_swx_table_selector.h +2 -3
@@ -16,7 +16,6 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> #include <rte_compat.h>
@@ -56,7 +55,7 @@ struct rte_swx_table_selector_params {/** Group member parameters. */ struct rte_swx_table_selector_member {/** Linked list connectivity. */ -TAILQ_ENTRY (rte_swx_table_selector_member) node; +RTE_TAILQ_ENTRY (rte_swx_table_selector_member) node;/** Member ID. */ uint32_t member_id;
@@ -66,7 +65,7 @@ struct rte_swx_table_selector_member { };/** List of group members. */ -TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member); +RTE_TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member);/** Group parameters. */ struct rte_swx_table_selector_group {
lib/vhost/iotlb.c +6 -5
@@ -32,7 +32,7 @@ vhost_user_iotlb_pending_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_pending_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -100,7 +100,8 @@ vhost_user_iotlb_pending_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { +RTE_TAILQ_FOREACH_SAFE (node, &vq->iotlb_pending_list, next, + temp_node) {if (node->iova < iova)continue ;if (node->iova >= iova + size)
@@ -121,7 +122,7 @@ vhost_user_iotlb_cache_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -141,7 +142,7 @@ vhost_user_iotlb_cache_random_evict(struct vhost_virtqueue *vq) entry_idx =rte_rand () % vq->iotlb_cache_nr; - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {if (!entry_idx) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node);
@@ -218,7 +219,7 @@ vhost_user_iotlb_cache_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {/* Sorted list */ if (unlikely (iova + size < node->iova))break ;
lib/vhost/rte_vdpa_dev.h +1 -1
@@ -71,7 +71,7 @@ struct rte_vdpa_dev_ops {* vdpa device structure includes device address and device operations. */ struct rte_vdpa_device { -TAILQ_ENTRY (rte_vdpa_device) next; +RTE_TAILQ_ENTRY (rte_vdpa_device) next;/** Generic device information */ struct rte_device *device;/** vdpa device operations */
lib/vhost/vdpa.c +1 -1
@@ -115,7 +115,7 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)int ret =-1 ;rte_spinlock_lock (&vdpa_device_list_lock); - TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) { + RTE_TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {if (dev != cur_dev)continue ;
Signature · 1 line
2.30.2
Re: [dpdk-dev] [PATCHv4] eal: remove sys/queue.h from public headers.
Quoted 22 lines · On Fri, 13 Aug 2021 01:02:50 +0000 William Tu <[email protected]> wrote:
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the windows build, DPDK uses a bundled copy, so building DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers error due to no such file.One solution is to installl the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functinoalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it withRTE_prefix. For Windows, we copy the definitions from <sys/queue.h> torte_os.hunder windows. Note that theseRTE_macros are compatible with <sys/queue.h>, only at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Quoted 4 lines
Additionally, the
TAILQ_FOREACH_SAFEis not part of <sys/queue.h>, the patch replaces it withRTE_TAILQ_FOREACH_SAFE.
With this patch, all the public headers no longer have "#include <sys/queue.h>" or "TAILQ_xxx" macros.
Please run a spell checker on the commit message if you resubmit.
Re: [dpdk-dev] [PATCHv4] eal: remove sys/queue.h from public headers.
Quoted 26 lines · Stephen Hemminger
Quoted 22 lines · On Fri, 13 Aug 2021 01:02:50 +0000 William Tu <[email protected]> wrote:
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the windows build, DPDK uses a bundled copy, so building DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers error due to no such file.One solution is to installl the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functinoalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it withRTE_prefix. For Windows, we copy the definitions from <sys/queue.h> torte_os.hunder windows. Note that theseRTE_macros are compatible with <sys/queue.h>, only at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Quoted 7 lines
Quoted 4 lines
Additionally, the
TAILQ_FOREACH_SAFEis not part of <sys/queue.h>, the patch replaces it withRTE_TAILQ_FOREACH_SAFE.
With this patch, all the public headers no longer have "#include <sys/queue.h>" or "TAILQ_xxx" macros.Please run a spell checker on the commit message if you resubmit.
OK, will do it, thanks!
William
PATCH v5 1/1 eal: remove sys/queue.h from public headers.
In reply to William TuCurrently there are some public headers that include 'sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.
One solution is to install the 'lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
The patch fixes it by removing the "#include <sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such as TAILQ_xxx, we replace it with RTE_ prefix. For Windows, we copy the definitions from <sys/queue.h> to rte_os.h under windows. Note that these RTE_ macros are compatible with <sys/queue.h>, only at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Additionally, the TAILQ_FOREACH_SAFE is not part of <sys/queue.h>, the patch replaces it with RTE_TAILQ_FOREACH_SAFE.
With this patch, all the public headers no longer have "#include <sys/queue.h>" or "TAILQ_xxx" macros.
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
---
v4-v5
* fix compile error due to drivers/net/ipn3ke/ipn3ke_flow.c:1234
* run spell check
--- drivers/bus/auxiliary/private.h | 1 + drivers/bus/auxiliary/rte_bus_auxiliary.h | 5 ++-- drivers/bus/dpaa/dpaa_bus.c | 4 +-- drivers/bus/fslmc/fslmc_bus.c | 4 +-- drivers/bus/fslmc/fslmc_vfio.c | 9 ++++--- drivers/bus/ifpga/rte_bus_ifpga.h | 8 +++--- drivers/bus/pci/pci_params.c | 2 ++ drivers/bus/pci/rte_bus_pci.h | 13 +++++---- drivers/bus/pci/windows/pci.c | 3 +++ drivers/bus/pci/windows/pci_netuio.c | 2 ++ drivers/bus/vdev/rte_bus_vdev.h | 7 +++-- drivers/bus/vdev/vdev.c | 3 ++- drivers/bus/vmbus/rte_bus_vmbus.h | 13 +++++---- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 2 +- drivers/net/bonding/rte_eth_bond_flow.c | 2 +- drivers/net/failsafe/failsafe_flow.c | 2 +- drivers/net/i40e/i40e_ethdev.c | 9 ++++--- drivers/net/i40e/i40e_ethdev.h | 1 + drivers/net/i40e/i40e_flow.c | 6 ++--- drivers/net/i40e/i40e_hash.c | 2 +- drivers/net/i40e/rte_pmd_i40e.c | 6 ++--- drivers/net/iavf/iavf_generic_flow.c | 14 +++++----- drivers/net/ice/ice_dcf_ethdev.c | 1 + drivers/net/ice/ice_ethdev.c | 4 +-- drivers/net/ice/ice_generic_flow.c | 14 +++++----- drivers/net/ipn3ke/ipn3ke_flow.c | 2 +- drivers/net/softnic/rte_eth_softnic_flow.c | 3 ++- drivers/net/softnic/rte_eth_softnic_swq.c | 2 +- drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 2 +- lib/bbdev/rte_bbdev.h | 2 +- lib/cryptodev/rte_cryptodev.h | 2 +- lib/cryptodev/rte_cryptodev_pmd.h | 2 +- lib/eal/common/eal_common_devargs.c | 6 +++-- lib/eal/common/eal_common_fbarray.c | 1 + lib/eal/common/eal_common_log.c | 1 + lib/eal/common/eal_common_memalloc.c | 1 + lib/eal/common/eal_common_options.c | 3 ++- lib/eal/common/eal_trace.h | 2 ++ lib/eal/freebsd/include/rte_os.h | 15 +++++++++++ lib/eal/include/rte_bus.h | 5 ++-- lib/eal/include/rte_class.h | 6 ++--- lib/eal/include/rte_dev.h | 5 ++-- lib/eal/include/rte_devargs.h | 3 +-- lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 15 +++++------ lib/eal/linux/include/rte_os.h | 15 +++++++++++ lib/eal/windows/eal_alarm.c | 1 + lib/eal/windows/include/rte_os.h | 31 ++++++++++++++++++++++ lib/efd/rte_efd.c | 2 +- lib/ethdev/rte_ethdev_core.h | 2 +- lib/hash/rte_fbk_hash.h | 1 - lib/hash/rte_thash.c | 2 ++ lib/ip_frag/rte_ip_frag.h | 4 +-- lib/mempool/rte_mempool.c | 2 +- lib/mempool/rte_mempool.h | 9 +++---- lib/pci/rte_pci.h | 1 - lib/ring/rte_ring_core.h | 1 - lib/table/rte_swx_table.h | 7 ++--- lib/table/rte_swx_table_selector.h | 5 ++-- lib/vhost/iotlb.c | 11 ++++---- lib/vhost/rte_vdpa_dev.h | 2 +- lib/vhost/vdpa.c | 2 +- 63 files changed, 194 insertions(+), 121 deletions(-)
drivers/bus/auxiliary/private.h +1 -0
@@ -7,6 +7,7 @@#include <stdbool.h> #include <stdio.h> +#include <sys/queue.h> #include "rte_bus_auxiliary.h"
drivers/bus/auxiliary/rte_bus_auxiliary.h +2 -3
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -113,7 +112,7 @@ typedef int (rte_auxiliary_dma_unmap_t)(struct rte_auxiliary_device *dev,* A structure describing an auxiliary device. */ struct rte_auxiliary_device { -TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ +RTE_TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ struct rte_device device;/**< Inherit core device */ char name[RTE_DEV_NAME_MAX_LEN +1 ];/**< ASCII device name */ struct rte_intr_handle intr_handle;/**< Interrupt handle */
@@ -124,7 +123,7 @@ struct rte_auxiliary_device {* A structure describing an auxiliary driver. */ struct rte_auxiliary_driver { -TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_auxiliary_bus *bus;/**< Auxiliary bus reference. */ rte_auxiliary_match_t *match;/**< Device match function. */
drivers/bus/dpaa/dpaa_bus.c +2 -2
@@ -105,7 +105,7 @@ dpaa_add_to_device_list(struct rte_dpaa_device *newdev)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { comp =compare_dpaa_devices (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
@@ -245,7 +245,7 @@ dpaa_clean_device_list(void)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) {TAILQ_REMOVE (&rte_dpaa_bus.device_list, dev, next);free (dev); dev =NULL ;
drivers/bus/fslmc/fslmc_bus.c +2 -2
@@ -45,7 +45,7 @@ cleanup_fslmc_device_list(void)struct rte_dpaa2_device *dev;struct rte_dpaa2_device *t_dev; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) {TAILQ_REMOVE (&rte_fslmc_bus.device_list, dev, next);free (dev); dev =NULL ;
@@ -82,7 +82,7 @@ insert_in_device_list(struct rte_dpaa2_device *newdev)struct rte_dpaa2_device *dev =NULL ;struct rte_dpaa2_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { comp =compare_dpaa2_devname (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
drivers/bus/fslmc/fslmc_vfio.c +6 -3
@@ -808,7 +808,8 @@ fslmc_vfio_process_group(void)bool is_dpmcp_in_blocklist = false, is_dpio_in_blocklist = false;int dpmcp_count =0 , dpio_count =0 , current_device; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { dpmcp_count++; if (dev->device.devargs &&
@@ -825,7 +826,8 @@ fslmc_vfio_process_group(void)/* Search the MCP as that should be initialized first. */ current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { current_device++; if (dev->device.devargs &&
@@ -872,7 +874,8 @@ fslmc_vfio_process_group(void) } current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_IO ) current_device++; if (dev->device.devargs &&
drivers/bus/ifpga/rte_bus_ifpga.h +4 -4
@@ -28,9 +28,9 @@ struct rte_afu_device;struct rte_afu_driver ;/** Double linked list of Intel FPGA AFU device. */ -TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device); +RTE_TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device);/** Double linked list of Intel FPGA AFU device drivers. */ -TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver); +RTE_TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver);#define IFPGA_BUS_BITSTREAM_PATH_MAX_LEN 256
@@ -71,7 +71,7 @@ struct rte_afu_shared {* A structure describing a AFU device. */ struct rte_afu_device { -TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ +RTE_TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ struct rte_device device;/**< Inherit core device */ struct rte_rawdev *rawdev;/**< Point Rawdev */ struct rte_afu_id id;/**< AFU id within FPGA. */
@@ -105,7 +105,7 @@ typedef int (afu_remove_t)(struct rte_afu_device *);* A structure describing a AFU device. */ struct rte_afu_driver { -TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
drivers/bus/pci/pci_params.c +2 -0
@@ -2,6 +2,8 @@* Copyright 2018 Gaëtan Rivet */ +#include <sys/queue.h> +#include <rte_bus.h> #include <rte_bus_pci.h> #include <rte_dev.h>
drivers/bus/pci/rte_bus_pci.h +6 -7
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -37,16 +36,16 @@ struct rte_pci_device;struct rte_pci_driver ;/** List of PCI devices */ -TAILQ_HEAD (rte_pci_device_list, rte_pci_device); +RTE_TAILQ_HEAD (rte_pci_device_list, rte_pci_device);/** List of PCI drivers */ -TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver); +RTE_TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver);/* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next)#define FOREACH_DRIVER_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next)struct rte_devargs ;
@@ -64,7 +63,7 @@ enum rte_pci_kernel_driver {* A structure describing a PCI device. */ struct rte_pci_device { -TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ +RTE_TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ struct rte_device device;/**< Inherit core device */ struct rte_pci_addr addr;/**< PCI location. */ struct rte_pci_id id;/**< PCI ID. */
@@ -160,7 +159,7 @@ typedef int (pci_dma_unmap_t)(struct rte_pci_device *dev, void *addr,* A structure describing a PCI driver. */ struct rte_pci_driver { -TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_pci_bus *bus;/**< PCI bus reference. */ rte_pci_probe_t *probe;/**< Device probe function. */
drivers/bus/pci/windows/pci.c +3 -0
@@ -1,6 +1,9 @@/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2020 Mellanox Technologies, Ltd */ + +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/pci/windows/pci_netuio.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2020 Intel Corporation. */ +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/vdev/rte_bus_vdev.h +3 -4
@@ -15,12 +15,11 @@extern "C" {#endif -#include <sys/queue.h> #include <rte_dev.h> #include <rte_devargs.h> struct rte_vdev_device { -TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ +RTE_TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ struct rte_device device;/**< Inherit core device */ };
@@ -53,7 +52,7 @@ rte_vdev_device_args(const struct rte_vdev_device *dev) }/** Double linked list of virtual device drivers. */ -TAILQ_HEAD (vdev_driver_list, rte_vdev_driver); +RTE_TAILQ_HEAD (vdev_driver_list, rte_vdev_driver);/** * Probe function called for each virtual device driver once.
@@ -107,7 +106,7 @@ typedef int (rte_vdev_dma_unmap_t)(struct rte_vdev_device *dev, void *addr,* A virtual device driver abstraction. */ struct rte_vdev_driver { -TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherited general driver. */ rte_vdev_probe_t *probe;/**< Virtual device probe function. */ rte_vdev_remove_t *remove;/**< Virtual device remove function. */
drivers/bus/vdev/vdev.c +2 -1
@@ -100,7 +100,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)struct vdev_custom_scan *custom_scan, *tmp_scan;rte_spinlock_lock (&vdev_custom_scan_lock); - TAILQ_FOREACH_SAFE(custom_scan, &vdev_custom_scans, next, tmp_scan) { +RTE_TAILQ_FOREACH_SAFE (custom_scan, &vdev_custom_scans, next, + tmp_scan) {if (custom_scan->callback != callback || (custom_scan->user_arg != (void *)-1 && custom_scan->user_arg != user_arg))
drivers/bus/vmbus/rte_bus_vmbus.h +6 -7
@@ -20,7 +20,6 @@ extern "C" {#include <limits.h> #include <stdbool.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -38,15 +37,15 @@ struct rte_vmbus_bus;struct vmbus_channel ;struct vmbus_mon_page ; -TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); -TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver); +RTE_TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); +RTE_TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver);/* VMBus iterators */ #define FOREACH_DEVICE_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next)#define FOREACH_DRIVER_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next)/** Maximum number of VMBUS resources. */ enum hv_uio_map {
@@ -62,7 +61,7 @@ enum hv_uio_map {* A structure describing a VMBUS device. */ struct rte_vmbus_device { -TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ +RTE_TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ const struct rte_vmbus_driver *driver;/**< Associated driver */ struct rte_device device;/**< Inherit core device */ rte_uuid_t device_id;/**< VMBUS device id */
@@ -93,7 +92,7 @@ typedef int (vmbus_remove_t)(struct rte_vmbus_device *);* A structure describing a VMBUS driver. */ struct rte_vmbus_driver { -TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ struct rte_driver driver;struct rte_vmbus_bus *bus;/**< VM bus reference. */ vmbus_probe_t *probe;/**< Device Probe function. */
drivers/net/bnxt/tf_ulp/bnxt_ulp.c +1 -1
@@ -2018,7 +2018,7 @@ bnxt_ulp_cntxt_list_del(struct bnxt_ulp_context *ulp_ctx)struct ulp_context_list_entry *entry, *temp;rte_spinlock_lock (&bnxt_ulp_ctxt_lock); - TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) {if (entry->ulp_ctx == ulp_ctx) {TAILQ_REMOVE (&ulp_cntx_list, entry, next);rte_free (entry);
drivers/net/bonding/rte_eth_bond_flow.c +1 -1
@@ -157,7 +157,7 @@ bond_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *err)/* Destroy all bond flows from its slaves instead of flushing them to * keep the LACP flow or any other external flows. */ - TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { lret =bond_flow_destroy (dev, flow, err);if (unlikely (lret !=0 )) ret = lret;
drivers/net/failsafe/failsafe_flow.c +1 -1
@@ -180,7 +180,7 @@ fs_flow_flush(struct rte_eth_dev *dev,return ret; } } - TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) {TAILQ_REMOVE (&PRIV (dev)->flow_list, flow, next);fs_flow_release (&flow); }
drivers/net/i40e/i40e_ethdev.c +5 -4
@@ -5436,7 +5436,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* VSI has child to attach, release child first */ if (vsi->veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) { + RTE_TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5444,7 +5444,8 @@ i40e_vsi_release(struct i40e_vsi *vsi) }if (vsi->floating_veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->floating_veb->head, list, temp) { +RTE_TAILQ_FOREACH_SAFE (vsi_list, &vsi->floating_veb->head, + list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5452,7 +5453,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* Remove all macvlan filters of the VSI */ i40e_vsi_remove_all_macvlan_filter (vsi); - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)rte_free (f); if (vsi->type != I40E_VSI_MAIN &&
@@ -6055,7 +6056,7 @@ i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on) i =0 ;/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { mac_filter[i] = f->mac_info; ret =i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr);if (ret) {
drivers/net/i40e/i40e_ethdev.h +1 -0
@@ -6,6 +6,7 @@#define _I40E_ETHDEV_H_#include <stdint.h> +#include <sys/queue.h> #include <rte_time.h> #include <rte_kvargs.h>
drivers/net/i40e/i40e_flow.c +3 -3
@@ -4917,7 +4917,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf) }/* Delete FDIR flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_FDIR ) {TAILQ_REMOVE (&pf->flow_list, flow, node); }
@@ -4972,7 +4972,7 @@ i40e_flow_flush_ethertype_filter(struct i40e_pf *pf) }/* Delete ethertype flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_ETHERTYPE ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
@@ -5000,7 +5000,7 @@ i40e_flow_flush_tunnel_filter(struct i40e_pf *pf) }/* Delete tunnel flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_TUNNEL ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
drivers/net/i40e/i40e_hash.c +1 -1
@@ -1366,7 +1366,7 @@ i40e_hash_filter_flush(struct i40e_pf *pf) {struct rte_flow *flow, *next; - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) {if (flow->filter_type !=RTE_ETH_FILTER_HASH )continue ;
drivers/net/i40e/rte_pmd_i40e.c +3 -3
@@ -216,7 +216,7 @@ i40e_vsi_rm_mac_filter(struct i40e_vsi *vsi)void *temp;/* remove all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { vlan_num = vsi->vlan_num; filter_type = f->mac_info.filter_type; if (filter_type == I40E_MACVLAN_PERFECT_MATCH ||
@@ -274,7 +274,7 @@ i40e_vsi_restore_mac_filter(struct i40e_vsi *vsi)void *temp;/* restore all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) {if (f->mac_info.filter_type ==I40E_MACVLAN_PERFECT_MATCH || f->mac_info.filter_type ==I40E_MACVLAN_HASH_MATCH ) {/**
@@ -563,7 +563,7 @@ rte_pmd_i40e_set_vf_mac_addr(uint16_t port, uint16_t vf_id,rte_ether_addr_copy (mac_addr, &vf->mac_addr);/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)if (i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr) !=I40E_SUCCESS )PMD_DRV_LOG (WARNING ,"Delete MAC failed" );
drivers/net/iavf/iavf_generic_flow.c +7 -7
@@ -1637,7 +1637,7 @@ iavf_flow_init(struct iavf_adapter *ad)TAILQ_INIT (&vf->dist_parser_list);rte_spinlock_init (&vf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1663,7 +1663,7 @@ iavf_flow_uninit(struct iavf_adapter *ad)struct iavf_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1733,7 +1733,7 @@ iavf_unregister_parser(struct iavf_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -1917,7 +1917,7 @@ iavf_parse_engine_create(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -1946,7 +1946,7 @@ iavf_parse_engine_validate(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2089,7 +2089,7 @@ iavf_flow_is_valid(struct rte_flow *flow)void *temp;if (flow && flow->engine) { - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine == flow->engine)return true; }
@@ -2142,7 +2142,7 @@ iavf_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { ret =iavf_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
drivers/net/ice/ice_dcf_ethdev.c +1 -0
@@ -4,6 +4,7 @@#include <errno.h> #include <stdbool.h> +#include <sys/queue.h> #include <sys/types.h> #include <unistd.h>
drivers/net/ice/ice_ethdev.c +2 -2
@@ -1104,7 +1104,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (!vsi || !vsi->mac_num)return -EINVAL ; - TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { ret =ice_remove_mac_filter (vsi, &m_f->mac_info.mac_addr);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
@@ -1115,7 +1115,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (vsi->vlan_num ==0 )return 0 ; - TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { ret =ice_remove_vlan_filter (vsi, &v_f->vlan_info.vlan);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
drivers/net/ice/ice_generic_flow.c +7 -7
@@ -1820,7 +1820,7 @@ ice_flow_init(struct ice_adapter *ad)TAILQ_INIT (&pf->dist_parser_list);rte_spinlock_init (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1846,7 +1846,7 @@ ice_flow_uninit(struct ice_adapter *ad)struct ice_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1946,7 +1946,7 @@ ice_unregister_parser(struct ice_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -2272,7 +2272,7 @@ ice_parse_engine_create(struct ice_adapter *ad,void *meta =NULL ;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {int ret; if (parser_node->parser->parse_pattern_action(ad,
@@ -2305,7 +2305,7 @@ ice_parse_engine_validate(struct ice_adapter *ad,struct ice_flow_parser_node *parser_node;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2477,7 +2477,7 @@ ice_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { ret =ice_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
@@ -2541,7 +2541,7 @@ ice_flow_redirect(struct ice_adapter *ad,rte_spinlock_lock (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {if (!p_flow->engine->redirect)continue ; ret = p_flow->engine->redirect (ad, p_flow, rd);
drivers/net/ipn3ke/ipn3ke_flow.c +1 -1
@@ -1231,7 +1231,7 @@ ipn3ke_flow_flush(struct rte_eth_dev *dev,struct ipn3ke_hw *hw =IPN3KE_DEV_PRIVATE_TO_HW (dev);struct rte_flow *flow, *temp; - TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) {TAILQ_REMOVE (&hw->flow_list, flow, next);rte_free (flow); }
drivers/net/softnic/rte_eth_softnic_flow.c +2 -1
@@ -2207,7 +2207,8 @@ pmd_flow_flush(struct rte_eth_dev *dev,void *temp;int status; - TAILQ_FOREACH_SAFE(flow, &table->flows, node, temp) { +RTE_TAILQ_FOREACH_SAFE (flow, &table->flows, node, + temp) {/* Rule delete. */ status = softnic_pipeline_table_rule_delete (softnic,
drivers/net/softnic/rte_eth_softnic_swq.c +1 -1
@@ -39,7 +39,7 @@ softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p) {struct softnic_swq *swq, *tswq; - TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) { + RTE_TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) {if ((strncmp (swq->name,"RXQ" ,strlen ("RXQ" )) ==0 ) || (strncmp (swq->name,"TXQ" ,strlen ("TXQ" )) ==0 ))continue ;
drivers/raw/dpaa2_qdma/dpaa2_qdma.c +1 -1
@@ -1606,7 +1606,7 @@ remove_hw_queues_from_list(struct dpaa2_dpdmai_dev *dpdmai_dev)DPAA2_QDMA_FUNC_TRACE (); - TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) { + RTE_TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) {if (queue->dpdmai_dev == dpdmai_dev) {TAILQ_REMOVE (&qdma_queue_list, queue, next);rte_free (queue);
lib/bbdev/rte_bbdev.h +1 -1
@@ -434,7 +434,7 @@ struct rte_bbdev_callback;struct rte_intr_handle ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback); +RTE_TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback);/** * @internal The data structure associated with a device. Drivers can access
lib/cryptodev/rte_cryptodev.h +1 -1
@@ -879,7 +879,7 @@ typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,struct rte_cryptodev_callback ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback); +RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback);/** * Structure used to hold information about the callbacks to be called for a
lib/cryptodev/rte_cryptodev_pmd.h +1 -1
@@ -66,7 +66,7 @@ struct rte_cryptodev_global {/* Cryptodev driver, containing the driver ID */ struct cryptodev_driver { -TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ const struct rte_driver *driver;uint8_t id; };
lib/eal/common/eal_common_devargs.c +4 -2
@@ -9,6 +9,7 @@#include <stdio.h> #include <string.h> #include <stdarg.h> +#include <sys/queue.h> #include <rte_bus.h> #include <rte_class.h>
@@ -18,6 +19,7 @@#include <rte_errno.h> #include <rte_kvargs.h> #include <rte_log.h> +#include <rte_os.h> #include <rte_tailq.h> #include "eal_private.h"
@@ -291,7 +293,7 @@ rte_devargs_insert(struct rte_devargs **da)if (*da ==NULL || (*da)->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) {if (listed_da == *da)/* devargs already in the list */ return 0 ;
@@ -358,7 +360,7 @@ rte_devargs_remove(struct rte_devargs *devargs)if (devargs ==NULL || devargs->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {if (strcmp (d->bus->name, devargs->bus->name) ==0 &&strcmp (d->name, devargs->name) ==0 ) {TAILQ_REMOVE (&devargs_list, d, next);
lib/eal/common/eal_common_fbarray.c +1 -0
@@ -9,6 +9,7 @@#include <errno.h> #include <string.h> #include <unistd.h> +#include <sys/queue.h> #include <rte_common.h> #include <rte_eal_paging.h>
lib/eal/common/eal_common_log.c +1 -0
@@ -10,6 +10,7 @@#include <errno.h> #include <regex.h> #include <fnmatch.h> +#include <sys/queue.h> #include <rte_eal.h> #include <rte_log.h>
lib/eal/common/eal_common_memalloc.c +1 -0
@@ -3,6 +3,7 @@*/ #include <string.h> +#include <sys/queue.h> #include <rte_errno.h> #include <rte_lcore.h>
lib/eal/common/eal_common_options.c +2 -1
@@ -6,6 +6,7 @@#include <stdlib.h> #include <unistd.h> #include <string.h> +#include <sys/queue.h> #ifndef RTE_EXEC_ENV_WINDOWS #include <syslog.h> #endif
@@ -283,7 +284,7 @@ eal_option_device_parse(void)void *tmp;int ret =0 ; - TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) {if (ret ==0 ) { ret =rte_devargs_add (devopt->type, devopt->arg);if (ret)
lib/eal/common/eal_trace.h +2 -0
@@ -5,6 +5,8 @@#ifndef __EAL_TRACE_H#define __EAL_TRACE_H +#include <sys/queue.h> +#include <rte_cycles.h> #include <rte_log.h> #include <rte_malloc.h>
lib/eal/freebsd/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +2 -3
@@ -19,13 +19,12 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_log.h> #include <rte_dev.h> /** Double linked list of buses */ -TAILQ_HEAD (rte_bus_list, rte_bus); +RTE_TAILQ_HEAD (rte_bus_list, rte_bus);/**
@@ -250,7 +249,7 @@ typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);* A structure describing a generic bus. */ struct rte_bus { -TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ +RTE_TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ const char *name;/**< Name of the bus */ rte_bus_scan_t scan;/**< Scan for devices attached to bus */ rte_bus_probe_t probe;/**< Probe devices on bus */
lib/eal/include/rte_class.h +2 -4
@@ -22,18 +22,16 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */ -TAILQ_HEAD (rte_class_list, rte_class); +RTE_TAILQ_HEAD (rte_class_list, rte_class);/** * A structure describing a generic device class. */ struct rte_class { -TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ +RTE_TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ const char *name;/**< Name of the class */ rte_dev_iterate_t dev_iterate;/**< Device iterator. */ };
lib/eal/include/rte_dev.h +2 -3
@@ -18,7 +18,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_compat.h>
@@ -75,7 +74,7 @@ struct rte_mem_resource {* A structure describing a device driver. */ struct rte_driver { -TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ const char *name;/**< Driver name. */ const char *alias;/**< Driver alias. */ };
@@ -90,7 +89,7 @@ struct rte_driver {* A structure describing a generic device. */ struct rte_device { -TAILQ_ENTRY (rte_device) next;/**< Next device */ +RTE_TAILQ_ENTRY (rte_device) next;/**< Next device */ const char *name;/**< Device name */ const struct rte_driver *driver;/**< Driver assigned after probing */ const struct rte_bus *bus;/**< Bus handle assigned on scan */
lib/eal/include/rte_devargs.h +1 -2
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
@@ -76,7 +75,7 @@ enum rte_devtype {*/ struct rte_devargs {/** Next in list. */ -TAILQ_ENTRY (rte_devargs) next; +RTE_TAILQ_ENTRY (rte_devargs) next;/** Type of device. */ enum rte_devtype type;/** Device policy. */
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +7 -8
@@ -15,17 +15,16 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { -TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ +RTE_TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ void *data;/**< Pointer to the data referenced by this tailq entry */ };/** dummy */ -TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry); +RTE_TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry);#define RTE_TAILQ_NAMESIZE 32
@@ -48,7 +47,7 @@ struct rte_tailq_elem {* rte_eal_tailqs_init() */ struct rte_tailq_head *head; -TAILQ_ENTRY (rte_tailq_elem) next; +RTE_TAILQ_ENTRY (rte_tailq_elem) next;const char name[RTE_TAILQ_NAMESIZE ]; };
@@ -126,10 +125,10 @@ RTE_INIT(tailqinitfn_ ##t) \ }/* This macro permits both remove and free var within the loop safely.*/ -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif
lib/eal/linux/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/eal_alarm.c +1 -0
@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h>
lib/eal/windows/include/rte_os.h +31 -0
@@ -18,6 +18,37 @@ extern "C" { #endif +#define RTE_TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} +#define RTE_TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#define RTE_TAILQ_FOREACH(var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST(head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} +#define RTE_STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + + /* cpu_set macros implementation */ #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2)
lib/efd/rte_efd.c +1 -1
@@ -759,7 +759,7 @@ rte_efd_free(struct rte_efd_table *table) efd_list =RTE_TAILQ_CAST (rte_efd_tailq.head, rte_efd_list);rte_mcfg_tailq_write_lock (); - TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(te, efd_list, next, temp) {if (te->data == (void *) table) {TAILQ_REMOVE (efd_list, te, next);rte_free (te);
lib/ethdev/rte_ethdev_core.h +1 -1
@@ -21,7 +21,7 @@struct rte_eth_dev_callback ;/** @internal Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback); +RTE_TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback);struct rte_eth_dev ;
lib/hash/rte_fbk_hash.h +0 -1
@@ -17,7 +17,6 @@#include <stdint.h> #include <errno.h> -#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/hash/rte_thash.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2021 Intel Corporation */ +#include <sys/queue.h> +#include <rte_thash.h> #include <rte_tailq.h> #include <rte_random.h>
lib/ip_frag/rte_ip_frag.h +2 -2
@@ -62,7 +62,7 @@ struct ip_frag_key {* First two entries in the frags[] array are for the last and first fragments. */ struct ip_frag_pkt { -TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ +RTE_TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ struct ip_frag_key key;/**< fragmentation key */ uint64_t start;/**< creation timestamp */ uint32_t total_size;/**< expected reassembled size */
@@ -83,7 +83,7 @@ struct rte_ip_frag_death_row {/**< mbufs to be freed */ }; -TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ +RTE_TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ /** fragmentation table statistics */ struct ip_frag_tbl_stat {
lib/mempool/rte_mempool.c +1 -1
@@ -1337,7 +1337,7 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),rte_mcfg_mempool_read_lock (); - TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { + RTE_TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { (*func)((struct rte_mempool *) te->data, arg); }
lib/mempool/rte_mempool.h +4 -5
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
@@ -141,7 +140,7 @@ struct rte_mempool_objsz {* double-frees. */ struct rte_mempool_objhdr { -STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the object. */ rte_iova_t iova;/**< IO address of the object. */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -152,7 +151,7 @@ struct rte_mempool_objhdr {/** * A list of object headers type */ -STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr); +RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr);#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -171,7 +170,7 @@ struct rte_mempool_objtlr {/** * A list of memory where objects are stored */ -STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr); +RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr);/** * Callback used to free a memory chunk
@@ -186,7 +185,7 @@ typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,* and physically contiguous. */ struct rte_mempool_memhdr { -STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the chunk */ void *addr;/**< Virtual address of the chunk */ rte_iova_t iova;/**< IO address of the chunk */
lib/pci/rte_pci.h +0 -1
@@ -18,7 +18,6 @@ extern "C" {#include <stdio.h> #include <limits.h> -#include <sys/queue.h> #include <inttypes.h> #include <sys/types.h>
lib/ring/rte_ring_core.h +0 -1
@@ -26,7 +26,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> #include <string.h> -#include <sys/queue.h> #include <errno.h> #include <rte_common.h> #include <rte_config.h>
lib/table/rte_swx_table.h +4 -3
@@ -16,7 +16,8 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> + +#include <rte_os.h> /** Match type. */ enum rte_swx_table_match_type {
@@ -68,7 +69,7 @@ struct rte_swx_table_entry {/** Used to facilitate the membership of this table entry to a * linked list. */ -TAILQ_ENTRY (rte_swx_table_entry) node; +RTE_TAILQ_ENTRY (rte_swx_table_entry) node;/** Key value for the current entry. Array of *key_size* bytes or NULL * if the *key_size* for the current table is 0.
@@ -111,7 +112,7 @@ struct rte_swx_table_entry { };/** List of table entries. */ -TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry); +RTE_TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry);/** * Table memory footprint get
lib/table/rte_swx_table_selector.h +2 -3
@@ -16,7 +16,6 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> #include <rte_compat.h>
@@ -56,7 +55,7 @@ struct rte_swx_table_selector_params {/** Group member parameters. */ struct rte_swx_table_selector_member {/** Linked list connectivity. */ -TAILQ_ENTRY (rte_swx_table_selector_member) node; +RTE_TAILQ_ENTRY (rte_swx_table_selector_member) node;/** Member ID. */ uint32_t member_id;
@@ -66,7 +65,7 @@ struct rte_swx_table_selector_member { };/** List of group members. */ -TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member); +RTE_TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member);/** Group parameters. */ struct rte_swx_table_selector_group {
lib/vhost/iotlb.c +6 -5
@@ -32,7 +32,7 @@ vhost_user_iotlb_pending_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_pending_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -100,7 +100,8 @@ vhost_user_iotlb_pending_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { +RTE_TAILQ_FOREACH_SAFE (node, &vq->iotlb_pending_list, next, + temp_node) {if (node->iova < iova)continue ;if (node->iova >= iova + size)
@@ -121,7 +122,7 @@ vhost_user_iotlb_cache_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -141,7 +142,7 @@ vhost_user_iotlb_cache_random_evict(struct vhost_virtqueue *vq) entry_idx =rte_rand () % vq->iotlb_cache_nr; - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {if (!entry_idx) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node);
@@ -218,7 +219,7 @@ vhost_user_iotlb_cache_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {/* Sorted list */ if (unlikely (iova + size < node->iova))break ;
lib/vhost/rte_vdpa_dev.h +1 -1
@@ -71,7 +71,7 @@ struct rte_vdpa_dev_ops {* vdpa device structure includes device address and device operations. */ struct rte_vdpa_device { -TAILQ_ENTRY (rte_vdpa_device) next; +RTE_TAILQ_ENTRY (rte_vdpa_device) next;/** Generic device information */ struct rte_device *device;/** vdpa device operations */
lib/vhost/vdpa.c +1 -1
@@ -115,7 +115,7 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)int ret =-1 ;rte_spinlock_lock (&vdpa_device_list_lock); - TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) { + RTE_TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {if (dev != cur_dev)continue ;
Signature · 1 line
2.30.2
Re: [dpdk-dev] [PATCHv5] eal: remove sys/queue.h from public headers.
2021-08-13 03:36 (UTC+0000), William Tu:
Quoted 4 lines
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the windows build, DPDK uses a
Typo: "Windows".
Quoted 9 lines
bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include '
sys/queue.h', on Windows, it triggers an error due to no such file.One solution is to install the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
Quoted 4 lines
The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it withRTE_prefix.
"replace it by _the ones_ with RTE_ prefix"?
Quoted 2 lines
For Windows, we copy the definitions from <
sys/queue.h> torte_os.hunder windows. Note that theseRTE_macros are compatible with
"under windows" -> "in Windows EAL"
Quoted 1 line
<
sys/queue.h>, only at the level of API (to use with <sys/queue.h>
"only" -> "both"
Quoted 7 lines
macros in C files) and ABI (to avoid breaking it).
Additionally, the
TAILQ_FOREACH_SAFEis not part of <sys/queue.h>, the patch replaces it withRTE_TAILQ_FOREACH_SAFE.With this patch, all the public headers no longer have "#include <
sys/queue.h>" or "TAILQ_xxx" macros.
This is a repetition of what is stated in the previous paragraph.
Quoted 10 lines
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
v4-v5
* fix compile error due todrivers/net/ipn3ke/ipn3ke_flow.c:1234
* run spell check
1. Please register at http://patchwork.dpdk.org with the email used for the patches and update the state of all previous versions to "Superseded". It is not currently done automatically and only you and a few maintainers can change the state.
Patchwork also shows CI build failures with v5, they need to be fixed.
2. Are you using git format-patch -v5 ... to create patches? The subject of your patches is missing a space ("PATCH v5" vs "PATCHv5"). Not sure if tools like patchwork will properly process it.
[...]
drivers/bus/ifpga/rte_bus_ifpga.h typedef int (afu_remove_t)(struct rte_afu_device *); · line 111
Quoted 6 lines
struct
rte_afu_driver{drivers/bus/ifpga/rte_bus_ifpga.h +1
-1-TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
Re: loss of comment alignment here and in other places.
Firstly, it's definitely not a big deal. Current patch is good because it only changes relevant lines. Re-aligning all the comments would be worse IMO. However, in cases like this, when keeping alignment doesn't require changing neighboring lines, it could be kept. Just a nit.
[...]
lib/eal/include/rte_tailq.h RTE_INIT(tailqinitfn_ ##t) \ · line 133
Quoted 11 lines
/* This macro permits both remove and free var within the loop safely.*/
lib/eal/include/rte_tailq.h +4
-4-#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif
Why duplicate this in rte_os.h (documentation lost, BTW) and add #ifdef? RTE_TAILQ_FOREACH_SAFE is not needed in headers, it can be left here.
Quoted 6 lines
lib/eal/linux/include/rte_os.h +0
-0
lib/eal/linux/include/rte_os.h line 20
Quoted 10 lines
lib/eal/linux/include/rte_os.h +7
-0@@ -11,6 +11,21 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \
Stray TAB here and in rte_os.h for other platforms.
Re: [dpdk-dev] [PATCHv5] eal: remove sys/queue.h from public headers.
Hi Dmitry,
Thanks for your feedback!
Quoted 18 lines · Dmitry Kozlyuk
2021-08-13 03:36 (UTC+0000), William Tu:
Quoted 4 lines
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the windows build, DPDK uses aTypo: "Windows".
Quoted 9 lines
bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include '
sys/queue.h', on Windows, it triggers an error due to no such file.One solution is to install the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
Quoted 6 lines
Quoted 4 lines
The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it withRTE_prefix."replace it by
_theones_withRTE_prefix"?
OK
[...]
Quoted 4 lines
1. Please register at http://patchwork.dpdk.org with the email used for the patches and update the state of all previous versions to "Superseded". It is not currently done automatically and only you and a few maintainers can change the state.
Done
Quoted 4 lines
Patchwork also shows CI build failures with v5, they need to be fixed.
2. Are you using
git format-patch -v5 ...to create patches?
OK, will use it.
Quoted 18 lines
The subject of your patches is missing a space ("PATCH v5" vs "PATCHv5"). Not sure if tools like patchwork will properly process it.
[...]
drivers/bus/ifpga/rte_bus_ifpga.h typedef int (afu_remove_t)(struct rte_afu_device *); · line 111
Quoted 6 lines
struct
rte_afu_driver{drivers/bus/ifpga/rte_bus_ifpga.h +1
-1-TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */ Re: loss of comment alignment here and in other places.
Firstly, it's definitely not a big deal. Current patch is good because it only changes relevant lines. Re-aligning all the comments would be worse IMO. However, in cases like this, when keeping alignment doesn't require changing neighboring lines, it could be kept. Just a nit.[...]
Quoted 14 lines
lib/eal/include/rte_tailq.h RTE_INIT(tailqinitfn_ ##t) \ · line 133
Quoted 11 lines
/* This macro permits both remove and free var within the loop safely.*/
lib/eal/include/rte_tailq.h +4
-4-#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif Why duplicate this in
rte_os.h(documentation lost, BTW) and add #ifdef?RTE_TAILQ_FOREACH_SAFEis not needed in headers, it can be left here.
OK, will fix it.
Quoted 9 lines
Quoted 9 lines
lib/eal/linux/include/rte_os.h +0
-0@@ -11,6 +11,21 @@*/
Quoted 10 lines
lib/eal/linux/include/rte_os.h line 20
Quoted 8 lines
lib/eal/linux/include/rte_os.h +7
-0#include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \Stray TAB here and in
rte_os.hfor other platforms.
Thanks, will fix it.
PATCH v6 1/1 eal: remove sys/queue.h from public headers.
In reply to William TuCurrently there are some public headers that include 'sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.
One solution is to install the 'lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
The patch fixes it by removing the "#include <sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such as TAILQ_xxx, we replace it by the ones with RTE_ prefix. For Windows, we copy the definitions from <sys/queue.h> to rte_os.h in Windows EAL. Note that these RTE_ macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Additionally, the TAILQ_FOREACH_SAFE is not part of <sys/queue.h>, the patch replaces it with RTE_TAILQ_FOREACH_SAFE.
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
---
v5-v6:
* fix tab/indent issue, fix type and spelling
* fix duplicate RTE_TAILQ_FOREACH_SAFE
* fix build error due to drivers/net/mlx5/mlx5_flow_meter.c
--- drivers/bus/auxiliary/private.h | 1 + drivers/bus/auxiliary/rte_bus_auxiliary.h | 5 ++-- drivers/bus/dpaa/dpaa_bus.c | 4 +-- drivers/bus/fslmc/fslmc_bus.c | 4 +-- drivers/bus/fslmc/fslmc_vfio.c | 9 ++++--- drivers/bus/ifpga/rte_bus_ifpga.h | 8 +++--- drivers/bus/pci/pci_params.c | 2 ++ drivers/bus/pci/rte_bus_pci.h | 13 +++++---- drivers/bus/pci/windows/pci.c | 3 +++ drivers/bus/pci/windows/pci_netuio.c | 2 ++ drivers/bus/vdev/rte_bus_vdev.h | 7 +++-- drivers/bus/vdev/vdev.c | 3 ++- drivers/bus/vmbus/rte_bus_vmbus.h | 13 +++++---- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 2 +- drivers/net/bonding/rte_eth_bond_flow.c | 2 +- drivers/net/failsafe/failsafe_flow.c | 2 +- drivers/net/i40e/i40e_ethdev.c | 9 ++++--- drivers/net/i40e/i40e_ethdev.h | 1 + drivers/net/i40e/i40e_flow.c | 6 ++--- drivers/net/i40e/i40e_hash.c | 2 +- drivers/net/i40e/rte_pmd_i40e.c | 6 ++--- drivers/net/iavf/iavf_generic_flow.c | 14 +++++----- drivers/net/ice/ice_dcf_ethdev.c | 1 + drivers/net/ice/ice_ethdev.c | 4 +-- drivers/net/ice/ice_generic_flow.c | 14 +++++----- drivers/net/ipn3ke/ipn3ke_flow.c | 2 +- drivers/net/mlx5/mlx5_flow_dv.c | 2 +- drivers/net/mlx5/mlx5_flow_meter.c | 2 +- drivers/net/softnic/rte_eth_softnic_flow.c | 3 ++- drivers/net/softnic/rte_eth_softnic_swq.c | 2 +- drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 2 +- lib/bbdev/rte_bbdev.h | 2 +- lib/cryptodev/rte_cryptodev.h | 2 +- lib/cryptodev/rte_cryptodev_pmd.h | 2 +- lib/eal/common/eal_common_devargs.c | 6 +++-- lib/eal/common/eal_common_fbarray.c | 1 + lib/eal/common/eal_common_log.c | 1 + lib/eal/common/eal_common_memalloc.c | 1 + lib/eal/common/eal_common_options.c | 3 ++- lib/eal/common/eal_trace.h | 2 ++ lib/eal/freebsd/include/rte_os.h | 15 +++++++++++ lib/eal/include/rte_bus.h | 5 ++-- lib/eal/include/rte_class.h | 6 ++--- lib/eal/include/rte_dev.h | 5 ++-- lib/eal/include/rte_devargs.h | 3 +-- lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 15 +++-------- lib/eal/linux/include/rte_os.h | 15 +++++++++++ lib/eal/windows/eal_alarm.c | 1 + lib/eal/windows/include/rte_os.h | 31 ++++++++++++++++++++++ lib/efd/rte_efd.c | 2 +- lib/ethdev/rte_ethdev_core.h | 2 +- lib/hash/rte_fbk_hash.h | 1 - lib/hash/rte_thash.c | 2 ++ lib/ip_frag/rte_ip_frag.h | 4 +-- lib/mempool/rte_mempool.c | 2 +- lib/mempool/rte_mempool.h | 9 +++---- lib/pci/rte_pci.h | 1 - lib/ring/rte_ring_core.h | 1 - lib/table/rte_swx_table.h | 7 ++--- lib/table/rte_swx_table_selector.h | 5 ++-- lib/vhost/iotlb.c | 11 ++++---- lib/vhost/rte_vdpa_dev.h | 2 +- lib/vhost/vdpa.c | 2 +- 65 files changed, 192 insertions(+), 127 deletions(-)
drivers/bus/auxiliary/private.h +1 -0
@@ -7,6 +7,7 @@#include <stdbool.h> #include <stdio.h> +#include <sys/queue.h> #include "rte_bus_auxiliary.h"
drivers/bus/auxiliary/rte_bus_auxiliary.h +2 -3
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -113,7 +112,7 @@ typedef int (rte_auxiliary_dma_unmap_t)(struct rte_auxiliary_device *dev,* A structure describing an auxiliary device. */ struct rte_auxiliary_device { -TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ +RTE_TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ struct rte_device device;/**< Inherit core device */ char name[RTE_DEV_NAME_MAX_LEN +1 ];/**< ASCII device name */ struct rte_intr_handle intr_handle;/**< Interrupt handle */
@@ -124,7 +123,7 @@ struct rte_auxiliary_device {* A structure describing an auxiliary driver. */ struct rte_auxiliary_driver { -TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_auxiliary_bus *bus;/**< Auxiliary bus reference. */ rte_auxiliary_match_t *match;/**< Device match function. */
drivers/bus/dpaa/dpaa_bus.c +2 -2
@@ -105,7 +105,7 @@ dpaa_add_to_device_list(struct rte_dpaa_device *newdev)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { comp =compare_dpaa_devices (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
@@ -245,7 +245,7 @@ dpaa_clean_device_list(void)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) {TAILQ_REMOVE (&rte_dpaa_bus.device_list, dev, next);free (dev); dev =NULL ;
drivers/bus/fslmc/fslmc_bus.c +2 -2
@@ -45,7 +45,7 @@ cleanup_fslmc_device_list(void)struct rte_dpaa2_device *dev;struct rte_dpaa2_device *t_dev; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) {TAILQ_REMOVE (&rte_fslmc_bus.device_list, dev, next);free (dev); dev =NULL ;
@@ -82,7 +82,7 @@ insert_in_device_list(struct rte_dpaa2_device *newdev)struct rte_dpaa2_device *dev =NULL ;struct rte_dpaa2_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { comp =compare_dpaa2_devname (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
drivers/bus/fslmc/fslmc_vfio.c +6 -3
@@ -808,7 +808,8 @@ fslmc_vfio_process_group(void)bool is_dpmcp_in_blocklist = false, is_dpio_in_blocklist = false;int dpmcp_count =0 , dpio_count =0 , current_device; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { dpmcp_count++; if (dev->device.devargs &&
@@ -825,7 +826,8 @@ fslmc_vfio_process_group(void)/* Search the MCP as that should be initialized first. */ current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { current_device++; if (dev->device.devargs &&
@@ -872,7 +874,8 @@ fslmc_vfio_process_group(void) } current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_IO ) current_device++; if (dev->device.devargs &&
drivers/bus/ifpga/rte_bus_ifpga.h +4 -4
@@ -28,9 +28,9 @@ struct rte_afu_device;struct rte_afu_driver ;/** Double linked list of Intel FPGA AFU device. */ -TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device); +RTE_TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device);/** Double linked list of Intel FPGA AFU device drivers. */ -TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver); +RTE_TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver);#define IFPGA_BUS_BITSTREAM_PATH_MAX_LEN 256
@@ -71,7 +71,7 @@ struct rte_afu_shared {* A structure describing a AFU device. */ struct rte_afu_device { -TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ +RTE_TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ struct rte_device device;/**< Inherit core device */ struct rte_rawdev *rawdev;/**< Point Rawdev */ struct rte_afu_id id;/**< AFU id within FPGA. */
@@ -105,7 +105,7 @@ typedef int (afu_remove_t)(struct rte_afu_device *);* A structure describing a AFU device. */ struct rte_afu_driver { -TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
drivers/bus/pci/pci_params.c +2 -0
@@ -2,6 +2,8 @@* Copyright 2018 Gaëtan Rivet */ +#include <sys/queue.h> +#include <rte_bus.h> #include <rte_bus_pci.h> #include <rte_dev.h>
drivers/bus/pci/rte_bus_pci.h +6 -7
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -37,16 +36,16 @@ struct rte_pci_device;struct rte_pci_driver ;/** List of PCI devices */ -TAILQ_HEAD (rte_pci_device_list, rte_pci_device); +RTE_TAILQ_HEAD (rte_pci_device_list, rte_pci_device);/** List of PCI drivers */ -TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver); +RTE_TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver);/* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next)#define FOREACH_DRIVER_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next)struct rte_devargs ;
@@ -64,7 +63,7 @@ enum rte_pci_kernel_driver {* A structure describing a PCI device. */ struct rte_pci_device { -TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ +RTE_TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ struct rte_device device;/**< Inherit core device */ struct rte_pci_addr addr;/**< PCI location. */ struct rte_pci_id id;/**< PCI ID. */
@@ -160,7 +159,7 @@ typedef int (pci_dma_unmap_t)(struct rte_pci_device *dev, void *addr,* A structure describing a PCI driver. */ struct rte_pci_driver { -TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_pci_bus *bus;/**< PCI bus reference. */ rte_pci_probe_t *probe;/**< Device probe function. */
drivers/bus/pci/windows/pci.c +3 -0
@@ -1,6 +1,9 @@/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2020 Mellanox Technologies, Ltd */ + +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/pci/windows/pci_netuio.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2020 Intel Corporation. */ +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/vdev/rte_bus_vdev.h +3 -4
@@ -15,12 +15,11 @@extern "C" {#endif -#include <sys/queue.h> #include <rte_dev.h> #include <rte_devargs.h> struct rte_vdev_device { -TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ +RTE_TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ struct rte_device device;/**< Inherit core device */ };
@@ -53,7 +52,7 @@ rte_vdev_device_args(const struct rte_vdev_device *dev) }/** Double linked list of virtual device drivers. */ -TAILQ_HEAD (vdev_driver_list, rte_vdev_driver); +RTE_TAILQ_HEAD (vdev_driver_list, rte_vdev_driver);/** * Probe function called for each virtual device driver once.
@@ -107,7 +106,7 @@ typedef int (rte_vdev_dma_unmap_t)(struct rte_vdev_device *dev, void *addr,* A virtual device driver abstraction. */ struct rte_vdev_driver { -TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherited general driver. */ rte_vdev_probe_t *probe;/**< Virtual device probe function. */ rte_vdev_remove_t *remove;/**< Virtual device remove function. */
drivers/bus/vdev/vdev.c +2 -1
@@ -100,7 +100,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)struct vdev_custom_scan *custom_scan, *tmp_scan;rte_spinlock_lock (&vdev_custom_scan_lock); - TAILQ_FOREACH_SAFE(custom_scan, &vdev_custom_scans, next, tmp_scan) { +RTE_TAILQ_FOREACH_SAFE (custom_scan, &vdev_custom_scans, next, + tmp_scan) {if (custom_scan->callback != callback || (custom_scan->user_arg != (void *)-1 && custom_scan->user_arg != user_arg))
drivers/bus/vmbus/rte_bus_vmbus.h +6 -7
@@ -20,7 +20,6 @@ extern "C" {#include <limits.h> #include <stdbool.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -38,15 +37,15 @@ struct rte_vmbus_bus;struct vmbus_channel ;struct vmbus_mon_page ; -TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); -TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver); +RTE_TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); +RTE_TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver);/* VMBus iterators */ #define FOREACH_DEVICE_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next)#define FOREACH_DRIVER_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next)/** Maximum number of VMBUS resources. */ enum hv_uio_map {
@@ -62,7 +61,7 @@ enum hv_uio_map {* A structure describing a VMBUS device. */ struct rte_vmbus_device { -TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ +RTE_TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ const struct rte_vmbus_driver *driver;/**< Associated driver */ struct rte_device device;/**< Inherit core device */ rte_uuid_t device_id;/**< VMBUS device id */
@@ -93,7 +92,7 @@ typedef int (vmbus_remove_t)(struct rte_vmbus_device *);* A structure describing a VMBUS driver. */ struct rte_vmbus_driver { -TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ struct rte_driver driver;struct rte_vmbus_bus *bus;/**< VM bus reference. */ vmbus_probe_t *probe;/**< Device Probe function. */
drivers/net/bnxt/tf_ulp/bnxt_ulp.c +1 -1
@@ -2018,7 +2018,7 @@ bnxt_ulp_cntxt_list_del(struct bnxt_ulp_context *ulp_ctx)struct ulp_context_list_entry *entry, *temp;rte_spinlock_lock (&bnxt_ulp_ctxt_lock); - TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) {if (entry->ulp_ctx == ulp_ctx) {TAILQ_REMOVE (&ulp_cntx_list, entry, next);rte_free (entry);
drivers/net/bonding/rte_eth_bond_flow.c +1 -1
@@ -157,7 +157,7 @@ bond_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *err)/* Destroy all bond flows from its slaves instead of flushing them to * keep the LACP flow or any other external flows. */ - TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { lret =bond_flow_destroy (dev, flow, err);if (unlikely (lret !=0 )) ret = lret;
drivers/net/failsafe/failsafe_flow.c +1 -1
@@ -180,7 +180,7 @@ fs_flow_flush(struct rte_eth_dev *dev,return ret; } } - TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) {TAILQ_REMOVE (&PRIV (dev)->flow_list, flow, next);fs_flow_release (&flow); }
drivers/net/i40e/i40e_ethdev.c +5 -4
@@ -5436,7 +5436,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* VSI has child to attach, release child first */ if (vsi->veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) { + RTE_TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5444,7 +5444,8 @@ i40e_vsi_release(struct i40e_vsi *vsi) }if (vsi->floating_veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->floating_veb->head, list, temp) { +RTE_TAILQ_FOREACH_SAFE (vsi_list, &vsi->floating_veb->head, + list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5452,7 +5453,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* Remove all macvlan filters of the VSI */ i40e_vsi_remove_all_macvlan_filter (vsi); - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)rte_free (f); if (vsi->type != I40E_VSI_MAIN &&
@@ -6055,7 +6056,7 @@ i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on) i =0 ;/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { mac_filter[i] = f->mac_info; ret =i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr);if (ret) {
drivers/net/i40e/i40e_ethdev.h +1 -0
@@ -6,6 +6,7 @@#define _I40E_ETHDEV_H_#include <stdint.h> +#include <sys/queue.h> #include <rte_time.h> #include <rte_kvargs.h>
drivers/net/i40e/i40e_flow.c +3 -3
@@ -4917,7 +4917,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf) }/* Delete FDIR flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_FDIR ) {TAILQ_REMOVE (&pf->flow_list, flow, node); }
@@ -4972,7 +4972,7 @@ i40e_flow_flush_ethertype_filter(struct i40e_pf *pf) }/* Delete ethertype flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_ETHERTYPE ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
@@ -5000,7 +5000,7 @@ i40e_flow_flush_tunnel_filter(struct i40e_pf *pf) }/* Delete tunnel flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_TUNNEL ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
drivers/net/i40e/i40e_hash.c +1 -1
@@ -1366,7 +1366,7 @@ i40e_hash_filter_flush(struct i40e_pf *pf) {struct rte_flow *flow, *next; - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) {if (flow->filter_type !=RTE_ETH_FILTER_HASH )continue ;
drivers/net/i40e/rte_pmd_i40e.c +3 -3
@@ -216,7 +216,7 @@ i40e_vsi_rm_mac_filter(struct i40e_vsi *vsi)void *temp;/* remove all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { vlan_num = vsi->vlan_num; filter_type = f->mac_info.filter_type; if (filter_type == I40E_MACVLAN_PERFECT_MATCH ||
@@ -274,7 +274,7 @@ i40e_vsi_restore_mac_filter(struct i40e_vsi *vsi)void *temp;/* restore all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) {if (f->mac_info.filter_type ==I40E_MACVLAN_PERFECT_MATCH || f->mac_info.filter_type ==I40E_MACVLAN_HASH_MATCH ) {/**
@@ -563,7 +563,7 @@ rte_pmd_i40e_set_vf_mac_addr(uint16_t port, uint16_t vf_id,rte_ether_addr_copy (mac_addr, &vf->mac_addr);/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)if (i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr) !=I40E_SUCCESS )PMD_DRV_LOG (WARNING ,"Delete MAC failed" );
drivers/net/iavf/iavf_generic_flow.c +7 -7
@@ -1637,7 +1637,7 @@ iavf_flow_init(struct iavf_adapter *ad)TAILQ_INIT (&vf->dist_parser_list);rte_spinlock_init (&vf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1663,7 +1663,7 @@ iavf_flow_uninit(struct iavf_adapter *ad)struct iavf_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1733,7 +1733,7 @@ iavf_unregister_parser(struct iavf_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -1917,7 +1917,7 @@ iavf_parse_engine_create(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -1946,7 +1946,7 @@ iavf_parse_engine_validate(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2089,7 +2089,7 @@ iavf_flow_is_valid(struct rte_flow *flow)void *temp;if (flow && flow->engine) { - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine == flow->engine)return true; }
@@ -2142,7 +2142,7 @@ iavf_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { ret =iavf_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
drivers/net/ice/ice_dcf_ethdev.c +1 -0
@@ -4,6 +4,7 @@#include <errno.h> #include <stdbool.h> +#include <sys/queue.h> #include <sys/types.h> #include <unistd.h>
drivers/net/ice/ice_ethdev.c +2 -2
@@ -1104,7 +1104,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (!vsi || !vsi->mac_num)return -EINVAL ; - TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { ret =ice_remove_mac_filter (vsi, &m_f->mac_info.mac_addr);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
@@ -1115,7 +1115,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (vsi->vlan_num ==0 )return 0 ; - TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { ret =ice_remove_vlan_filter (vsi, &v_f->vlan_info.vlan);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
drivers/net/ice/ice_generic_flow.c +7 -7
@@ -1820,7 +1820,7 @@ ice_flow_init(struct ice_adapter *ad)TAILQ_INIT (&pf->dist_parser_list);rte_spinlock_init (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1846,7 +1846,7 @@ ice_flow_uninit(struct ice_adapter *ad)struct ice_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1946,7 +1946,7 @@ ice_unregister_parser(struct ice_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -2272,7 +2272,7 @@ ice_parse_engine_create(struct ice_adapter *ad,void *meta =NULL ;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {int ret; if (parser_node->parser->parse_pattern_action(ad,
@@ -2305,7 +2305,7 @@ ice_parse_engine_validate(struct ice_adapter *ad,struct ice_flow_parser_node *parser_node;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2477,7 +2477,7 @@ ice_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { ret =ice_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
@@ -2541,7 +2541,7 @@ ice_flow_redirect(struct ice_adapter *ad,rte_spinlock_lock (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {if (!p_flow->engine->redirect)continue ; ret = p_flow->engine->redirect (ad, p_flow, rd);
drivers/net/ipn3ke/ipn3ke_flow.c +1 -1
@@ -1231,7 +1231,7 @@ ipn3ke_flow_flush(struct rte_eth_dev *dev,struct ipn3ke_hw *hw =IPN3KE_DEV_PRIVATE_TO_HW (dev);struct rte_flow *flow, *temp; - TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) {TAILQ_REMOVE (&hw->flow_list, flow, next);rte_free (flow); }
drivers/net/mlx5/mlx5_flow_dv.c +1 -1
@@ -15099,7 +15099,7 @@ __flow_dv_destroy_sub_policy_rules(struct rte_eth_dev *dev, policy->act_cnt[i].fate_action == MLX5_FLOW_FATE_MTR) next_fm =mlx5_flow_meter_find (priv, policy->act_cnt[i].next_mtr_id,NULL ); -TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], +RTE_TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], next_port, tmp) {claim_zero (mlx5_flow_os_destroy_flow (color_rule->rule)); tbl = container_of(color_rule->matcher->tbl,
drivers/net/mlx5/mlx5_flow_meter.c +1 -1
@@ -2168,7 +2168,7 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) priv->mtr_idx_tbl =NULL ; } }else { - TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { fm = &legacy_fm->fm;if (mlx5_flow_meter_params_flush (dev, fm,0 )) return -rte_mtr_error_set(error, EINVAL,
drivers/net/softnic/rte_eth_softnic_flow.c +2 -1
@@ -2207,7 +2207,8 @@ pmd_flow_flush(struct rte_eth_dev *dev,void *temp;int status; - TAILQ_FOREACH_SAFE(flow, &table->flows, node, temp) { +RTE_TAILQ_FOREACH_SAFE (flow, &table->flows, node, + temp) {/* Rule delete. */ status = softnic_pipeline_table_rule_delete (softnic,
drivers/net/softnic/rte_eth_softnic_swq.c +1 -1
@@ -39,7 +39,7 @@ softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p) {struct softnic_swq *swq, *tswq; - TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) { + RTE_TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) {if ((strncmp (swq->name,"RXQ" ,strlen ("RXQ" )) ==0 ) || (strncmp (swq->name,"TXQ" ,strlen ("TXQ" )) ==0 ))continue ;
drivers/raw/dpaa2_qdma/dpaa2_qdma.c +1 -1
@@ -1606,7 +1606,7 @@ remove_hw_queues_from_list(struct dpaa2_dpdmai_dev *dpdmai_dev)DPAA2_QDMA_FUNC_TRACE (); - TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) { + RTE_TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) {if (queue->dpdmai_dev == dpdmai_dev) {TAILQ_REMOVE (&qdma_queue_list, queue, next);rte_free (queue);
lib/bbdev/rte_bbdev.h +1 -1
@@ -434,7 +434,7 @@ struct rte_bbdev_callback;struct rte_intr_handle ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback); +RTE_TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback);/** * @internal The data structure associated with a device. Drivers can access
lib/cryptodev/rte_cryptodev.h +1 -1
@@ -879,7 +879,7 @@ typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,struct rte_cryptodev_callback ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback); +RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback);/** * Structure used to hold information about the callbacks to be called for a
lib/cryptodev/rte_cryptodev_pmd.h +1 -1
@@ -66,7 +66,7 @@ struct rte_cryptodev_global {/* Cryptodev driver, containing the driver ID */ struct cryptodev_driver { -TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ const struct rte_driver *driver;uint8_t id; };
lib/eal/common/eal_common_devargs.c +4 -2
@@ -9,6 +9,7 @@#include <stdio.h> #include <string.h> #include <stdarg.h> +#include <sys/queue.h> #include <rte_bus.h> #include <rte_class.h>
@@ -18,6 +19,7 @@#include <rte_errno.h> #include <rte_kvargs.h> #include <rte_log.h> +#include <rte_os.h> #include <rte_tailq.h> #include "eal_private.h"
@@ -291,7 +293,7 @@ rte_devargs_insert(struct rte_devargs **da)if (*da ==NULL || (*da)->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) {if (listed_da == *da)/* devargs already in the list */ return 0 ;
@@ -358,7 +360,7 @@ rte_devargs_remove(struct rte_devargs *devargs)if (devargs ==NULL || devargs->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {if (strcmp (d->bus->name, devargs->bus->name) ==0 &&strcmp (d->name, devargs->name) ==0 ) {TAILQ_REMOVE (&devargs_list, d, next);
lib/eal/common/eal_common_fbarray.c +1 -0
@@ -9,6 +9,7 @@#include <errno.h> #include <string.h> #include <unistd.h> +#include <sys/queue.h> #include <rte_common.h> #include <rte_eal_paging.h>
lib/eal/common/eal_common_log.c +1 -0
@@ -10,6 +10,7 @@#include <errno.h> #include <regex.h> #include <fnmatch.h> +#include <sys/queue.h> #include <rte_eal.h> #include <rte_log.h>
lib/eal/common/eal_common_memalloc.c +1 -0
@@ -3,6 +3,7 @@*/ #include <string.h> +#include <sys/queue.h> #include <rte_errno.h> #include <rte_lcore.h>
lib/eal/common/eal_common_options.c +2 -1
@@ -6,6 +6,7 @@#include <stdlib.h> #include <unistd.h> #include <string.h> +#include <sys/queue.h> #ifndef RTE_EXEC_ENV_WINDOWS #include <syslog.h> #endif
@@ -283,7 +284,7 @@ eal_option_device_parse(void)void *tmp;int ret =0 ; - TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) {if (ret ==0 ) { ret =rte_devargs_add (devopt->type, devopt->arg);if (ret)
lib/eal/common/eal_trace.h +2 -0
@@ -5,6 +5,8 @@#ifndef __EAL_TRACE_H#define __EAL_TRACE_H +#include <sys/queue.h> +#include <rte_cycles.h> #include <rte_log.h> #include <rte_malloc.h>
lib/eal/freebsd/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +2 -3
@@ -19,13 +19,12 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_log.h> #include <rte_dev.h> /** Double linked list of buses */ -TAILQ_HEAD (rte_bus_list, rte_bus); +RTE_TAILQ_HEAD (rte_bus_list, rte_bus);/**
@@ -250,7 +249,7 @@ typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);* A structure describing a generic bus. */ struct rte_bus { -TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ +RTE_TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ const char *name;/**< Name of the bus */ rte_bus_scan_t scan;/**< Scan for devices attached to bus */ rte_bus_probe_t probe;/**< Probe devices on bus */
lib/eal/include/rte_class.h +2 -4
@@ -22,18 +22,16 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */ -TAILQ_HEAD (rte_class_list, rte_class); +RTE_TAILQ_HEAD (rte_class_list, rte_class);/** * A structure describing a generic device class. */ struct rte_class { -TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ +RTE_TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ const char *name;/**< Name of the class */ rte_dev_iterate_t dev_iterate;/**< Device iterator. */ };
lib/eal/include/rte_dev.h +2 -3
@@ -18,7 +18,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_compat.h>
@@ -75,7 +74,7 @@ struct rte_mem_resource {* A structure describing a device driver. */ struct rte_driver { -TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ const char *name;/**< Driver name. */ const char *alias;/**< Driver alias. */ };
@@ -90,7 +89,7 @@ struct rte_driver {* A structure describing a generic device. */ struct rte_device { -TAILQ_ENTRY (rte_device) next;/**< Next device */ +RTE_TAILQ_ENTRY (rte_device) next;/**< Next device */ const char *name;/**< Device name */ const struct rte_driver *driver;/**< Driver assigned after probing */ const struct rte_bus *bus;/**< Bus handle assigned on scan */
lib/eal/include/rte_devargs.h +1 -2
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
@@ -76,7 +75,7 @@ enum rte_devtype {*/ struct rte_devargs {/** Next in list. */ -TAILQ_ENTRY (rte_devargs) next; +RTE_TAILQ_ENTRY (rte_devargs) next;/** Type of device. */ enum rte_devtype type;/** Device policy. */
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +3 -12
@@ -15,17 +15,16 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { -TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ +RTE_TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ void *data;/**< Pointer to the data referenced by this tailq entry */ };/** dummy */ -TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry); +RTE_TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry);#define RTE_TAILQ_NAMESIZE 32
@@ -48,7 +47,7 @@ struct rte_tailq_elem {* rte_eal_tailqs_init() */ struct rte_tailq_head *head; -TAILQ_ENTRY (rte_tailq_elem) next; +RTE_TAILQ_ENTRY (rte_tailq_elem) next;const char name[RTE_TAILQ_NAMESIZE ]; };
@@ -125,14 +124,6 @@ RTE_INIT(tailqinitfn_ ##t) \rte_panic ("Cannot initialize tailq: %s\n" , t.name); \ } -/* This macro permits both remove and free var within the loop safely.*/ -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) -#endif - #ifdef __cplusplus }#endif
lib/eal/linux/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/eal_alarm.c +1 -0
@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h>
lib/eal/windows/include/rte_os.h +31 -0
@@ -18,6 +18,37 @@ extern "C" { #endif +#define RTE_TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} +#define RTE_TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#define RTE_TAILQ_FOREACH(var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST(head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} +#define RTE_STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + + /* cpu_set macros implementation */ #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2)
lib/efd/rte_efd.c +1 -1
@@ -759,7 +759,7 @@ rte_efd_free(struct rte_efd_table *table) efd_list =RTE_TAILQ_CAST (rte_efd_tailq.head, rte_efd_list);rte_mcfg_tailq_write_lock (); - TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(te, efd_list, next, temp) {if (te->data == (void *) table) {TAILQ_REMOVE (efd_list, te, next);rte_free (te);
lib/ethdev/rte_ethdev_core.h +1 -1
@@ -21,7 +21,7 @@struct rte_eth_dev_callback ;/** @internal Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback); +RTE_TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback);struct rte_eth_dev ;
lib/hash/rte_fbk_hash.h +0 -1
@@ -17,7 +17,6 @@#include <stdint.h> #include <errno.h> -#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/hash/rte_thash.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2021 Intel Corporation */ +#include <sys/queue.h> +#include <rte_thash.h> #include <rte_tailq.h> #include <rte_random.h>
lib/ip_frag/rte_ip_frag.h +2 -2
@@ -62,7 +62,7 @@ struct ip_frag_key {* First two entries in the frags[] array are for the last and first fragments. */ struct ip_frag_pkt { -TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ +RTE_TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ struct ip_frag_key key;/**< fragmentation key */ uint64_t start;/**< creation timestamp */ uint32_t total_size;/**< expected reassembled size */
@@ -83,7 +83,7 @@ struct rte_ip_frag_death_row {/**< mbufs to be freed */ }; -TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ +RTE_TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ /** fragmentation table statistics */ struct ip_frag_tbl_stat {
lib/mempool/rte_mempool.c +1 -1
@@ -1337,7 +1337,7 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),rte_mcfg_mempool_read_lock (); - TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { + RTE_TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { (*func)((struct rte_mempool *) te->data, arg); }
lib/mempool/rte_mempool.h +4 -5
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
@@ -141,7 +140,7 @@ struct rte_mempool_objsz {* double-frees. */ struct rte_mempool_objhdr { -STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the object. */ rte_iova_t iova;/**< IO address of the object. */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -152,7 +151,7 @@ struct rte_mempool_objhdr {/** * A list of object headers type */ -STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr); +RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr);#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -171,7 +170,7 @@ struct rte_mempool_objtlr {/** * A list of memory where objects are stored */ -STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr); +RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr);/** * Callback used to free a memory chunk
@@ -186,7 +185,7 @@ typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,* and physically contiguous. */ struct rte_mempool_memhdr { -STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the chunk */ void *addr;/**< Virtual address of the chunk */ rte_iova_t iova;/**< IO address of the chunk */
lib/pci/rte_pci.h +0 -1
@@ -18,7 +18,6 @@ extern "C" {#include <stdio.h> #include <limits.h> -#include <sys/queue.h> #include <inttypes.h> #include <sys/types.h>
lib/ring/rte_ring_core.h +0 -1
@@ -26,7 +26,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> #include <string.h> -#include <sys/queue.h> #include <errno.h> #include <rte_common.h> #include <rte_config.h>
lib/table/rte_swx_table.h +4 -3
@@ -16,7 +16,8 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> + +#include <rte_os.h> /** Match type. */ enum rte_swx_table_match_type {
@@ -68,7 +69,7 @@ struct rte_swx_table_entry {/** Used to facilitate the membership of this table entry to a * linked list. */ -TAILQ_ENTRY (rte_swx_table_entry) node; +RTE_TAILQ_ENTRY (rte_swx_table_entry) node;/** Key value for the current entry. Array of *key_size* bytes or NULL * if the *key_size* for the current table is 0.
@@ -111,7 +112,7 @@ struct rte_swx_table_entry { };/** List of table entries. */ -TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry); +RTE_TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry);/** * Table memory footprint get
lib/table/rte_swx_table_selector.h +2 -3
@@ -16,7 +16,6 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> #include <rte_compat.h>
@@ -56,7 +55,7 @@ struct rte_swx_table_selector_params {/** Group member parameters. */ struct rte_swx_table_selector_member {/** Linked list connectivity. */ -TAILQ_ENTRY (rte_swx_table_selector_member) node; +RTE_TAILQ_ENTRY (rte_swx_table_selector_member) node;/** Member ID. */ uint32_t member_id;
@@ -66,7 +65,7 @@ struct rte_swx_table_selector_member { };/** List of group members. */ -TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member); +RTE_TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member);/** Group parameters. */ struct rte_swx_table_selector_group {
lib/vhost/iotlb.c +6 -5
@@ -32,7 +32,7 @@ vhost_user_iotlb_pending_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_pending_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -100,7 +100,8 @@ vhost_user_iotlb_pending_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { +RTE_TAILQ_FOREACH_SAFE (node, &vq->iotlb_pending_list, next, + temp_node) {if (node->iova < iova)continue ;if (node->iova >= iova + size)
@@ -121,7 +122,7 @@ vhost_user_iotlb_cache_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -141,7 +142,7 @@ vhost_user_iotlb_cache_random_evict(struct vhost_virtqueue *vq) entry_idx =rte_rand () % vq->iotlb_cache_nr; - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {if (!entry_idx) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node);
@@ -218,7 +219,7 @@ vhost_user_iotlb_cache_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {/* Sorted list */ if (unlikely (iova + size < node->iova))break ;
lib/vhost/rte_vdpa_dev.h +1 -1
@@ -71,7 +71,7 @@ struct rte_vdpa_dev_ops {* vdpa device structure includes device address and device operations. */ struct rte_vdpa_device { -TAILQ_ENTRY (rte_vdpa_device) next; +RTE_TAILQ_ENTRY (rte_vdpa_device) next;/** Generic device information */ struct rte_device *device;/** vdpa device operations */
lib/vhost/vdpa.c +1 -1
@@ -115,7 +115,7 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)int ret =-1 ;rte_spinlock_lock (&vdpa_device_list_lock); - TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) { + RTE_TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {if (dev != cur_dev)continue ;
Signature · 1 line
2.30.2
Re: [dpdk-dev] [PATCH v6] eal: remove sys/queue.h from public headers.
Hi William,
just a few minor corrections remain, please see inline.
2021-08-14 02:51 (UTC+0000), William Tu:
[...]
Quoted 13 lines
lib/eal/common/eal_common_devargs.c +1
-0@@ -9,6 +9,7 @@#include <stdio.h> #include <string.h> #include <stdarg.h> +#include <sys/queue.h> #include <rte_bus.h> #include <rte_class.h>
lib/eal/common/eal_common_devargs.c line 22
Quoted 4 lines
lib/eal/common/eal_common_devargs.c +1
-0@@ -18,6 +19,7 @@#include <rte_errno.h> #include <rte_kvargs.h> #include <rte_log.h> +#include <rte_os.h>
Not needed, included by rte_bus.h -> rte_common.h -> rte_os.h.
lib/eal/common/eal_common_devargs.c line 24
Quoted 2 lines
lib/eal/common/eal_common_devargs.c +0
-0#include <rte_tailq.h> #include "eal_private.h"
If you included <sys/queue.h> from eal_private.h, you would need to modify much fewer files in EAL.
Quoted 19 lines
lib/eal/common/eal_common_devargs.c +2
-2@@ -291,7 +293,7 @@ rte_devargs_insert(struct rte_devargs **da)if (*da ==NULL || (*da)->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) {if (listed_da == *da)/* devargs already in the list */ return 0 ;@@ -358,7 +360,7 @@ rte_devargs_remove(struct rte_devargs *devargs)if (devargs ==NULL || devargs->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {if (strcmp (d->bus->name, devargs->bus->name) ==0 &&strcmp (d->name, devargs->name) ==0 ) {TAILQ_REMOVE (&devargs_list, d, next);
[...]
lib/eal/windows/include/rte_os.h line 19
Quoted 7 lines
lib/eal/windows/include/rte_os.h +0
-0@@ -18,6 +18,37 @@extern "C" {#endif
Comment about compatibility with the bundled sys/queue.h is lost.
Quoted 21 lines
lib/eal/windows/include/rte_os.h +21
-0+#define RTE_TAILQ_HEAD (name, type) \ +struct name { \ + struct type *tqh_first;/* first element */ \ +struct type **tqh_last;/* addr of last next element */ \ +} +#define RTE_TAILQ_ENTRY (type) \ +struct { \ + struct type *tqe_next;/* next element */ \ +struct type **tqe_prev;/* address of previous next element */ \ +} +#define RTE_TAILQ_FOREACH (var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT (elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD (name, type) \
lib/eal/windows/include/rte_os.h line 51
Quoted 10 lines
lib/eal/windows/include/rte_os.h +10
-0+struct name { \ +struct type *stqh_first;/* first element */ \ +struct type **stqh_last;/* addr of last next element */ \ +} +#define RTE_STAILQ_ENTRY(type) \ +struct { \ +struct type *stqe_next;/* next element */ \ +} + +
Redundant newline.
PATCH v7 1/1 eal: remove sys/queue.h from public headers.
In reply to William TuCurrently there are some public headers that include 'sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.
One solution is to install the 'lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
The patch fixes it by removing the "#include <sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such as TAILQ_xxx, we replace it by the ones with RTE_ prefix. For Windows, we copy the definitions from <sys/queue.h> to rte_os.h in Windows EAL. Note that these RTE_ macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Additionally, the TAILQ_FOREACH_SAFE is not part of <sys/queue.h>, the patch replaces it with RTE_TAILQ_FOREACH_SAFE.
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
---
v6-v7:
* remove some redundant "#incldue <sys/queue.h>"
* remove extra newline, add comment at rte_os.h for windows use of bundled sys/queue
v5-v6:
* fix tab/indent issue, fix type and spelling
* fix duplicate RTE_TAILQ_FOREACH_SAFE
* fix build error due to drivers/net/mlx5/mlx5_flow_meter.c
--- drivers/bus/auxiliary/private.h | 1 + drivers/bus/auxiliary/rte_bus_auxiliary.h | 5 ++-- drivers/bus/dpaa/dpaa_bus.c | 4 +-- drivers/bus/fslmc/fslmc_bus.c | 4 +-- drivers/bus/fslmc/fslmc_vfio.c | 9 ++++--- drivers/bus/ifpga/rte_bus_ifpga.h | 8 +++--- drivers/bus/pci/pci_params.c | 2 ++ drivers/bus/pci/rte_bus_pci.h | 13 +++++---- drivers/bus/pci/windows/pci.c | 3 +++ drivers/bus/pci/windows/pci_netuio.c | 2 ++ drivers/bus/vdev/rte_bus_vdev.h | 7 +++-- drivers/bus/vdev/vdev.c | 3 ++- drivers/bus/vmbus/rte_bus_vmbus.h | 13 +++++---- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 2 +- drivers/net/bonding/rte_eth_bond_flow.c | 2 +- drivers/net/failsafe/failsafe_flow.c | 2 +- drivers/net/i40e/i40e_ethdev.c | 9 ++++--- drivers/net/i40e/i40e_ethdev.h | 1 + drivers/net/i40e/i40e_flow.c | 6 ++--- drivers/net/i40e/i40e_hash.c | 2 +- drivers/net/i40e/rte_pmd_i40e.c | 6 ++--- drivers/net/iavf/iavf_generic_flow.c | 14 +++++----- drivers/net/ice/ice_dcf_ethdev.c | 1 + drivers/net/ice/ice_ethdev.c | 4 +-- drivers/net/ice/ice_generic_flow.c | 14 +++++----- drivers/net/ipn3ke/ipn3ke_flow.c | 2 +- drivers/net/mlx5/mlx5_flow_dv.c | 2 +- drivers/net/mlx5/mlx5_flow_meter.c | 2 +- drivers/net/softnic/rte_eth_softnic_flow.c | 3 ++- drivers/net/softnic/rte_eth_softnic_swq.c | 2 +- drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 2 +- lib/bbdev/rte_bbdev.h | 2 +- lib/cryptodev/rte_cryptodev.h | 2 +- lib/cryptodev/rte_cryptodev_pmd.h | 2 +- lib/eal/common/eal_common_devargs.c | 4 +-- lib/eal/common/eal_common_log.c | 1 + lib/eal/common/eal_common_options.c | 2 +- lib/eal/common/eal_private.h | 1 + lib/eal/freebsd/include/rte_os.h | 15 +++++++++++ lib/eal/include/rte_bus.h | 5 ++-- lib/eal/include/rte_class.h | 6 ++--- lib/eal/include/rte_dev.h | 5 ++-- lib/eal/include/rte_devargs.h | 3 +-- lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 15 +++-------- lib/eal/linux/include/rte_os.h | 15 +++++++++++ lib/eal/windows/eal_alarm.c | 1 + lib/eal/windows/include/rte_os.h | 31 ++++++++++++++++++++++ lib/efd/rte_efd.c | 2 +- lib/ethdev/rte_ethdev_core.h | 2 +- lib/hash/rte_fbk_hash.h | 1 - lib/hash/rte_thash.c | 2 ++ lib/ip_frag/rte_ip_frag.h | 4 +-- lib/mempool/rte_mempool.c | 2 +- lib/mempool/rte_mempool.h | 9 +++---- lib/pci/rte_pci.h | 1 - lib/ring/rte_ring_core.h | 1 - lib/table/rte_swx_table.h | 7 ++--- lib/table/rte_swx_table_selector.h | 5 ++-- lib/vhost/iotlb.c | 11 ++++---- lib/vhost/rte_vdpa_dev.h | 2 +- lib/vhost/vdpa.c | 2 +- 63 files changed, 186 insertions(+), 127 deletions(-)
drivers/bus/auxiliary/private.h +1 -0
@@ -7,6 +7,7 @@#include <stdbool.h> #include <stdio.h> +#include <sys/queue.h> #include "rte_bus_auxiliary.h"
drivers/bus/auxiliary/rte_bus_auxiliary.h +2 -3
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -113,7 +112,7 @@ typedef int (rte_auxiliary_dma_unmap_t)(struct rte_auxiliary_device *dev,* A structure describing an auxiliary device. */ struct rte_auxiliary_device { -TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ +RTE_TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ struct rte_device device;/**< Inherit core device */ char name[RTE_DEV_NAME_MAX_LEN +1 ];/**< ASCII device name */ struct rte_intr_handle intr_handle;/**< Interrupt handle */
@@ -124,7 +123,7 @@ struct rte_auxiliary_device {* A structure describing an auxiliary driver. */ struct rte_auxiliary_driver { -TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_auxiliary_bus *bus;/**< Auxiliary bus reference. */ rte_auxiliary_match_t *match;/**< Device match function. */
drivers/bus/dpaa/dpaa_bus.c +2 -2
@@ -105,7 +105,7 @@ dpaa_add_to_device_list(struct rte_dpaa_device *newdev)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { comp =compare_dpaa_devices (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
@@ -245,7 +245,7 @@ dpaa_clean_device_list(void)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) {TAILQ_REMOVE (&rte_dpaa_bus.device_list, dev, next);free (dev); dev =NULL ;
drivers/bus/fslmc/fslmc_bus.c +2 -2
@@ -45,7 +45,7 @@ cleanup_fslmc_device_list(void)struct rte_dpaa2_device *dev;struct rte_dpaa2_device *t_dev; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) {TAILQ_REMOVE (&rte_fslmc_bus.device_list, dev, next);free (dev); dev =NULL ;
@@ -82,7 +82,7 @@ insert_in_device_list(struct rte_dpaa2_device *newdev)struct rte_dpaa2_device *dev =NULL ;struct rte_dpaa2_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { comp =compare_dpaa2_devname (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
drivers/bus/fslmc/fslmc_vfio.c +6 -3
@@ -808,7 +808,8 @@ fslmc_vfio_process_group(void)bool is_dpmcp_in_blocklist = false, is_dpio_in_blocklist = false;int dpmcp_count =0 , dpio_count =0 , current_device; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { dpmcp_count++; if (dev->device.devargs &&
@@ -825,7 +826,8 @@ fslmc_vfio_process_group(void)/* Search the MCP as that should be initialized first. */ current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { current_device++; if (dev->device.devargs &&
@@ -872,7 +874,8 @@ fslmc_vfio_process_group(void) } current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_IO ) current_device++; if (dev->device.devargs &&
drivers/bus/ifpga/rte_bus_ifpga.h +4 -4
@@ -28,9 +28,9 @@ struct rte_afu_device;struct rte_afu_driver ;/** Double linked list of Intel FPGA AFU device. */ -TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device); +RTE_TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device);/** Double linked list of Intel FPGA AFU device drivers. */ -TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver); +RTE_TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver);#define IFPGA_BUS_BITSTREAM_PATH_MAX_LEN 256
@@ -71,7 +71,7 @@ struct rte_afu_shared {* A structure describing a AFU device. */ struct rte_afu_device { -TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ +RTE_TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ struct rte_device device;/**< Inherit core device */ struct rte_rawdev *rawdev;/**< Point Rawdev */ struct rte_afu_id id;/**< AFU id within FPGA. */
@@ -105,7 +105,7 @@ typedef int (afu_remove_t)(struct rte_afu_device *);* A structure describing a AFU device. */ struct rte_afu_driver { -TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
drivers/bus/pci/pci_params.c +2 -0
@@ -2,6 +2,8 @@* Copyright 2018 Gaëtan Rivet */ +#include <sys/queue.h> +#include <rte_bus.h> #include <rte_bus_pci.h> #include <rte_dev.h>
drivers/bus/pci/rte_bus_pci.h +6 -7
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -37,16 +36,16 @@ struct rte_pci_device;struct rte_pci_driver ;/** List of PCI devices */ -TAILQ_HEAD (rte_pci_device_list, rte_pci_device); +RTE_TAILQ_HEAD (rte_pci_device_list, rte_pci_device);/** List of PCI drivers */ -TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver); +RTE_TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver);/* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next)#define FOREACH_DRIVER_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next)struct rte_devargs ;
@@ -64,7 +63,7 @@ enum rte_pci_kernel_driver {* A structure describing a PCI device. */ struct rte_pci_device { -TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ +RTE_TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ struct rte_device device;/**< Inherit core device */ struct rte_pci_addr addr;/**< PCI location. */ struct rte_pci_id id;/**< PCI ID. */
@@ -160,7 +159,7 @@ typedef int (pci_dma_unmap_t)(struct rte_pci_device *dev, void *addr,* A structure describing a PCI driver. */ struct rte_pci_driver { -TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_pci_bus *bus;/**< PCI bus reference. */ rte_pci_probe_t *probe;/**< Device probe function. */
drivers/bus/pci/windows/pci.c +3 -0
@@ -1,6 +1,9 @@/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2020 Mellanox Technologies, Ltd */ + +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/pci/windows/pci_netuio.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2020 Intel Corporation. */ +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/vdev/rte_bus_vdev.h +3 -4
@@ -15,12 +15,11 @@extern "C" {#endif -#include <sys/queue.h> #include <rte_dev.h> #include <rte_devargs.h> struct rte_vdev_device { -TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ +RTE_TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ struct rte_device device;/**< Inherit core device */ };
@@ -53,7 +52,7 @@ rte_vdev_device_args(const struct rte_vdev_device *dev) }/** Double linked list of virtual device drivers. */ -TAILQ_HEAD (vdev_driver_list, rte_vdev_driver); +RTE_TAILQ_HEAD (vdev_driver_list, rte_vdev_driver);/** * Probe function called for each virtual device driver once.
@@ -107,7 +106,7 @@ typedef int (rte_vdev_dma_unmap_t)(struct rte_vdev_device *dev, void *addr,* A virtual device driver abstraction. */ struct rte_vdev_driver { -TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherited general driver. */ rte_vdev_probe_t *probe;/**< Virtual device probe function. */ rte_vdev_remove_t *remove;/**< Virtual device remove function. */
drivers/bus/vdev/vdev.c +2 -1
@@ -100,7 +100,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)struct vdev_custom_scan *custom_scan, *tmp_scan;rte_spinlock_lock (&vdev_custom_scan_lock); - TAILQ_FOREACH_SAFE(custom_scan, &vdev_custom_scans, next, tmp_scan) { +RTE_TAILQ_FOREACH_SAFE (custom_scan, &vdev_custom_scans, next, + tmp_scan) {if (custom_scan->callback != callback || (custom_scan->user_arg != (void *)-1 && custom_scan->user_arg != user_arg))
drivers/bus/vmbus/rte_bus_vmbus.h +6 -7
@@ -20,7 +20,6 @@ extern "C" {#include <limits.h> #include <stdbool.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -38,15 +37,15 @@ struct rte_vmbus_bus;struct vmbus_channel ;struct vmbus_mon_page ; -TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); -TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver); +RTE_TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); +RTE_TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver);/* VMBus iterators */ #define FOREACH_DEVICE_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next)#define FOREACH_DRIVER_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next)/** Maximum number of VMBUS resources. */ enum hv_uio_map {
@@ -62,7 +61,7 @@ enum hv_uio_map {* A structure describing a VMBUS device. */ struct rte_vmbus_device { -TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ +RTE_TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ const struct rte_vmbus_driver *driver;/**< Associated driver */ struct rte_device device;/**< Inherit core device */ rte_uuid_t device_id;/**< VMBUS device id */
@@ -93,7 +92,7 @@ typedef int (vmbus_remove_t)(struct rte_vmbus_device *);* A structure describing a VMBUS driver. */ struct rte_vmbus_driver { -TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ struct rte_driver driver;struct rte_vmbus_bus *bus;/**< VM bus reference. */ vmbus_probe_t *probe;/**< Device Probe function. */
drivers/net/bnxt/tf_ulp/bnxt_ulp.c +1 -1
@@ -2018,7 +2018,7 @@ bnxt_ulp_cntxt_list_del(struct bnxt_ulp_context *ulp_ctx)struct ulp_context_list_entry *entry, *temp;rte_spinlock_lock (&bnxt_ulp_ctxt_lock); - TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) {if (entry->ulp_ctx == ulp_ctx) {TAILQ_REMOVE (&ulp_cntx_list, entry, next);rte_free (entry);
drivers/net/bonding/rte_eth_bond_flow.c +1 -1
@@ -157,7 +157,7 @@ bond_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *err)/* Destroy all bond flows from its slaves instead of flushing them to * keep the LACP flow or any other external flows. */ - TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { lret =bond_flow_destroy (dev, flow, err);if (unlikely (lret !=0 )) ret = lret;
drivers/net/failsafe/failsafe_flow.c +1 -1
@@ -180,7 +180,7 @@ fs_flow_flush(struct rte_eth_dev *dev,return ret; } } - TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) {TAILQ_REMOVE (&PRIV (dev)->flow_list, flow, next);fs_flow_release (&flow); }
drivers/net/i40e/i40e_ethdev.c +5 -4
@@ -5436,7 +5436,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* VSI has child to attach, release child first */ if (vsi->veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) { + RTE_TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5444,7 +5444,8 @@ i40e_vsi_release(struct i40e_vsi *vsi) }if (vsi->floating_veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->floating_veb->head, list, temp) { +RTE_TAILQ_FOREACH_SAFE (vsi_list, &vsi->floating_veb->head, + list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5452,7 +5453,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* Remove all macvlan filters of the VSI */ i40e_vsi_remove_all_macvlan_filter (vsi); - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)rte_free (f); if (vsi->type != I40E_VSI_MAIN &&
@@ -6055,7 +6056,7 @@ i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on) i =0 ;/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { mac_filter[i] = f->mac_info; ret =i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr);if (ret) {
drivers/net/i40e/i40e_ethdev.h +1 -0
@@ -6,6 +6,7 @@#define _I40E_ETHDEV_H_#include <stdint.h> +#include <sys/queue.h> #include <rte_time.h> #include <rte_kvargs.h>
drivers/net/i40e/i40e_flow.c +3 -3
@@ -4917,7 +4917,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf) }/* Delete FDIR flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_FDIR ) {TAILQ_REMOVE (&pf->flow_list, flow, node); }
@@ -4972,7 +4972,7 @@ i40e_flow_flush_ethertype_filter(struct i40e_pf *pf) }/* Delete ethertype flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_ETHERTYPE ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
@@ -5000,7 +5000,7 @@ i40e_flow_flush_tunnel_filter(struct i40e_pf *pf) }/* Delete tunnel flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_TUNNEL ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
drivers/net/i40e/i40e_hash.c +1 -1
@@ -1366,7 +1366,7 @@ i40e_hash_filter_flush(struct i40e_pf *pf) {struct rte_flow *flow, *next; - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) {if (flow->filter_type !=RTE_ETH_FILTER_HASH )continue ;
drivers/net/i40e/rte_pmd_i40e.c +3 -3
@@ -216,7 +216,7 @@ i40e_vsi_rm_mac_filter(struct i40e_vsi *vsi)void *temp;/* remove all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { vlan_num = vsi->vlan_num; filter_type = f->mac_info.filter_type; if (filter_type == I40E_MACVLAN_PERFECT_MATCH ||
@@ -274,7 +274,7 @@ i40e_vsi_restore_mac_filter(struct i40e_vsi *vsi)void *temp;/* restore all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) {if (f->mac_info.filter_type ==I40E_MACVLAN_PERFECT_MATCH || f->mac_info.filter_type ==I40E_MACVLAN_HASH_MATCH ) {/**
@@ -563,7 +563,7 @@ rte_pmd_i40e_set_vf_mac_addr(uint16_t port, uint16_t vf_id,rte_ether_addr_copy (mac_addr, &vf->mac_addr);/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)if (i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr) !=I40E_SUCCESS )PMD_DRV_LOG (WARNING ,"Delete MAC failed" );
drivers/net/iavf/iavf_generic_flow.c +7 -7
@@ -1637,7 +1637,7 @@ iavf_flow_init(struct iavf_adapter *ad)TAILQ_INIT (&vf->dist_parser_list);rte_spinlock_init (&vf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1663,7 +1663,7 @@ iavf_flow_uninit(struct iavf_adapter *ad)struct iavf_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1733,7 +1733,7 @@ iavf_unregister_parser(struct iavf_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -1917,7 +1917,7 @@ iavf_parse_engine_create(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -1946,7 +1946,7 @@ iavf_parse_engine_validate(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2089,7 +2089,7 @@ iavf_flow_is_valid(struct rte_flow *flow)void *temp;if (flow && flow->engine) { - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine == flow->engine)return true; }
@@ -2142,7 +2142,7 @@ iavf_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { ret =iavf_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
drivers/net/ice/ice_dcf_ethdev.c +1 -0
@@ -4,6 +4,7 @@#include <errno.h> #include <stdbool.h> +#include <sys/queue.h> #include <sys/types.h> #include <unistd.h>
drivers/net/ice/ice_ethdev.c +2 -2
@@ -1104,7 +1104,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (!vsi || !vsi->mac_num)return -EINVAL ; - TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { ret =ice_remove_mac_filter (vsi, &m_f->mac_info.mac_addr);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
@@ -1115,7 +1115,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (vsi->vlan_num ==0 )return 0 ; - TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { ret =ice_remove_vlan_filter (vsi, &v_f->vlan_info.vlan);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
drivers/net/ice/ice_generic_flow.c +7 -7
@@ -1820,7 +1820,7 @@ ice_flow_init(struct ice_adapter *ad)TAILQ_INIT (&pf->dist_parser_list);rte_spinlock_init (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1846,7 +1846,7 @@ ice_flow_uninit(struct ice_adapter *ad)struct ice_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1946,7 +1946,7 @@ ice_unregister_parser(struct ice_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -2272,7 +2272,7 @@ ice_parse_engine_create(struct ice_adapter *ad,void *meta =NULL ;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {int ret; if (parser_node->parser->parse_pattern_action(ad,
@@ -2305,7 +2305,7 @@ ice_parse_engine_validate(struct ice_adapter *ad,struct ice_flow_parser_node *parser_node;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2477,7 +2477,7 @@ ice_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { ret =ice_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
@@ -2541,7 +2541,7 @@ ice_flow_redirect(struct ice_adapter *ad,rte_spinlock_lock (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {if (!p_flow->engine->redirect)continue ; ret = p_flow->engine->redirect (ad, p_flow, rd);
drivers/net/ipn3ke/ipn3ke_flow.c +1 -1
@@ -1231,7 +1231,7 @@ ipn3ke_flow_flush(struct rte_eth_dev *dev,struct ipn3ke_hw *hw =IPN3KE_DEV_PRIVATE_TO_HW (dev);struct rte_flow *flow, *temp; - TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) {TAILQ_REMOVE (&hw->flow_list, flow, next);rte_free (flow); }
drivers/net/mlx5/mlx5_flow_dv.c +1 -1
@@ -15099,7 +15099,7 @@ __flow_dv_destroy_sub_policy_rules(struct rte_eth_dev *dev, policy->act_cnt[i].fate_action == MLX5_FLOW_FATE_MTR) next_fm =mlx5_flow_meter_find (priv, policy->act_cnt[i].next_mtr_id,NULL ); -TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], +RTE_TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], next_port, tmp) {claim_zero (mlx5_flow_os_destroy_flow (color_rule->rule)); tbl = container_of(color_rule->matcher->tbl,
drivers/net/mlx5/mlx5_flow_meter.c +1 -1
@@ -2168,7 +2168,7 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) priv->mtr_idx_tbl =NULL ; } }else { - TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { fm = &legacy_fm->fm;if (mlx5_flow_meter_params_flush (dev, fm,0 )) return -rte_mtr_error_set(error, EINVAL,
drivers/net/softnic/rte_eth_softnic_flow.c +2 -1
@@ -2207,7 +2207,8 @@ pmd_flow_flush(struct rte_eth_dev *dev,void *temp;int status; - TAILQ_FOREACH_SAFE(flow, &table->flows, node, temp) { +RTE_TAILQ_FOREACH_SAFE (flow, &table->flows, node, + temp) {/* Rule delete. */ status = softnic_pipeline_table_rule_delete (softnic,
drivers/net/softnic/rte_eth_softnic_swq.c +1 -1
@@ -39,7 +39,7 @@ softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p) {struct softnic_swq *swq, *tswq; - TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) { + RTE_TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) {if ((strncmp (swq->name,"RXQ" ,strlen ("RXQ" )) ==0 ) || (strncmp (swq->name,"TXQ" ,strlen ("TXQ" )) ==0 ))continue ;
drivers/raw/dpaa2_qdma/dpaa2_qdma.c +1 -1
@@ -1606,7 +1606,7 @@ remove_hw_queues_from_list(struct dpaa2_dpdmai_dev *dpdmai_dev)DPAA2_QDMA_FUNC_TRACE (); - TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) { + RTE_TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) {if (queue->dpdmai_dev == dpdmai_dev) {TAILQ_REMOVE (&qdma_queue_list, queue, next);rte_free (queue);
lib/bbdev/rte_bbdev.h +1 -1
@@ -434,7 +434,7 @@ struct rte_bbdev_callback;struct rte_intr_handle ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback); +RTE_TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback);/** * @internal The data structure associated with a device. Drivers can access
lib/cryptodev/rte_cryptodev.h +1 -1
@@ -879,7 +879,7 @@ typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,struct rte_cryptodev_callback ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback); +RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback);/** * Structure used to hold information about the callbacks to be called for a
lib/cryptodev/rte_cryptodev_pmd.h +1 -1
@@ -66,7 +66,7 @@ struct rte_cryptodev_global {/* Cryptodev driver, containing the driver ID */ struct cryptodev_driver { -TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ const struct rte_driver *driver;uint8_t id; };
lib/eal/common/eal_common_devargs.c +2 -2
@@ -291,7 +291,7 @@ rte_devargs_insert(struct rte_devargs **da)if (*da ==NULL || (*da)->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) {if (listed_da == *da)/* devargs already in the list */ return 0 ;
@@ -358,7 +358,7 @@ rte_devargs_remove(struct rte_devargs *devargs)if (devargs ==NULL || devargs->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {if (strcmp (d->bus->name, devargs->bus->name) ==0 &&strcmp (d->name, devargs->name) ==0 ) {TAILQ_REMOVE (&devargs_list, d, next);
lib/eal/common/eal_common_log.c +1 -0
@@ -10,6 +10,7 @@#include <errno.h> #include <regex.h> #include <fnmatch.h> +#include <sys/queue.h> #include <rte_eal.h> #include <rte_log.h>
lib/eal/common/eal_common_options.c +1 -1
@@ -283,7 +283,7 @@ eal_option_device_parse(void)void *tmp;int ret =0 ; - TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) {if (ret ==0 ) { ret =rte_devargs_add (devopt->type, devopt->arg);if (ret)
lib/eal/common/eal_private.h +1 -0
@@ -8,6 +8,7 @@#include <stdbool.h> #include <stdint.h> #include <stdio.h> +#include <sys/queue.h> #include <rte_dev.h> #include <rte_lcore.h>
lib/eal/freebsd/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +2 -3
@@ -19,13 +19,12 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_log.h> #include <rte_dev.h> /** Double linked list of buses */ -TAILQ_HEAD (rte_bus_list, rte_bus); +RTE_TAILQ_HEAD (rte_bus_list, rte_bus);/**
@@ -250,7 +249,7 @@ typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);* A structure describing a generic bus. */ struct rte_bus { -TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ +RTE_TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ const char *name;/**< Name of the bus */ rte_bus_scan_t scan;/**< Scan for devices attached to bus */ rte_bus_probe_t probe;/**< Probe devices on bus */
lib/eal/include/rte_class.h +2 -4
@@ -22,18 +22,16 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */ -TAILQ_HEAD (rte_class_list, rte_class); +RTE_TAILQ_HEAD (rte_class_list, rte_class);/** * A structure describing a generic device class. */ struct rte_class { -TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ +RTE_TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ const char *name;/**< Name of the class */ rte_dev_iterate_t dev_iterate;/**< Device iterator. */ };
lib/eal/include/rte_dev.h +2 -3
@@ -18,7 +18,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_compat.h>
@@ -75,7 +74,7 @@ struct rte_mem_resource {* A structure describing a device driver. */ struct rte_driver { -TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ const char *name;/**< Driver name. */ const char *alias;/**< Driver alias. */ };
@@ -90,7 +89,7 @@ struct rte_driver {* A structure describing a generic device. */ struct rte_device { -TAILQ_ENTRY (rte_device) next;/**< Next device */ +RTE_TAILQ_ENTRY (rte_device) next;/**< Next device */ const char *name;/**< Device name */ const struct rte_driver *driver;/**< Driver assigned after probing */ const struct rte_bus *bus;/**< Bus handle assigned on scan */
lib/eal/include/rte_devargs.h +1 -2
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
@@ -76,7 +75,7 @@ enum rte_devtype {*/ struct rte_devargs {/** Next in list. */ -TAILQ_ENTRY (rte_devargs) next; +RTE_TAILQ_ENTRY (rte_devargs) next;/** Type of device. */ enum rte_devtype type;/** Device policy. */
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +3 -12
@@ -15,17 +15,16 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { -TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ +RTE_TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ void *data;/**< Pointer to the data referenced by this tailq entry */ };/** dummy */ -TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry); +RTE_TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry);#define RTE_TAILQ_NAMESIZE 32
@@ -48,7 +47,7 @@ struct rte_tailq_elem {* rte_eal_tailqs_init() */ struct rte_tailq_head *head; -TAILQ_ENTRY (rte_tailq_elem) next; +RTE_TAILQ_ENTRY (rte_tailq_elem) next;const char name[RTE_TAILQ_NAMESIZE ]; };
@@ -125,14 +124,6 @@ RTE_INIT(tailqinitfn_ ##t) \rte_panic ("Cannot initialize tailq: %s\n" , t.name); \ } -/* This macro permits both remove and free var within the loop safely.*/ -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) -#endif - #ifdef __cplusplus }#endif
lib/eal/linux/include/rte_os.h +15 -0
@@ -11,6 +11,21 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/eal_alarm.c +1 -0
@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h>
lib/eal/windows/include/rte_os.h +31 -0
@@ -18,6 +18,37 @@ extern "C" { #endif +/* These macros are compatible with bundled sys/queue.h. */ +#define RTE_TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} +#define RTE_TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#define RTE_TAILQ_FOREACH(var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST(head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} +#define RTE_STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + /* cpu_set macros implementation */ #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2)
lib/efd/rte_efd.c +1 -1
@@ -759,7 +759,7 @@ rte_efd_free(struct rte_efd_table *table) efd_list =RTE_TAILQ_CAST (rte_efd_tailq.head, rte_efd_list);rte_mcfg_tailq_write_lock (); - TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(te, efd_list, next, temp) {if (te->data == (void *) table) {TAILQ_REMOVE (efd_list, te, next);rte_free (te);
lib/ethdev/rte_ethdev_core.h +1 -1
@@ -21,7 +21,7 @@struct rte_eth_dev_callback ;/** @internal Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback); +RTE_TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback);struct rte_eth_dev ;
lib/hash/rte_fbk_hash.h +0 -1
@@ -17,7 +17,6 @@#include <stdint.h> #include <errno.h> -#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/hash/rte_thash.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2021 Intel Corporation */ +#include <sys/queue.h> +#include <rte_thash.h> #include <rte_tailq.h> #include <rte_random.h>
lib/ip_frag/rte_ip_frag.h +2 -2
@@ -62,7 +62,7 @@ struct ip_frag_key {* First two entries in the frags[] array are for the last and first fragments. */ struct ip_frag_pkt { -TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ +RTE_TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ struct ip_frag_key key;/**< fragmentation key */ uint64_t start;/**< creation timestamp */ uint32_t total_size;/**< expected reassembled size */
@@ -83,7 +83,7 @@ struct rte_ip_frag_death_row {/**< mbufs to be freed */ }; -TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ +RTE_TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ /** fragmentation table statistics */ struct ip_frag_tbl_stat {
lib/mempool/rte_mempool.c +1 -1
@@ -1337,7 +1337,7 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),rte_mcfg_mempool_read_lock (); - TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { + RTE_TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { (*func)((struct rte_mempool *) te->data, arg); }
lib/mempool/rte_mempool.h +4 -5
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
@@ -141,7 +140,7 @@ struct rte_mempool_objsz {* double-frees. */ struct rte_mempool_objhdr { -STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the object. */ rte_iova_t iova;/**< IO address of the object. */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -152,7 +151,7 @@ struct rte_mempool_objhdr {/** * A list of object headers type */ -STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr); +RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr);#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -171,7 +170,7 @@ struct rte_mempool_objtlr {/** * A list of memory where objects are stored */ -STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr); +RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr);/** * Callback used to free a memory chunk
@@ -186,7 +185,7 @@ typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,* and physically contiguous. */ struct rte_mempool_memhdr { -STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the chunk */ void *addr;/**< Virtual address of the chunk */ rte_iova_t iova;/**< IO address of the chunk */
lib/pci/rte_pci.h +0 -1
@@ -18,7 +18,6 @@ extern "C" {#include <stdio.h> #include <limits.h> -#include <sys/queue.h> #include <inttypes.h> #include <sys/types.h>
lib/ring/rte_ring_core.h +0 -1
@@ -26,7 +26,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> #include <string.h> -#include <sys/queue.h> #include <errno.h> #include <rte_common.h> #include <rte_config.h>
lib/table/rte_swx_table.h +4 -3
@@ -16,7 +16,8 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> + +#include <rte_os.h> /** Match type. */ enum rte_swx_table_match_type {
@@ -68,7 +69,7 @@ struct rte_swx_table_entry {/** Used to facilitate the membership of this table entry to a * linked list. */ -TAILQ_ENTRY (rte_swx_table_entry) node; +RTE_TAILQ_ENTRY (rte_swx_table_entry) node;/** Key value for the current entry. Array of *key_size* bytes or NULL * if the *key_size* for the current table is 0.
@@ -111,7 +112,7 @@ struct rte_swx_table_entry { };/** List of table entries. */ -TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry); +RTE_TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry);/** * Table memory footprint get
lib/table/rte_swx_table_selector.h +2 -3
@@ -16,7 +16,6 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> #include <rte_compat.h>
@@ -56,7 +55,7 @@ struct rte_swx_table_selector_params {/** Group member parameters. */ struct rte_swx_table_selector_member {/** Linked list connectivity. */ -TAILQ_ENTRY (rte_swx_table_selector_member) node; +RTE_TAILQ_ENTRY (rte_swx_table_selector_member) node;/** Member ID. */ uint32_t member_id;
@@ -66,7 +65,7 @@ struct rte_swx_table_selector_member { };/** List of group members. */ -TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member); +RTE_TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member);/** Group parameters. */ struct rte_swx_table_selector_group {
lib/vhost/iotlb.c +6 -5
@@ -32,7 +32,7 @@ vhost_user_iotlb_pending_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_pending_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -100,7 +100,8 @@ vhost_user_iotlb_pending_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { +RTE_TAILQ_FOREACH_SAFE (node, &vq->iotlb_pending_list, next, + temp_node) {if (node->iova < iova)continue ;if (node->iova >= iova + size)
@@ -121,7 +122,7 @@ vhost_user_iotlb_cache_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -141,7 +142,7 @@ vhost_user_iotlb_cache_random_evict(struct vhost_virtqueue *vq) entry_idx =rte_rand () % vq->iotlb_cache_nr; - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {if (!entry_idx) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node);
@@ -218,7 +219,7 @@ vhost_user_iotlb_cache_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {/* Sorted list */ if (unlikely (iova + size < node->iova))break ;
lib/vhost/rte_vdpa_dev.h +1 -1
@@ -71,7 +71,7 @@ struct rte_vdpa_dev_ops {* vdpa device structure includes device address and device operations. */ struct rte_vdpa_device { -TAILQ_ENTRY (rte_vdpa_device) next; +RTE_TAILQ_ENTRY (rte_vdpa_device) next;/** Generic device information */ struct rte_device *device;/** vdpa device operations */
lib/vhost/vdpa.c +1 -1
@@ -115,7 +115,7 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)int ret =-1 ;rte_spinlock_lock (&vdpa_device_list_lock); - TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) { + RTE_TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {if (dev != cur_dev)continue ;
Signature · 1 line
2.30.2
Re: [dpdk-dev] [PATCH v7] eal: remove sys/queue.h from public headers.
2021-08-18 23:26 (UTC+0000), William Tu:
[...]
Quoted 8 lines
lib/eal/linux/include/rte_os.h +0
-0@@ -11,6 +11,21 @@*/ #include <sched.h>
lib/eal/linux/include/rte_os.h line 23
Quoted 10 lines
lib/eal/linux/include/rte_os.h +10
-0+#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar))
I made a comment to v5 and you were going to fix it, maybe it got lost?
Why duplicate this in rte_os.h (documentation lost, BTW) and add #ifdef? RTE_TAILQ_FOREACH_SAFE is not needed in headers, it can be left [in rte_tailq.h].
The important part is duplication in rte_os.h for each platform and the loss of documentation. I see you already removed #ifdef.
Quoted 49 lines
lib/eal/linux/include/rte_os.h +5
-0+#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;lib/eal/windows/eal_alarm.c +1
-0@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h> lib/eal/windows/include/rte_os.h +21
-0@@ -18,6 +18,37 @@ extern "C" { #endif +/* These macros are compatible with bundled sys/queue.h. */ +#define RTE_TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} +#define RTE_TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#define RTE_TAILQ_FOREACH(var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST(head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
lib/eal/windows/include/rte_os.h line 51
Quoted 10 lines
lib/eal/windows/include/rte_os.h +10
-0+#define RTE_STAILQ_HEAD (name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ +struct type **stqh_last;/* addr of last next element */ \ +} +#define RTE_STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} +
Please drop the inline comments.
They duplicate what's already in sys/queue.h
and we're not going to maintain them.
Re: [dpdk-dev] [PATCH v7] eal: remove sys/queue.h from public headers.
Hi Dmitry,
Thanks for your feedback.
Quoted 24 lines · Dmitry Kozlyuk
2021-08-18 23:26 (UTC+0000), William Tu:
[...]Quoted 8 lines
lib/eal/linux/include/rte_os.h +0
-0@@ -11,6 +11,21 @@*/ #include <sched.h> lib/eal/linux/include/rte_os.h line 23
Quoted 10 lines
lib/eal/linux/include/rte_os.h +10
-0+#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar))I made a comment to v5 and you were going to fix it, maybe it got lost?
Quoted 6 lines
Why duplicate this in
rte_os.h(documentation lost, BTW) and add #ifdef?RTE_TAILQ_FOREACH_SAFEis not needed in headers, it can be left [inrte_tailq.h].The important part is duplication in
rte_os.hfor each platform and the loss of documentation. I see you already removed #ifdef.
Yes, it got lost. I will fix the documentation, and the RTE_TAILQ_FOREACH_SAFE at rte_tailq.h.
Quoted 56 lines
Quoted 56 lines
lib/eal/linux/include/rte_os.h +5
-0+#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type) +#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;lib/eal/windows/eal_alarm.c +1
-0@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h> lib/eal/windows/include/rte_os.h +27
-0@@ -18,6 +18,37 @@ extern "C" { #endif +/* These macros are compatible with bundled sys/queue.h. */ +#define RTE_TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} +#define RTE_TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} +#define RTE_TAILQ_FOREACH(var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#define RTE_TAILQ_FIRST(head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} +#define RTE_STAILQ_ENTRY(type) \
Quoted 8 lines
lib/eal/windows/include/rte_os.h line 51
Quoted 4 lines
lib/eal/windows/include/rte_os.h +4
-0+struct { \ +struct type *stqe_next;/* next element */ \ +} +Please drop the inline comments.
They duplicate what's already insys/queue.h
and we're not going to maintain them.
OK, I will remove all the inline comments.
Thanks,
William
William
PATCH v8 1/1 eal: remove sys/queue.h from public headers.
In reply to William TuCurrently there are some public headers that include 'sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.
One solution is to install the 'lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
The patch fixes it by removing the "#include <sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such as TAILQ_xxx, we replace it by the ones with RTE_ prefix. For Windows, we copy the definitions from <sys/queue.h> to rte_os.h in Windows EAL. Note that these RTE_ macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Additionally, the TAILQ_FOREACH_SAFE is not part of <sys/queue.h>, the patch replaces it with RTE_TAILQ_FOREACH_SAFE.
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
---
v7-v8:
* remove duplicate RTE_TAILQ_FOREACH_SAFE at rte_os.h put the macro at rte_tailq.h
* remove inline comments
* diff
https://github.com/williamtu/dpdk/compare/a4144ff11b..6cb7cd8daf
v6-v7:
* remove some redundant "#incldue <sys/queue.h>"
* remove extra newline, add comment at rte_os.h for windows use of bundled sys/queue
v5-v6:
* fix tab/indent issue, fix type and spelling
* fix duplicate RTE_TAILQ_FOREACH_SAFE
* fix build error due to drivers/net/mlx5/mlx5_flow_meter.c
---
drivers/bus/auxiliary/private.h | 1 + drivers/bus/auxiliary/rte_bus_auxiliary.h | 5 ++-- drivers/bus/dpaa/dpaa_bus.c | 4 ++-- drivers/bus/fslmc/fslmc_bus.c | 4 ++-- drivers/bus/fslmc/fslmc_vfio.c | 9 +++++--- drivers/bus/ifpga/rte_bus_ifpga.h | 8 +++---- drivers/bus/pci/pci_params.c | 2 ++ drivers/bus/pci/rte_bus_pci.h | 13 +++++------ drivers/bus/pci/windows/pci.c | 3 +++ drivers/bus/pci/windows/pci_netuio.c | 2 ++ drivers/bus/vdev/rte_bus_vdev.h | 7 +++--- drivers/bus/vdev/vdev.c | 3 ++- drivers/bus/vmbus/rte_bus_vmbus.h | 13 +++++------ drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 2 +- drivers/net/bonding/rte_eth_bond_flow.c | 2 +- drivers/net/failsafe/failsafe_flow.c | 2 +- drivers/net/i40e/i40e_ethdev.c | 9 ++++---- drivers/net/i40e/i40e_ethdev.h | 1 + drivers/net/i40e/i40e_flow.c | 6 ++--- drivers/net/i40e/i40e_hash.c | 2 +- drivers/net/i40e/rte_pmd_i40e.c | 6 ++--- drivers/net/iavf/iavf_generic_flow.c | 14 +++++------ drivers/net/ice/ice_dcf_ethdev.c | 1 + drivers/net/ice/ice_ethdev.c | 4 ++-- drivers/net/ice/ice_generic_flow.c | 14 +++++------ drivers/net/ipn3ke/ipn3ke_flow.c | 2 +- drivers/net/mlx5/mlx5_flow_dv.c | 2 +- drivers/net/mlx5/mlx5_flow_meter.c | 2 +- drivers/net/softnic/rte_eth_softnic_flow.c | 3 ++- drivers/net/softnic/rte_eth_softnic_swq.c | 2 +- drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 2 +- lib/bbdev/rte_bbdev.h | 2 +- lib/cryptodev/rte_cryptodev.h | 2 +- lib/cryptodev/rte_cryptodev_pmd.h | 2 +- lib/eal/common/eal_common_devargs.c | 4 ++-- lib/eal/common/eal_common_log.c | 1 + lib/eal/common/eal_common_options.c | 2 +- lib/eal/common/eal_private.h | 1 + lib/eal/freebsd/include/rte_os.h | 10 ++++++++ lib/eal/include/rte_bus.h | 5 ++-- lib/eal/include/rte_class.h | 6 ++--- lib/eal/include/rte_dev.h | 5 ++-- lib/eal/include/rte_devargs.h | 3 +-- lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 15 ++++++------ lib/eal/linux/include/rte_os.h | 10 ++++++++ lib/eal/windows/eal_alarm.c | 1 + lib/eal/windows/include/rte_os.h | 27 ++++++++++++++++++++++ lib/efd/rte_efd.c | 2 +- lib/ethdev/rte_ethdev_core.h | 2 +- lib/hash/rte_fbk_hash.h | 1 - lib/hash/rte_thash.c | 2 ++ lib/ip_frag/rte_ip_frag.h | 4 ++-- lib/mempool/rte_mempool.c | 2 +- lib/mempool/rte_mempool.h | 9 ++++---- lib/pci/rte_pci.h | 1 - lib/ring/rte_ring_core.h | 1 - lib/table/rte_swx_table.h | 7 +++--- lib/table/rte_swx_table_selector.h | 5 ++-- lib/vhost/iotlb.c | 11 +++++---- lib/vhost/rte_vdpa_dev.h | 2 +- lib/vhost/vdpa.c | 2 +- 63 files changed, 176 insertions(+), 123 deletions(-)
drivers/bus/auxiliary/private.h +1 -0
@@ -7,6 +7,7 @@#include <stdbool.h> #include <stdio.h> +#include <sys/queue.h> #include "rte_bus_auxiliary.h"
drivers/bus/auxiliary/rte_bus_auxiliary.h +2 -3
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -113,7 +112,7 @@ typedef int (rte_auxiliary_dma_unmap_t)(struct rte_auxiliary_device *dev,* A structure describing an auxiliary device. */ struct rte_auxiliary_device { -TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ +RTE_TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ struct rte_device device;/**< Inherit core device */ char name[RTE_DEV_NAME_MAX_LEN +1 ];/**< ASCII device name */ struct rte_intr_handle intr_handle;/**< Interrupt handle */
@@ -124,7 +123,7 @@ struct rte_auxiliary_device {* A structure describing an auxiliary driver. */ struct rte_auxiliary_driver { -TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_auxiliary_bus *bus;/**< Auxiliary bus reference. */ rte_auxiliary_match_t *match;/**< Device match function. */
drivers/bus/dpaa/dpaa_bus.c +2 -2
@@ -105,7 +105,7 @@ dpaa_add_to_device_list(struct rte_dpaa_device *newdev)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { comp =compare_dpaa_devices (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
@@ -245,7 +245,7 @@ dpaa_clean_device_list(void)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) {TAILQ_REMOVE (&rte_dpaa_bus.device_list, dev, next);free (dev); dev =NULL ;
drivers/bus/fslmc/fslmc_bus.c +2 -2
@@ -45,7 +45,7 @@ cleanup_fslmc_device_list(void)struct rte_dpaa2_device *dev;struct rte_dpaa2_device *t_dev; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) {TAILQ_REMOVE (&rte_fslmc_bus.device_list, dev, next);free (dev); dev =NULL ;
@@ -82,7 +82,7 @@ insert_in_device_list(struct rte_dpaa2_device *newdev)struct rte_dpaa2_device *dev =NULL ;struct rte_dpaa2_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { comp =compare_dpaa2_devname (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
drivers/bus/fslmc/fslmc_vfio.c +6 -3
@@ -808,7 +808,8 @@ fslmc_vfio_process_group(void)bool is_dpmcp_in_blocklist = false, is_dpio_in_blocklist = false;int dpmcp_count =0 , dpio_count =0 , current_device; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { dpmcp_count++; if (dev->device.devargs &&
@@ -825,7 +826,8 @@ fslmc_vfio_process_group(void)/* Search the MCP as that should be initialized first. */ current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { current_device++; if (dev->device.devargs &&
@@ -872,7 +874,8 @@ fslmc_vfio_process_group(void) } current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_IO ) current_device++; if (dev->device.devargs &&
drivers/bus/ifpga/rte_bus_ifpga.h +4 -4
@@ -28,9 +28,9 @@ struct rte_afu_device;struct rte_afu_driver ;/** Double linked list of Intel FPGA AFU device. */ -TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device); +RTE_TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device);/** Double linked list of Intel FPGA AFU device drivers. */ -TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver); +RTE_TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver);#define IFPGA_BUS_BITSTREAM_PATH_MAX_LEN 256
@@ -71,7 +71,7 @@ struct rte_afu_shared {* A structure describing a AFU device. */ struct rte_afu_device { -TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ +RTE_TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ struct rte_device device;/**< Inherit core device */ struct rte_rawdev *rawdev;/**< Point Rawdev */ struct rte_afu_id id;/**< AFU id within FPGA. */
@@ -105,7 +105,7 @@ typedef int (afu_remove_t)(struct rte_afu_device *);* A structure describing a AFU device. */ struct rte_afu_driver { -TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
drivers/bus/pci/pci_params.c +2 -0
@@ -2,6 +2,8 @@* Copyright 2018 Gaëtan Rivet */ +#include <sys/queue.h> +#include <rte_bus.h> #include <rte_bus_pci.h> #include <rte_dev.h>
drivers/bus/pci/rte_bus_pci.h +6 -7
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -37,16 +36,16 @@ struct rte_pci_device;struct rte_pci_driver ;/** List of PCI devices */ -TAILQ_HEAD (rte_pci_device_list, rte_pci_device); +RTE_TAILQ_HEAD (rte_pci_device_list, rte_pci_device);/** List of PCI drivers */ -TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver); +RTE_TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver);/* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next)#define FOREACH_DRIVER_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next)struct rte_devargs ;
@@ -64,7 +63,7 @@ enum rte_pci_kernel_driver {* A structure describing a PCI device. */ struct rte_pci_device { -TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ +RTE_TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ struct rte_device device;/**< Inherit core device */ struct rte_pci_addr addr;/**< PCI location. */ struct rte_pci_id id;/**< PCI ID. */
@@ -160,7 +159,7 @@ typedef int (pci_dma_unmap_t)(struct rte_pci_device *dev, void *addr,* A structure describing a PCI driver. */ struct rte_pci_driver { -TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_pci_bus *bus;/**< PCI bus reference. */ rte_pci_probe_t *probe;/**< Device probe function. */
drivers/bus/pci/windows/pci.c +3 -0
@@ -1,6 +1,9 @@/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2020 Mellanox Technologies, Ltd */ + +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/pci/windows/pci_netuio.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2020 Intel Corporation. */ +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/vdev/rte_bus_vdev.h +3 -4
@@ -15,12 +15,11 @@extern "C" {#endif -#include <sys/queue.h> #include <rte_dev.h> #include <rte_devargs.h> struct rte_vdev_device { -TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ +RTE_TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ struct rte_device device;/**< Inherit core device */ };
@@ -53,7 +52,7 @@ rte_vdev_device_args(const struct rte_vdev_device *dev) }/** Double linked list of virtual device drivers. */ -TAILQ_HEAD (vdev_driver_list, rte_vdev_driver); +RTE_TAILQ_HEAD (vdev_driver_list, rte_vdev_driver);/** * Probe function called for each virtual device driver once.
@@ -107,7 +106,7 @@ typedef int (rte_vdev_dma_unmap_t)(struct rte_vdev_device *dev, void *addr,* A virtual device driver abstraction. */ struct rte_vdev_driver { -TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherited general driver. */ rte_vdev_probe_t *probe;/**< Virtual device probe function. */ rte_vdev_remove_t *remove;/**< Virtual device remove function. */
drivers/bus/vdev/vdev.c +2 -1
@@ -100,7 +100,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)struct vdev_custom_scan *custom_scan, *tmp_scan;rte_spinlock_lock (&vdev_custom_scan_lock); - TAILQ_FOREACH_SAFE(custom_scan, &vdev_custom_scans, next, tmp_scan) { +RTE_TAILQ_FOREACH_SAFE (custom_scan, &vdev_custom_scans, next, + tmp_scan) {if (custom_scan->callback != callback || (custom_scan->user_arg != (void *)-1 && custom_scan->user_arg != user_arg))
drivers/bus/vmbus/rte_bus_vmbus.h +6 -7
@@ -20,7 +20,6 @@ extern "C" {#include <limits.h> #include <stdbool.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -38,15 +37,15 @@ struct rte_vmbus_bus;struct vmbus_channel ;struct vmbus_mon_page ; -TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); -TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver); +RTE_TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); +RTE_TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver);/* VMBus iterators */ #define FOREACH_DEVICE_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next)#define FOREACH_DRIVER_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next)/** Maximum number of VMBUS resources. */ enum hv_uio_map {
@@ -62,7 +61,7 @@ enum hv_uio_map {* A structure describing a VMBUS device. */ struct rte_vmbus_device { -TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ +RTE_TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ const struct rte_vmbus_driver *driver;/**< Associated driver */ struct rte_device device;/**< Inherit core device */ rte_uuid_t device_id;/**< VMBUS device id */
@@ -93,7 +92,7 @@ typedef int (vmbus_remove_t)(struct rte_vmbus_device *);* A structure describing a VMBUS driver. */ struct rte_vmbus_driver { -TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ struct rte_driver driver;struct rte_vmbus_bus *bus;/**< VM bus reference. */ vmbus_probe_t *probe;/**< Device Probe function. */
drivers/net/bnxt/tf_ulp/bnxt_ulp.c +1 -1
@@ -2018,7 +2018,7 @@ bnxt_ulp_cntxt_list_del(struct bnxt_ulp_context *ulp_ctx)struct ulp_context_list_entry *entry, *temp;rte_spinlock_lock (&bnxt_ulp_ctxt_lock); - TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) {if (entry->ulp_ctx == ulp_ctx) {TAILQ_REMOVE (&ulp_cntx_list, entry, next);rte_free (entry);
drivers/net/bonding/rte_eth_bond_flow.c +1 -1
@@ -157,7 +157,7 @@ bond_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *err)/* Destroy all bond flows from its slaves instead of flushing them to * keep the LACP flow or any other external flows. */ - TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { lret =bond_flow_destroy (dev, flow, err);if (unlikely (lret !=0 )) ret = lret;
drivers/net/failsafe/failsafe_flow.c +1 -1
@@ -180,7 +180,7 @@ fs_flow_flush(struct rte_eth_dev *dev,return ret; } } - TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) {TAILQ_REMOVE (&PRIV (dev)->flow_list, flow, next);fs_flow_release (&flow); }
drivers/net/i40e/i40e_ethdev.c +5 -4
@@ -5436,7 +5436,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* VSI has child to attach, release child first */ if (vsi->veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) { + RTE_TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5444,7 +5444,8 @@ i40e_vsi_release(struct i40e_vsi *vsi) }if (vsi->floating_veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->floating_veb->head, list, temp) { +RTE_TAILQ_FOREACH_SAFE (vsi_list, &vsi->floating_veb->head, + list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5452,7 +5453,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* Remove all macvlan filters of the VSI */ i40e_vsi_remove_all_macvlan_filter (vsi); - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)rte_free (f); if (vsi->type != I40E_VSI_MAIN &&
@@ -6055,7 +6056,7 @@ i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on) i =0 ;/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { mac_filter[i] = f->mac_info; ret =i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr);if (ret) {
drivers/net/i40e/i40e_ethdev.h +1 -0
@@ -6,6 +6,7 @@#define _I40E_ETHDEV_H_#include <stdint.h> +#include <sys/queue.h> #include <rte_time.h> #include <rte_kvargs.h>
drivers/net/i40e/i40e_flow.c +3 -3
@@ -4917,7 +4917,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf) }/* Delete FDIR flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_FDIR ) {TAILQ_REMOVE (&pf->flow_list, flow, node); }
@@ -4972,7 +4972,7 @@ i40e_flow_flush_ethertype_filter(struct i40e_pf *pf) }/* Delete ethertype flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_ETHERTYPE ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
@@ -5000,7 +5000,7 @@ i40e_flow_flush_tunnel_filter(struct i40e_pf *pf) }/* Delete tunnel flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_TUNNEL ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
drivers/net/i40e/i40e_hash.c +1 -1
@@ -1366,7 +1366,7 @@ i40e_hash_filter_flush(struct i40e_pf *pf) {struct rte_flow *flow, *next; - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) {if (flow->filter_type !=RTE_ETH_FILTER_HASH )continue ;
drivers/net/i40e/rte_pmd_i40e.c +3 -3
@@ -216,7 +216,7 @@ i40e_vsi_rm_mac_filter(struct i40e_vsi *vsi)void *temp;/* remove all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { vlan_num = vsi->vlan_num; filter_type = f->mac_info.filter_type; if (filter_type == I40E_MACVLAN_PERFECT_MATCH ||
@@ -274,7 +274,7 @@ i40e_vsi_restore_mac_filter(struct i40e_vsi *vsi)void *temp;/* restore all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) {if (f->mac_info.filter_type ==I40E_MACVLAN_PERFECT_MATCH || f->mac_info.filter_type ==I40E_MACVLAN_HASH_MATCH ) {/**
@@ -563,7 +563,7 @@ rte_pmd_i40e_set_vf_mac_addr(uint16_t port, uint16_t vf_id,rte_ether_addr_copy (mac_addr, &vf->mac_addr);/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)if (i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr) !=I40E_SUCCESS )PMD_DRV_LOG (WARNING ,"Delete MAC failed" );
drivers/net/iavf/iavf_generic_flow.c +7 -7
@@ -1637,7 +1637,7 @@ iavf_flow_init(struct iavf_adapter *ad)TAILQ_INIT (&vf->dist_parser_list);rte_spinlock_init (&vf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1663,7 +1663,7 @@ iavf_flow_uninit(struct iavf_adapter *ad)struct iavf_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1733,7 +1733,7 @@ iavf_unregister_parser(struct iavf_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -1917,7 +1917,7 @@ iavf_parse_engine_create(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -1946,7 +1946,7 @@ iavf_parse_engine_validate(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2089,7 +2089,7 @@ iavf_flow_is_valid(struct rte_flow *flow)void *temp;if (flow && flow->engine) { - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine == flow->engine)return true; }
@@ -2142,7 +2142,7 @@ iavf_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { ret =iavf_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
drivers/net/ice/ice_dcf_ethdev.c +1 -0
@@ -4,6 +4,7 @@#include <errno.h> #include <stdbool.h> +#include <sys/queue.h> #include <sys/types.h> #include <unistd.h>
drivers/net/ice/ice_ethdev.c +2 -2
@@ -1104,7 +1104,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (!vsi || !vsi->mac_num)return -EINVAL ; - TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { ret =ice_remove_mac_filter (vsi, &m_f->mac_info.mac_addr);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
@@ -1115,7 +1115,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (vsi->vlan_num ==0 )return 0 ; - TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { ret =ice_remove_vlan_filter (vsi, &v_f->vlan_info.vlan);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
drivers/net/ice/ice_generic_flow.c +7 -7
@@ -1820,7 +1820,7 @@ ice_flow_init(struct ice_adapter *ad)TAILQ_INIT (&pf->dist_parser_list);rte_spinlock_init (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1846,7 +1846,7 @@ ice_flow_uninit(struct ice_adapter *ad)struct ice_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1946,7 +1946,7 @@ ice_unregister_parser(struct ice_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -2272,7 +2272,7 @@ ice_parse_engine_create(struct ice_adapter *ad,void *meta =NULL ;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {int ret; if (parser_node->parser->parse_pattern_action(ad,
@@ -2305,7 +2305,7 @@ ice_parse_engine_validate(struct ice_adapter *ad,struct ice_flow_parser_node *parser_node;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2477,7 +2477,7 @@ ice_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { ret =ice_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
@@ -2541,7 +2541,7 @@ ice_flow_redirect(struct ice_adapter *ad,rte_spinlock_lock (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {if (!p_flow->engine->redirect)continue ; ret = p_flow->engine->redirect (ad, p_flow, rd);
drivers/net/ipn3ke/ipn3ke_flow.c +1 -1
@@ -1231,7 +1231,7 @@ ipn3ke_flow_flush(struct rte_eth_dev *dev,struct ipn3ke_hw *hw =IPN3KE_DEV_PRIVATE_TO_HW (dev);struct rte_flow *flow, *temp; - TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) {TAILQ_REMOVE (&hw->flow_list, flow, next);rte_free (flow); }
drivers/net/mlx5/mlx5_flow_dv.c +1 -1
@@ -15099,7 +15099,7 @@ __flow_dv_destroy_sub_policy_rules(struct rte_eth_dev *dev, policy->act_cnt[i].fate_action == MLX5_FLOW_FATE_MTR) next_fm =mlx5_flow_meter_find (priv, policy->act_cnt[i].next_mtr_id,NULL ); -TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], +RTE_TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], next_port, tmp) {claim_zero (mlx5_flow_os_destroy_flow (color_rule->rule)); tbl = container_of(color_rule->matcher->tbl,
drivers/net/mlx5/mlx5_flow_meter.c +1 -1
@@ -2168,7 +2168,7 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) priv->mtr_idx_tbl =NULL ; } }else { - TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { fm = &legacy_fm->fm;if (mlx5_flow_meter_params_flush (dev, fm,0 )) return -rte_mtr_error_set(error, EINVAL,
drivers/net/softnic/rte_eth_softnic_flow.c +2 -1
@@ -2207,7 +2207,8 @@ pmd_flow_flush(struct rte_eth_dev *dev,void *temp;int status; - TAILQ_FOREACH_SAFE(flow, &table->flows, node, temp) { +RTE_TAILQ_FOREACH_SAFE (flow, &table->flows, node, + temp) {/* Rule delete. */ status = softnic_pipeline_table_rule_delete (softnic,
drivers/net/softnic/rte_eth_softnic_swq.c +1 -1
@@ -39,7 +39,7 @@ softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p) {struct softnic_swq *swq, *tswq; - TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) { + RTE_TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) {if ((strncmp (swq->name,"RXQ" ,strlen ("RXQ" )) ==0 ) || (strncmp (swq->name,"TXQ" ,strlen ("TXQ" )) ==0 ))continue ;
drivers/raw/dpaa2_qdma/dpaa2_qdma.c +1 -1
@@ -1606,7 +1606,7 @@ remove_hw_queues_from_list(struct dpaa2_dpdmai_dev *dpdmai_dev)DPAA2_QDMA_FUNC_TRACE (); - TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) { + RTE_TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) {if (queue->dpdmai_dev == dpdmai_dev) {TAILQ_REMOVE (&qdma_queue_list, queue, next);rte_free (queue);
lib/bbdev/rte_bbdev.h +1 -1
@@ -434,7 +434,7 @@ struct rte_bbdev_callback;struct rte_intr_handle ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback); +RTE_TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback);/** * @internal The data structure associated with a device. Drivers can access
lib/cryptodev/rte_cryptodev.h +1 -1
@@ -879,7 +879,7 @@ typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,struct rte_cryptodev_callback ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback); +RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback);/** * Structure used to hold information about the callbacks to be called for a
lib/cryptodev/rte_cryptodev_pmd.h +1 -1
@@ -66,7 +66,7 @@ struct rte_cryptodev_global {/* Cryptodev driver, containing the driver ID */ struct cryptodev_driver { -TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ const struct rte_driver *driver;uint8_t id; };
lib/eal/common/eal_common_devargs.c +2 -2
@@ -291,7 +291,7 @@ rte_devargs_insert(struct rte_devargs **da)if (*da ==NULL || (*da)->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) {if (listed_da == *da)/* devargs already in the list */ return 0 ;
@@ -358,7 +358,7 @@ rte_devargs_remove(struct rte_devargs *devargs)if (devargs ==NULL || devargs->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {if (strcmp (d->bus->name, devargs->bus->name) ==0 &&strcmp (d->name, devargs->name) ==0 ) {TAILQ_REMOVE (&devargs_list, d, next);
lib/eal/common/eal_common_log.c +1 -0
@@ -10,6 +10,7 @@#include <errno.h> #include <regex.h> #include <fnmatch.h> +#include <sys/queue.h> #include <rte_eal.h> #include <rte_log.h>
lib/eal/common/eal_common_options.c +1 -1
@@ -283,7 +283,7 @@ eal_option_device_parse(void)void *tmp;int ret =0 ; - TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) {if (ret ==0 ) { ret =rte_devargs_add (devopt->type, devopt->arg);if (ret)
lib/eal/common/eal_private.h +1 -0
@@ -8,6 +8,7 @@#include <stdbool.h> #include <stdint.h> #include <stdio.h> +#include <sys/queue.h> #include <rte_dev.h> #include <rte_lcore.h>
lib/eal/freebsd/include/rte_os.h +10 -0
@@ -11,6 +11,16 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type)typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +2 -3
@@ -19,13 +19,12 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_log.h> #include <rte_dev.h> /** Double linked list of buses */ -TAILQ_HEAD (rte_bus_list, rte_bus); +RTE_TAILQ_HEAD (rte_bus_list, rte_bus);/**
@@ -250,7 +249,7 @@ typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);* A structure describing a generic bus. */ struct rte_bus { -TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ +RTE_TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ const char *name;/**< Name of the bus */ rte_bus_scan_t scan;/**< Scan for devices attached to bus */ rte_bus_probe_t probe;/**< Probe devices on bus */
lib/eal/include/rte_class.h +2 -4
@@ -22,18 +22,16 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */ -TAILQ_HEAD (rte_class_list, rte_class); +RTE_TAILQ_HEAD (rte_class_list, rte_class);/** * A structure describing a generic device class. */ struct rte_class { -TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ +RTE_TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ const char *name;/**< Name of the class */ rte_dev_iterate_t dev_iterate;/**< Device iterator. */ };
lib/eal/include/rte_dev.h +2 -3
@@ -18,7 +18,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_compat.h>
@@ -75,7 +74,7 @@ struct rte_mem_resource {* A structure describing a device driver. */ struct rte_driver { -TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ const char *name;/**< Driver name. */ const char *alias;/**< Driver alias. */ };
@@ -90,7 +89,7 @@ struct rte_driver {* A structure describing a generic device. */ struct rte_device { -TAILQ_ENTRY (rte_device) next;/**< Next device */ +RTE_TAILQ_ENTRY (rte_device) next;/**< Next device */ const char *name;/**< Device name */ const struct rte_driver *driver;/**< Driver assigned after probing */ const struct rte_bus *bus;/**< Bus handle assigned on scan */
lib/eal/include/rte_devargs.h +1 -2
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
@@ -76,7 +75,7 @@ enum rte_devtype {*/ struct rte_devargs {/** Next in list. */ -TAILQ_ENTRY (rte_devargs) next; +RTE_TAILQ_ENTRY (rte_devargs) next;/** Type of device. */ enum rte_devtype type;/** Device policy. */
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +7 -8
@@ -15,17 +15,16 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { -TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ +RTE_TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ void *data;/**< Pointer to the data referenced by this tailq entry */ };/** dummy */ -TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry); +RTE_TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry);#define RTE_TAILQ_NAMESIZE 32
@@ -48,7 +47,7 @@ struct rte_tailq_elem {* rte_eal_tailqs_init() */ struct rte_tailq_head *head; -TAILQ_ENTRY (rte_tailq_elem) next; +RTE_TAILQ_ENTRY (rte_tailq_elem) next;const char name[RTE_TAILQ_NAMESIZE ]; };
@@ -126,10 +125,10 @@ RTE_INIT(tailqinitfn_ ##t) \ }/* This macro permits both remove and free var within the loop safely.*/ -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif
lib/eal/linux/include/rte_os.h +10 -0
@@ -11,6 +11,16 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type)#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/eal_alarm.c +1 -0
@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h>
lib/eal/windows/include/rte_os.h +27 -0
@@ -18,6 +18,33 @@extern "C" {#endif +/* These macros are compatible with bundled sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) \ +struct name { \ + struct type *tqh_first; \ + struct type **tqh_last; \ +} +#define RTE_TAILQ_ENTRY (type) \ +struct { \ + struct type *tqe_next; \ + struct type **tqe_prev; \ +} +#define RTE_TAILQ_FOREACH (var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FIRST (head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT (elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD (name, type) \ +struct name { \ + struct type *stqh_first; \ + struct type **stqh_last; \ +} +#define RTE_STAILQ_ENTRY (type) \ +struct { \ + struct type *stqe_next; \ +} +/* cpu_set macros implementation */ #define RTE_CPU_AND (dst, src1, src2) CPU_AND(dst, src1, src2)#define RTE_CPU_OR (dst, src1, src2) CPU_OR(dst, src1, src2)
lib/efd/rte_efd.c +1 -1
@@ -759,7 +759,7 @@ rte_efd_free(struct rte_efd_table *table) efd_list =RTE_TAILQ_CAST (rte_efd_tailq.head, rte_efd_list);rte_mcfg_tailq_write_lock (); - TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(te, efd_list, next, temp) {if (te->data == (void *) table) {TAILQ_REMOVE (efd_list, te, next);rte_free (te);
lib/ethdev/rte_ethdev_core.h +1 -1
@@ -21,7 +21,7 @@struct rte_eth_dev_callback ;/** @internal Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback); +RTE_TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback);struct rte_eth_dev ;
lib/hash/rte_fbk_hash.h +0 -1
@@ -17,7 +17,6 @@#include <stdint.h> #include <errno.h> -#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/hash/rte_thash.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2021 Intel Corporation */ +#include <sys/queue.h> +#include <rte_thash.h> #include <rte_tailq.h> #include <rte_random.h>
lib/ip_frag/rte_ip_frag.h +2 -2
@@ -62,7 +62,7 @@ struct ip_frag_key {* First two entries in the frags[] array are for the last and first fragments. */ struct ip_frag_pkt { -TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ +RTE_TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ struct ip_frag_key key;/**< fragmentation key */ uint64_t start;/**< creation timestamp */ uint32_t total_size;/**< expected reassembled size */
@@ -83,7 +83,7 @@ struct rte_ip_frag_death_row {/**< mbufs to be freed */ }; -TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ +RTE_TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ /** fragmentation table statistics */ struct ip_frag_tbl_stat {
lib/mempool/rte_mempool.c +1 -1
@@ -1337,7 +1337,7 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),rte_mcfg_mempool_read_lock (); - TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { + RTE_TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { (*func)((struct rte_mempool *) te->data, arg); }
lib/mempool/rte_mempool.h +4 -5
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
@@ -141,7 +140,7 @@ struct rte_mempool_objsz {* double-frees. */ struct rte_mempool_objhdr { -STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the object. */ rte_iova_t iova;/**< IO address of the object. */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -152,7 +151,7 @@ struct rte_mempool_objhdr {/** * A list of object headers type */ -STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr); +RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr);#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -171,7 +170,7 @@ struct rte_mempool_objtlr {/** * A list of memory where objects are stored */ -STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr); +RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr);/** * Callback used to free a memory chunk
@@ -186,7 +185,7 @@ typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,* and physically contiguous. */ struct rte_mempool_memhdr { -STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the chunk */ void *addr;/**< Virtual address of the chunk */ rte_iova_t iova;/**< IO address of the chunk */
lib/pci/rte_pci.h +0 -1
@@ -18,7 +18,6 @@ extern "C" {#include <stdio.h> #include <limits.h> -#include <sys/queue.h> #include <inttypes.h> #include <sys/types.h>
lib/ring/rte_ring_core.h +0 -1
@@ -26,7 +26,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> #include <string.h> -#include <sys/queue.h> #include <errno.h> #include <rte_common.h> #include <rte_config.h>
lib/table/rte_swx_table.h +4 -3
@@ -16,7 +16,8 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> + +#include <rte_os.h> /** Match type. */ enum rte_swx_table_match_type {
@@ -68,7 +69,7 @@ struct rte_swx_table_entry {/** Used to facilitate the membership of this table entry to a * linked list. */ -TAILQ_ENTRY (rte_swx_table_entry) node; +RTE_TAILQ_ENTRY (rte_swx_table_entry) node;/** Key value for the current entry. Array of *key_size* bytes or NULL * if the *key_size* for the current table is 0.
@@ -111,7 +112,7 @@ struct rte_swx_table_entry { };/** List of table entries. */ -TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry); +RTE_TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry);/** * Table memory footprint get
lib/table/rte_swx_table_selector.h +2 -3
@@ -16,7 +16,6 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> #include <rte_compat.h>
@@ -56,7 +55,7 @@ struct rte_swx_table_selector_params {/** Group member parameters. */ struct rte_swx_table_selector_member {/** Linked list connectivity. */ -TAILQ_ENTRY (rte_swx_table_selector_member) node; +RTE_TAILQ_ENTRY (rte_swx_table_selector_member) node;/** Member ID. */ uint32_t member_id;
@@ -66,7 +65,7 @@ struct rte_swx_table_selector_member { };/** List of group members. */ -TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member); +RTE_TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member);/** Group parameters. */ struct rte_swx_table_selector_group {
lib/vhost/iotlb.c +6 -5
@@ -32,7 +32,7 @@ vhost_user_iotlb_pending_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_pending_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -100,7 +100,8 @@ vhost_user_iotlb_pending_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { +RTE_TAILQ_FOREACH_SAFE (node, &vq->iotlb_pending_list, next, + temp_node) {if (node->iova < iova)continue ;if (node->iova >= iova + size)
@@ -121,7 +122,7 @@ vhost_user_iotlb_cache_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -141,7 +142,7 @@ vhost_user_iotlb_cache_random_evict(struct vhost_virtqueue *vq) entry_idx =rte_rand () % vq->iotlb_cache_nr; - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {if (!entry_idx) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node);
@@ -218,7 +219,7 @@ vhost_user_iotlb_cache_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {/* Sorted list */ if (unlikely (iova + size < node->iova))break ;
lib/vhost/rte_vdpa_dev.h +1 -1
@@ -71,7 +71,7 @@ struct rte_vdpa_dev_ops {* vdpa device structure includes device address and device operations. */ struct rte_vdpa_device { -TAILQ_ENTRY (rte_vdpa_device) next; +RTE_TAILQ_ENTRY (rte_vdpa_device) next;/** Generic device information */ struct rte_device *device;/** vdpa device operations */
lib/vhost/vdpa.c +1 -1
@@ -115,7 +115,7 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)int ret =-1 ;rte_spinlock_lock (&vdpa_device_list_lock); - TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) { + RTE_TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {if (dev != cur_dev)continue ;
Signature · 1 line
2.30.2
Re: [dpdk-dev] [PATCH v8] eal: remove sys/queue.h from public headers.
2021-08-23 13:03 (UTC+0000), William Tu:
[...]
lib/eal/include/rte_tailq.h RTE_INIT(tailqinitfn_ ##t) \ · line 133
Quoted 11 lines
/* This macro permits both remove and free var within the loop safely.*/
lib/eal/include/rte_tailq.h +4
-4-#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif
1. Unlike TAILQ_FOREACH_SAFE, new RTE_ macro doesn't need #ifdef.
2. There should be no period at the end of the subject (./devtools/check-git-log.sh would show that).
Except for these nits,
Re: [dpdk-dev] [PATCH v8] eal: remove sys/queue.h from public headers.
Quoted 17 lines · Dmitry Kozlyuk
2021-08-23 13:03 (UTC+0000), William Tu:
[...]lib/eal/include/rte_tailq.h RTE_INIT(tailqinitfn_ ##t) \ · line 133
Quoted 11 lines
/* This macro permits both remove and free var within the loop safely.*/
lib/eal/include/rte_tailq.h +4
-4-#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#ifndef RTE_TAILQ_FOREACH_SAFE +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar))#endif 1. Unlike
TAILQ_FOREACH_SAFE, newRTE_macro doesn't need #ifdef.
Quoted 5 lines
2. There should be no period at the end of the subject (
./devtools/check-git-log.shwould show that).Except for these nits,
Acked-by Dmitry Kozlyuk <[email protected]>
Thanks for your review.
I will fix it and send another version.
William
PATCH v9 1/1 eal: remove sys/queue.h from public headers
In reply to William TuCurrently there are some public headers that include 'sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.
One solution is to install the 'lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.
The patch fixes it by removing the "#include <sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such as TAILQ_xxx, we replace it by the ones with RTE_ prefix. For Windows, we copy the definitions from <sys/queue.h> to rte_os.h in Windows EAL. Note that these RTE_ macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).
Additionally, the TAILQ_FOREACH_SAFE is not part of <sys/queue.h>, the patch replaces it with RTE_TAILQ_FOREACH_SAFE.
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
---
v8-v9:
* Acked by Dmitry Kozliuk
* remove #ifdef at RTE_TAILQ_FOREACH_SAFE
* remove period at title
v7-v8:
* remove duplicate RTE_TAILQ_FOREACH_SAFE at rte_os.h put the macro at rte_tailq.h
* remove inline comments
* diff
https://github.com/williamtu/dpdk/compare/a4144ff11b..6cb7cd8daf
v6-v7:
* remove some redundant "#incldue <sys/queue.h>"
* remove extra newline, add comment at rte_os.h for windows use of bundled sys/queue
v5-v6:
* fix tab/indent issue, fix type and spelling
* fix duplicate RTE_TAILQ_FOREACH_SAFE
* fix build error due to drivers/net/mlx5/mlx5_flow_meter.c
---
drivers/bus/auxiliary/private.h | 1 + drivers/bus/auxiliary/rte_bus_auxiliary.h | 5 ++-- drivers/bus/dpaa/dpaa_bus.c | 4 ++-- drivers/bus/fslmc/fslmc_bus.c | 4 ++-- drivers/bus/fslmc/fslmc_vfio.c | 9 +++++--- drivers/bus/ifpga/rte_bus_ifpga.h | 8 +++---- drivers/bus/pci/pci_params.c | 2 ++ drivers/bus/pci/rte_bus_pci.h | 13 +++++------ drivers/bus/pci/windows/pci.c | 3 +++ drivers/bus/pci/windows/pci_netuio.c | 2 ++ drivers/bus/vdev/rte_bus_vdev.h | 7 +++--- drivers/bus/vdev/vdev.c | 3 ++- drivers/bus/vmbus/rte_bus_vmbus.h | 13 +++++------ drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 2 +- drivers/net/bonding/rte_eth_bond_flow.c | 2 +- drivers/net/failsafe/failsafe_flow.c | 2 +- drivers/net/i40e/i40e_ethdev.c | 9 ++++---- drivers/net/i40e/i40e_ethdev.h | 1 + drivers/net/i40e/i40e_flow.c | 6 ++--- drivers/net/i40e/i40e_hash.c | 2 +- drivers/net/i40e/rte_pmd_i40e.c | 6 ++--- drivers/net/iavf/iavf_generic_flow.c | 14 +++++------ drivers/net/ice/ice_dcf_ethdev.c | 1 + drivers/net/ice/ice_ethdev.c | 4 ++-- drivers/net/ice/ice_generic_flow.c | 14 +++++------ drivers/net/ipn3ke/ipn3ke_flow.c | 2 +- drivers/net/mlx5/mlx5_flow_dv.c | 2 +- drivers/net/mlx5/mlx5_flow_meter.c | 2 +- drivers/net/softnic/rte_eth_softnic_flow.c | 3 ++- drivers/net/softnic/rte_eth_softnic_swq.c | 2 +- drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 2 +- lib/bbdev/rte_bbdev.h | 2 +- lib/cryptodev/rte_cryptodev.h | 2 +- lib/cryptodev/rte_cryptodev_pmd.h | 2 +- lib/eal/common/eal_common_devargs.c | 4 ++-- lib/eal/common/eal_common_log.c | 1 + lib/eal/common/eal_common_options.c | 2 +- lib/eal/common/eal_private.h | 1 + lib/eal/freebsd/include/rte_os.h | 10 ++++++++ lib/eal/include/rte_bus.h | 5 ++-- lib/eal/include/rte_class.h | 6 ++--- lib/eal/include/rte_dev.h | 5 ++-- lib/eal/include/rte_devargs.h | 3 +-- lib/eal/include/rte_log.h | 1 - lib/eal/include/rte_service.h | 1 - lib/eal/include/rte_tailq.h | 15 +++++------- lib/eal/linux/include/rte_os.h | 10 ++++++++ lib/eal/windows/eal_alarm.c | 1 + lib/eal/windows/include/rte_os.h | 27 ++++++++++++++++++++++ lib/efd/rte_efd.c | 2 +- lib/ethdev/rte_ethdev_core.h | 2 +- lib/hash/rte_fbk_hash.h | 1 - lib/hash/rte_thash.c | 2 ++ lib/ip_frag/rte_ip_frag.h | 4 ++-- lib/mempool/rte_mempool.c | 2 +- lib/mempool/rte_mempool.h | 9 ++++---- lib/pci/rte_pci.h | 1 - lib/ring/rte_ring_core.h | 1 - lib/table/rte_swx_table.h | 7 +++--- lib/table/rte_swx_table_selector.h | 5 ++-- lib/vhost/iotlb.c | 11 +++++---- lib/vhost/rte_vdpa_dev.h | 2 +- lib/vhost/vdpa.c | 2 +- 63 files changed, 175 insertions(+), 124 deletions(-)
drivers/bus/auxiliary/private.h +1 -0
@@ -7,6 +7,7 @@#include <stdbool.h> #include <stdio.h> +#include <sys/queue.h> #include "rte_bus_auxiliary.h"
drivers/bus/auxiliary/rte_bus_auxiliary.h +2 -3
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -113,7 +112,7 @@ typedef int (rte_auxiliary_dma_unmap_t)(struct rte_auxiliary_device *dev,* A structure describing an auxiliary device. */ struct rte_auxiliary_device { -TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ +RTE_TAILQ_ENTRY (rte_auxiliary_device) next;/**< Next probed device. */ struct rte_device device;/**< Inherit core device */ char name[RTE_DEV_NAME_MAX_LEN +1 ];/**< ASCII device name */ struct rte_intr_handle intr_handle;/**< Interrupt handle */
@@ -124,7 +123,7 @@ struct rte_auxiliary_device {* A structure describing an auxiliary driver. */ struct rte_auxiliary_driver { -TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_auxiliary_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_auxiliary_bus *bus;/**< Auxiliary bus reference. */ rte_auxiliary_match_t *match;/**< Device match function. */
drivers/bus/dpaa/dpaa_bus.c +2 -2
@@ -105,7 +105,7 @@ dpaa_add_to_device_list(struct rte_dpaa_device *newdev)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { comp =compare_dpaa_devices (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
@@ -245,7 +245,7 @@ dpaa_clean_device_list(void)struct rte_dpaa_device *dev =NULL ;struct rte_dpaa_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) {TAILQ_REMOVE (&rte_dpaa_bus.device_list, dev, next);free (dev); dev =NULL ;
drivers/bus/fslmc/fslmc_bus.c +2 -2
@@ -45,7 +45,7 @@ cleanup_fslmc_device_list(void)struct rte_dpaa2_device *dev;struct rte_dpaa2_device *t_dev; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, t_dev) {TAILQ_REMOVE (&rte_fslmc_bus.device_list, dev, next);free (dev); dev =NULL ;
@@ -82,7 +82,7 @@ insert_in_device_list(struct rte_dpaa2_device *newdev)struct rte_dpaa2_device *dev =NULL ;struct rte_dpaa2_device *tdev =NULL ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { + RTE_TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, tdev) { comp =compare_dpaa2_devname (newdev, dev);if (comp <0 ) {TAILQ_INSERT_BEFORE (dev, newdev, next);
drivers/bus/fslmc/fslmc_vfio.c +6 -3
@@ -808,7 +808,8 @@ fslmc_vfio_process_group(void)bool is_dpmcp_in_blocklist = false, is_dpio_in_blocklist = false;int dpmcp_count =0 , dpio_count =0 , current_device; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { dpmcp_count++; if (dev->device.devargs &&
@@ -825,7 +826,8 @@ fslmc_vfio_process_group(void)/* Search the MCP as that should be initialized first. */ current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_MPORTAL ) { current_device++; if (dev->device.devargs &&
@@ -872,7 +874,8 @@ fslmc_vfio_process_group(void) } current_device =0 ; - TAILQ_FOREACH_SAFE(dev, &rte_fslmc_bus.device_list, next, dev_temp) { +RTE_TAILQ_FOREACH_SAFE (dev, &rte_fslmc_bus.device_list, next, + dev_temp) {if (dev->dev_type ==DPAA2_IO ) current_device++; if (dev->device.devargs &&
drivers/bus/ifpga/rte_bus_ifpga.h +4 -4
@@ -28,9 +28,9 @@ struct rte_afu_device;struct rte_afu_driver ;/** Double linked list of Intel FPGA AFU device. */ -TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device); +RTE_TAILQ_HEAD (ifpga_afu_dev_list, rte_afu_device);/** Double linked list of Intel FPGA AFU device drivers. */ -TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver); +RTE_TAILQ_HEAD (ifpga_afu_drv_list, rte_afu_driver);#define IFPGA_BUS_BITSTREAM_PATH_MAX_LEN 256
@@ -71,7 +71,7 @@ struct rte_afu_shared {* A structure describing a AFU device. */ struct rte_afu_device { -TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ +RTE_TAILQ_ENTRY (rte_afu_device) next;/**< Next in device list. */ struct rte_device device;/**< Inherit core device */ struct rte_rawdev *rawdev;/**< Point Rawdev */ struct rte_afu_id id;/**< AFU id within FPGA. */
@@ -105,7 +105,7 @@ typedef int (afu_remove_t)(struct rte_afu_device *);* A structure describing a AFU device. */ struct rte_afu_driver { -TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ +RTE_TAILQ_ENTRY (rte_afu_driver) next;/**< Next afu driver. */ struct rte_driver driver;/**< Inherit core driver. */ afu_probe_t *probe;/**< Device Probe function. */ afu_remove_t *remove;/**< Device Remove function. */
drivers/bus/pci/pci_params.c +2 -0
@@ -2,6 +2,8 @@* Copyright 2018 Gaëtan Rivet */ +#include <sys/queue.h> +#include <rte_bus.h> #include <rte_bus_pci.h> #include <rte_dev.h>
drivers/bus/pci/rte_bus_pci.h +6 -7
@@ -19,7 +19,6 @@ extern "C" {#include <stdlib.h> #include <limits.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -37,16 +36,16 @@ struct rte_pci_device;struct rte_pci_driver ;/** List of PCI devices */ -TAILQ_HEAD (rte_pci_device_list, rte_pci_device); +RTE_TAILQ_HEAD (rte_pci_device_list, rte_pci_device);/** List of PCI drivers */ -TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver); +RTE_TAILQ_HEAD (rte_pci_driver_list, rte_pci_driver);/* PCI Bus iterators */ #define FOREACH_DEVICE_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.device_list), next)#define FOREACH_DRIVER_ON_PCIBUS (p) \ - TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_pci_bus.driver_list), next)struct rte_devargs ;
@@ -64,7 +63,7 @@ enum rte_pci_kernel_driver {* A structure describing a PCI device. */ struct rte_pci_device { -TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ +RTE_TAILQ_ENTRY (rte_pci_device) next;/**< Next probed PCI device. */ struct rte_device device;/**< Inherit core device */ struct rte_pci_addr addr;/**< PCI location. */ struct rte_pci_id id;/**< PCI ID. */
@@ -160,7 +159,7 @@ typedef int (pci_dma_unmap_t)(struct rte_pci_device *dev, void *addr,* A structure describing a PCI driver. */ struct rte_pci_driver { -TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_pci_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherit core driver. */ struct rte_pci_bus *bus;/**< PCI bus reference. */ rte_pci_probe_t *probe;/**< Device probe function. */
drivers/bus/pci/windows/pci.c +3 -0
@@ -1,6 +1,9 @@/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2020 Mellanox Technologies, Ltd */ + +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/pci/windows/pci_netuio.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2020 Intel Corporation. */ +#include <sys/queue.h> +#include <rte_windows.h> #include <rte_errno.h> #include <rte_log.h>
drivers/bus/vdev/rte_bus_vdev.h +3 -4
@@ -15,12 +15,11 @@extern "C" {#endif -#include <sys/queue.h> #include <rte_dev.h> #include <rte_devargs.h> struct rte_vdev_device { -TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ +RTE_TAILQ_ENTRY (rte_vdev_device) next;/**< Next attached vdev */ struct rte_device device;/**< Inherit core device */ };
@@ -53,7 +52,7 @@ rte_vdev_device_args(const struct rte_vdev_device *dev) }/** Double linked list of virtual device drivers. */ -TAILQ_HEAD (vdev_driver_list, rte_vdev_driver); +RTE_TAILQ_HEAD (vdev_driver_list, rte_vdev_driver);/** * Probe function called for each virtual device driver once.
@@ -107,7 +106,7 @@ typedef int (rte_vdev_dma_unmap_t)(struct rte_vdev_device *dev, void *addr,* A virtual device driver abstraction. */ struct rte_vdev_driver { -TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vdev_driver) next;/**< Next in list. */ struct rte_driver driver;/**< Inherited general driver. */ rte_vdev_probe_t *probe;/**< Virtual device probe function. */ rte_vdev_remove_t *remove;/**< Virtual device remove function. */
drivers/bus/vdev/vdev.c +2 -1
@@ -100,7 +100,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)struct vdev_custom_scan *custom_scan, *tmp_scan;rte_spinlock_lock (&vdev_custom_scan_lock); - TAILQ_FOREACH_SAFE(custom_scan, &vdev_custom_scans, next, tmp_scan) { +RTE_TAILQ_FOREACH_SAFE (custom_scan, &vdev_custom_scans, next, + tmp_scan) {if (custom_scan->callback != callback || (custom_scan->user_arg != (void *)-1 && custom_scan->user_arg != user_arg))
drivers/bus/vmbus/rte_bus_vmbus.h +6 -7
@@ -20,7 +20,6 @@ extern "C" {#include <limits.h> #include <stdbool.h> #include <errno.h> -#include <sys/queue.h> #include <stdint.h> #include <inttypes.h>
@@ -38,15 +37,15 @@ struct rte_vmbus_bus;struct vmbus_channel ;struct vmbus_mon_page ; -TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); -TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver); +RTE_TAILQ_HEAD (rte_vmbus_device_list, rte_vmbus_device); +RTE_TAILQ_HEAD (rte_vmbus_driver_list, rte_vmbus_driver);/* VMBus iterators */ #define FOREACH_DEVICE_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.device_list), next)#define FOREACH_DRIVER_ON_VMBUS (p) \ - TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next) + RTE_TAILQ_FOREACH(p, &(rte_vmbus_bus.driver_list), next)/** Maximum number of VMBUS resources. */ enum hv_uio_map {
@@ -62,7 +61,7 @@ enum hv_uio_map {* A structure describing a VMBUS device. */ struct rte_vmbus_device { -TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ +RTE_TAILQ_ENTRY (rte_vmbus_device) next;/**< Next probed VMBUS device */ const struct rte_vmbus_driver *driver;/**< Associated driver */ struct rte_device device;/**< Inherit core device */ rte_uuid_t device_id;/**< VMBUS device id */
@@ -93,7 +92,7 @@ typedef int (vmbus_remove_t)(struct rte_vmbus_device *);* A structure describing a VMBUS driver. */ struct rte_vmbus_driver { -TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_vmbus_driver) next;/**< Next in list. */ struct rte_driver driver;struct rte_vmbus_bus *bus;/**< VM bus reference. */ vmbus_probe_t *probe;/**< Device Probe function. */
drivers/net/bnxt/tf_ulp/bnxt_ulp.c +1 -1
@@ -2018,7 +2018,7 @@ bnxt_ulp_cntxt_list_del(struct bnxt_ulp_context *ulp_ctx)struct ulp_context_list_entry *entry, *temp;rte_spinlock_lock (&bnxt_ulp_ctxt_lock); - TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(entry, &ulp_cntx_list, next, temp) {if (entry->ulp_ctx == ulp_ctx) {TAILQ_REMOVE (&ulp_cntx_list, entry, next);rte_free (entry);
drivers/net/bonding/rte_eth_bond_flow.c +1 -1
@@ -157,7 +157,7 @@ bond_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *err)/* Destroy all bond flows from its slaves instead of flushing them to * keep the LACP flow or any other external flows. */ - TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &internals->flow_list, next, tmp) { lret =bond_flow_destroy (dev, flow, err);if (unlikely (lret !=0 )) ret = lret;
drivers/net/failsafe/failsafe_flow.c +1 -1
@@ -180,7 +180,7 @@ fs_flow_flush(struct rte_eth_dev *dev,return ret; } } - TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(flow, &PRIV(dev)->flow_list, next, tmp) {TAILQ_REMOVE (&PRIV (dev)->flow_list, flow, next);fs_flow_release (&flow); }
drivers/net/i40e/i40e_ethdev.c +5 -4
@@ -5436,7 +5436,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* VSI has child to attach, release child first */ if (vsi->veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) { + RTE_TAILQ_FOREACH_SAFE(vsi_list, &vsi->veb->head, list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5444,7 +5444,8 @@ i40e_vsi_release(struct i40e_vsi *vsi) }if (vsi->floating_veb) { - TAILQ_FOREACH_SAFE(vsi_list, &vsi->floating_veb->head, list, temp) { +RTE_TAILQ_FOREACH_SAFE (vsi_list, &vsi->floating_veb->head, + list, temp) {if (i40e_vsi_release (vsi_list->vsi) !=I40E_SUCCESS )return -1 ; }
@@ -5452,7 +5453,7 @@ i40e_vsi_release(struct i40e_vsi *vsi)/* Remove all macvlan filters of the VSI */ i40e_vsi_remove_all_macvlan_filter (vsi); - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)rte_free (f); if (vsi->type != I40E_VSI_MAIN &&
@@ -6055,7 +6056,7 @@ i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on) i =0 ;/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { mac_filter[i] = f->mac_info; ret =i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr);if (ret) {
drivers/net/i40e/i40e_ethdev.h +1 -0
@@ -6,6 +6,7 @@#define _I40E_ETHDEV_H_#include <stdint.h> +#include <sys/queue.h> #include <rte_time.h> #include <rte_kvargs.h>
drivers/net/i40e/i40e_flow.c +3 -3
@@ -4917,7 +4917,7 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf) }/* Delete FDIR flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_FDIR ) {TAILQ_REMOVE (&pf->flow_list, flow, node); }
@@ -4972,7 +4972,7 @@ i40e_flow_flush_ethertype_filter(struct i40e_pf *pf) }/* Delete ethertype flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_ETHERTYPE ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
@@ -5000,7 +5000,7 @@ i40e_flow_flush_tunnel_filter(struct i40e_pf *pf) }/* Delete tunnel flows in flow list. */ - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, temp) {if (flow->filter_type ==RTE_ETH_FILTER_TUNNEL ) {TAILQ_REMOVE (&pf->flow_list, flow, node);rte_free (flow);
drivers/net/i40e/i40e_hash.c +1 -1
@@ -1366,7 +1366,7 @@ i40e_hash_filter_flush(struct i40e_pf *pf) {struct rte_flow *flow, *next; - TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) { + RTE_TAILQ_FOREACH_SAFE(flow, &pf->flow_list, node, next) {if (flow->filter_type !=RTE_ETH_FILTER_HASH )continue ;
drivers/net/i40e/rte_pmd_i40e.c +3 -3
@@ -216,7 +216,7 @@ i40e_vsi_rm_mac_filter(struct i40e_vsi *vsi)void *temp;/* remove all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { vlan_num = vsi->vlan_num; filter_type = f->mac_info.filter_type; if (filter_type == I40E_MACVLAN_PERFECT_MATCH ||
@@ -274,7 +274,7 @@ i40e_vsi_restore_mac_filter(struct i40e_vsi *vsi)void *temp;/* restore all the MACs */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) {if (f->mac_info.filter_type ==I40E_MACVLAN_PERFECT_MATCH || f->mac_info.filter_type ==I40E_MACVLAN_HASH_MATCH ) {/**
@@ -563,7 +563,7 @@ rte_pmd_i40e_set_vf_mac_addr(uint16_t port, uint16_t vf_id,rte_ether_addr_copy (mac_addr, &vf->mac_addr);/* Remove all existing mac */ - TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp) + RTE_TAILQ_FOREACH_SAFE(f, &vsi->mac_list, next, temp)if (i40e_vsi_delete_mac (vsi, &f->mac_info.mac_addr) !=I40E_SUCCESS )PMD_DRV_LOG (WARNING ,"Delete MAC failed" );
drivers/net/iavf/iavf_generic_flow.c +7 -7
@@ -1637,7 +1637,7 @@ iavf_flow_init(struct iavf_adapter *ad)TAILQ_INIT (&vf->dist_parser_list);rte_spinlock_init (&vf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1663,7 +1663,7 @@ iavf_flow_uninit(struct iavf_adapter *ad)struct iavf_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1733,7 +1733,7 @@ iavf_unregister_parser(struct iavf_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -1917,7 +1917,7 @@ iavf_parse_engine_create(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -1946,7 +1946,7 @@ iavf_parse_engine_validate(struct iavf_adapter *ad,void *temp;void *meta =NULL ; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2089,7 +2089,7 @@ iavf_flow_is_valid(struct rte_flow *flow)void *temp;if (flow && flow->engine) { - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine == flow->engine)return true; }
@@ -2142,7 +2142,7 @@ iavf_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &vf->flow_list, node, temp) { ret =iavf_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
drivers/net/ice/ice_dcf_ethdev.c +1 -0
@@ -4,6 +4,7 @@#include <errno.h> #include <stdbool.h> +#include <sys/queue.h> #include <sys/types.h> #include <unistd.h>
drivers/net/ice/ice_ethdev.c +2 -2
@@ -1104,7 +1104,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (!vsi || !vsi->mac_num)return -EINVAL ; - TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(m_f, &vsi->mac_list, next, temp) { ret =ice_remove_mac_filter (vsi, &m_f->mac_info.mac_addr);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
@@ -1115,7 +1115,7 @@ ice_remove_all_mac_vlan_filters(struct ice_vsi *vsi)if (vsi->vlan_num ==0 )return 0 ; - TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(v_f, &vsi->vlan_list, next, temp) { ret =ice_remove_vlan_filter (vsi, &v_f->vlan_info.vlan);if (ret !=ICE_SUCCESS ) { ret = -EINVAL ;
drivers/net/ice/ice_generic_flow.c +7 -7
@@ -1820,7 +1820,7 @@ ice_flow_init(struct ice_adapter *ad)TAILQ_INIT (&pf->dist_parser_list);rte_spinlock_init (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->init ==NULL ) {PMD_INIT_LOG (ERR ,"Invalid engine type (%d)" , engine->type);
@@ -1846,7 +1846,7 @@ ice_flow_uninit(struct ice_adapter *ad)struct ice_flow_parser_node *p_parser;void *temp; - TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) {if (engine->uninit) engine->uninit (ad); }
@@ -1946,7 +1946,7 @@ ice_unregister_parser(struct ice_flow_parser *parser,if (list ==NULL )return ; - TAILQ_FOREACH_SAFE(p_parser, list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_parser, list, node, temp) {if (p_parser->parser->engine->type == parser->engine->type) {TAILQ_REMOVE (list, p_parser, node);rte_free (p_parser);
@@ -2272,7 +2272,7 @@ ice_parse_engine_create(struct ice_adapter *ad,void *meta =NULL ;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) {int ret; if (parser_node->parser->parse_pattern_action(ad,
@@ -2305,7 +2305,7 @@ ice_parse_engine_validate(struct ice_adapter *ad,struct ice_flow_parser_node *parser_node;void *temp; - TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(parser_node, parser_list, node, temp) { if (parser_node->parser->parse_pattern_action(ad, parser_node->parser->array, parser_node->parser->array_len,
@@ -2477,7 +2477,7 @@ ice_flow_flush(struct rte_eth_dev *dev,void *temp;int ret =0 ; - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { ret =ice_flow_destroy (dev, p_flow, error);if (ret) {PMD_DRV_LOG (ERR ,"Failed to flush flows" );
@@ -2541,7 +2541,7 @@ ice_flow_redirect(struct ice_adapter *ad,rte_spinlock_lock (&pf->flow_ops_lock); - TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { + RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) {if (!p_flow->engine->redirect)continue ; ret = p_flow->engine->redirect (ad, p_flow, rd);
drivers/net/ipn3ke/ipn3ke_flow.c +1 -1
@@ -1231,7 +1231,7 @@ ipn3ke_flow_flush(struct rte_eth_dev *dev,struct ipn3ke_hw *hw =IPN3KE_DEV_PRIVATE_TO_HW (dev);struct rte_flow *flow, *temp; - TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &hw->flow_list, next, temp) {TAILQ_REMOVE (&hw->flow_list, flow, next);rte_free (flow); }
drivers/net/mlx5/mlx5_flow_dv.c +1 -1
@@ -15099,7 +15099,7 @@ __flow_dv_destroy_sub_policy_rules(struct rte_eth_dev *dev, policy->act_cnt[i].fate_action == MLX5_FLOW_FATE_MTR) next_fm =mlx5_flow_meter_find (priv, policy->act_cnt[i].next_mtr_id,NULL ); -TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], +RTE_TAILQ_FOREACH_SAFE (color_rule, &sub_policy->color_rules[i], next_port, tmp) {claim_zero (mlx5_flow_os_destroy_flow (color_rule->rule)); tbl = container_of(color_rule->matcher->tbl,
drivers/net/mlx5/mlx5_flow_meter.c +1 -1
@@ -2168,7 +2168,7 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) priv->mtr_idx_tbl =NULL ; } }else { - TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) { fm = &legacy_fm->fm;if (mlx5_flow_meter_params_flush (dev, fm,0 )) return -rte_mtr_error_set(error, EINVAL,
drivers/net/softnic/rte_eth_softnic_flow.c +2 -1
@@ -2207,7 +2207,8 @@ pmd_flow_flush(struct rte_eth_dev *dev,void *temp;int status; - TAILQ_FOREACH_SAFE(flow, &table->flows, node, temp) { +RTE_TAILQ_FOREACH_SAFE (flow, &table->flows, node, + temp) {/* Rule delete. */ status = softnic_pipeline_table_rule_delete (softnic,
drivers/net/softnic/rte_eth_softnic_swq.c +1 -1
@@ -39,7 +39,7 @@ softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p) {struct softnic_swq *swq, *tswq; - TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) { + RTE_TAILQ_FOREACH_SAFE(swq, &p->swq_list, node, tswq) {if ((strncmp (swq->name,"RXQ" ,strlen ("RXQ" )) ==0 ) || (strncmp (swq->name,"TXQ" ,strlen ("TXQ" )) ==0 ))continue ;
drivers/raw/dpaa2_qdma/dpaa2_qdma.c +1 -1
@@ -1606,7 +1606,7 @@ remove_hw_queues_from_list(struct dpaa2_dpdmai_dev *dpdmai_dev)DPAA2_QDMA_FUNC_TRACE (); - TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) { + RTE_TAILQ_FOREACH_SAFE(queue, &qdma_queue_list, next, tqueue) {if (queue->dpdmai_dev == dpdmai_dev) {TAILQ_REMOVE (&qdma_queue_list, queue, next);rte_free (queue);
lib/bbdev/rte_bbdev.h +1 -1
@@ -434,7 +434,7 @@ struct rte_bbdev_callback;struct rte_intr_handle ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback); +RTE_TAILQ_HEAD (rte_bbdev_cb_list, rte_bbdev_callback);/** * @internal The data structure associated with a device. Drivers can access
lib/cryptodev/rte_cryptodev.h +1 -1
@@ -879,7 +879,7 @@ typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,struct rte_cryptodev_callback ;/** Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback); +RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback);/** * Structure used to hold information about the callbacks to be called for a
lib/cryptodev/rte_cryptodev_pmd.h +1 -1
@@ -66,7 +66,7 @@ struct rte_cryptodev_global {/* Cryptodev driver, containing the driver ID */ struct cryptodev_driver { -TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (cryptodev_driver) next;/**< Next in list. */ const struct rte_driver *driver;uint8_t id; };
lib/eal/common/eal_common_devargs.c +2 -2
@@ -291,7 +291,7 @@ rte_devargs_insert(struct rte_devargs **da)if (*da ==NULL || (*da)->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(listed_da, &devargs_list, next, tmp) {if (listed_da == *da)/* devargs already in the list */ return 0 ;
@@ -358,7 +358,7 @@ rte_devargs_remove(struct rte_devargs *devargs)if (devargs ==NULL || devargs->bus ==NULL )return -1 ; - TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {if (strcmp (d->bus->name, devargs->bus->name) ==0 &&strcmp (d->name, devargs->name) ==0 ) {TAILQ_REMOVE (&devargs_list, d, next);
lib/eal/common/eal_common_log.c +1 -0
@@ -10,6 +10,7 @@#include <errno.h> #include <regex.h> #include <fnmatch.h> +#include <sys/queue.h> #include <rte_eal.h> #include <rte_log.h>
lib/eal/common/eal_common_options.c +1 -1
@@ -283,7 +283,7 @@ eal_option_device_parse(void)void *tmp;int ret =0 ; - TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { + RTE_TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) {if (ret ==0 ) { ret =rte_devargs_add (devopt->type, devopt->arg);if (ret)
lib/eal/common/eal_private.h +1 -0
@@ -8,6 +8,7 @@#include <stdbool.h> #include <stdint.h> #include <stdio.h> +#include <sys/queue.h> #include <rte_dev.h> #include <rte_lcore.h>
lib/eal/freebsd/include/rte_os.h +10 -0
@@ -11,6 +11,16 @@*/ #include <pthread_np.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type)typedef cpuset_t rte_cpuset_t ;#define RTE_HAS_CPUSET
lib/eal/include/rte_bus.h +2 -3
@@ -19,13 +19,12 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_log.h> #include <rte_dev.h> /** Double linked list of buses */ -TAILQ_HEAD (rte_bus_list, rte_bus); +RTE_TAILQ_HEAD (rte_bus_list, rte_bus);/**
@@ -250,7 +249,7 @@ typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void);* A structure describing a generic bus. */ struct rte_bus { -TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ +RTE_TAILQ_ENTRY (rte_bus) next;/**< Next bus object in linked list */ const char *name;/**< Name of the bus */ rte_bus_scan_t scan;/**< Scan for devices attached to bus */ rte_bus_probe_t probe;/**< Probe devices on bus */
lib/eal/include/rte_class.h +2 -4
@@ -22,18 +22,16 @@extern "C" {#endif -#include <sys/queue.h> -#include <rte_dev.h> /** Double linked list of classes */ -TAILQ_HEAD (rte_class_list, rte_class); +RTE_TAILQ_HEAD (rte_class_list, rte_class);/** * A structure describing a generic device class. */ struct rte_class { -TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ +RTE_TAILQ_ENTRY (rte_class) next;/**< Next device class in linked list */ const char *name;/**< Name of the class */ rte_dev_iterate_t dev_iterate;/**< Device iterator. */ };
lib/eal/include/rte_dev.h +2 -3
@@ -18,7 +18,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_compat.h>
@@ -75,7 +74,7 @@ struct rte_mem_resource {* A structure describing a device driver. */ struct rte_driver { -TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ +RTE_TAILQ_ENTRY (rte_driver) next;/**< Next in list. */ const char *name;/**< Driver name. */ const char *alias;/**< Driver alias. */ };
@@ -90,7 +89,7 @@ struct rte_driver {* A structure describing a generic device. */ struct rte_device { -TAILQ_ENTRY (rte_device) next;/**< Next device */ +RTE_TAILQ_ENTRY (rte_device) next;/**< Next device */ const char *name;/**< Device name */ const struct rte_driver *driver;/**< Driver assigned after probing */ const struct rte_bus *bus;/**< Bus handle assigned on scan */
lib/eal/include/rte_devargs.h +1 -2
@@ -21,7 +21,6 @@ extern "C" {#endif #include <stdio.h> -#include <sys/queue.h> #include <rte_compat.h> #include <rte_bus.h>
@@ -76,7 +75,7 @@ enum rte_devtype {*/ struct rte_devargs {/** Next in list. */ -TAILQ_ENTRY (rte_devargs) next; +RTE_TAILQ_ENTRY (rte_devargs) next;/** Type of device. */ enum rte_devtype type;/** Device policy. */
lib/eal/include/rte_log.h +0 -1
@@ -21,7 +21,6 @@ extern "C" {#include <stdio.h> #include <stdarg.h> #include <stdbool.h> -#include <sys/queue.h> #include <rte_common.h> #include <rte_config.h>
lib/eal/include/rte_service.h +0 -1
@@ -29,7 +29,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_lcore.h>
lib/eal/include/rte_tailq.h +6 -9
@@ -15,17 +15,16 @@extern "C" {#endif -#include <sys/queue.h> #include <stdio.h> #include <rte_debug.h> /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { -TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ +RTE_TAILQ_ENTRY (rte_tailq_entry) next;/**< Pointer entries for a tailq list */ void *data;/**< Pointer to the data referenced by this tailq entry */ };/** dummy */ -TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry); +RTE_TAILQ_HEAD (rte_tailq_entry_head, rte_tailq_entry);#define RTE_TAILQ_NAMESIZE 32
@@ -48,7 +47,7 @@ struct rte_tailq_elem {* rte_eal_tailqs_init() */ struct rte_tailq_head *head; -TAILQ_ENTRY (rte_tailq_elem) next; +RTE_TAILQ_ENTRY (rte_tailq_elem) next;const char name[RTE_TAILQ_NAMESIZE ]; };
@@ -126,12 +125,10 @@ RTE_INIT(tailqinitfn_ ##t) \ }/* This macro permits both remove and free var within the loop safely.*/ -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE (var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ +#define RTE_TAILQ_FOREACH_SAFE (var, head, field, tvar) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \ (var) = (tvar)) -#endif #ifdef __cplusplus }
lib/eal/linux/include/rte_os.h +10 -0
@@ -11,6 +11,16 @@*/ #include <sched.h> +#include <sys/queue.h> + +/* These macros are compatible with system's sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) TAILQ_HEAD(name, type) +#define RTE_TAILQ_ENTRY (type) TAILQ_ENTRY(type) +#define RTE_TAILQ_FOREACH (var, head, field) TAILQ_FOREACH(var, head, field) +#define RTE_TAILQ_FIRST (head) TAILQ_FIRST(head) +#define RTE_TAILQ_NEXT (elem, field) TAILQ_NEXT(elem, field) +#define RTE_STAILQ_HEAD (name, type) STAILQ_HEAD(name, type) +#define RTE_STAILQ_ENTRY (type) STAILQ_ENTRY(type)#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t ;
lib/eal/windows/eal_alarm.c +1 -0
@@ -4,6 +4,7 @@#include <stdatomic.h> #include <stdbool.h> +#include <sys/queue.h> #include <rte_alarm.h> #include <rte_spinlock.h>
lib/eal/windows/include/rte_os.h +27 -0
@@ -18,6 +18,33 @@extern "C" {#endif +/* These macros are compatible with bundled sys/queue.h. */ +#define RTE_TAILQ_HEAD (name, type) \ +struct name { \ + struct type *tqh_first; \ + struct type **tqh_last; \ +} +#define RTE_TAILQ_ENTRY (type) \ +struct { \ + struct type *tqe_next; \ + struct type **tqe_prev; \ +} +#define RTE_TAILQ_FOREACH (var, head, field) \ + for ((var) = RTE_TAILQ_FIRST((head)); \ + (var); \ + (var) = RTE_TAILQ_NEXT((var), field)) +#define RTE_TAILQ_FIRST (head) ((head)->tqh_first) +#define RTE_TAILQ_NEXT (elm, field) ((elm)->field.tqe_next) +#define RTE_STAILQ_HEAD (name, type) \ +struct name { \ + struct type *stqh_first; \ + struct type **stqh_last; \ +} +#define RTE_STAILQ_ENTRY (type) \ +struct { \ + struct type *stqe_next; \ +} +/* cpu_set macros implementation */ #define RTE_CPU_AND (dst, src1, src2) CPU_AND(dst, src1, src2)#define RTE_CPU_OR (dst, src1, src2) CPU_OR(dst, src1, src2)
lib/efd/rte_efd.c +1 -1
@@ -759,7 +759,7 @@ rte_efd_free(struct rte_efd_table *table) efd_list =RTE_TAILQ_CAST (rte_efd_tailq.head, rte_efd_list);rte_mcfg_tailq_write_lock (); - TAILQ_FOREACH_SAFE(te, efd_list, next, temp) { + RTE_TAILQ_FOREACH_SAFE(te, efd_list, next, temp) {if (te->data == (void *) table) {TAILQ_REMOVE (efd_list, te, next);rte_free (te);
lib/ethdev/rte_ethdev_core.h +1 -1
@@ -21,7 +21,7 @@struct rte_eth_dev_callback ;/** @internal Structure to keep track of registered callbacks */ -TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback); +RTE_TAILQ_HEAD (rte_eth_dev_cb_list, rte_eth_dev_callback);struct rte_eth_dev ;
lib/hash/rte_fbk_hash.h +0 -1
@@ -17,7 +17,6 @@#include <stdint.h> #include <errno.h> -#include <sys/queue.h> #ifdef __cplusplusextern "C" {
lib/hash/rte_thash.c +2 -0
@@ -2,6 +2,8 @@* Copyright(c) 2021 Intel Corporation */ +#include <sys/queue.h> +#include <rte_thash.h> #include <rte_tailq.h> #include <rte_random.h>
lib/ip_frag/rte_ip_frag.h +2 -2
@@ -62,7 +62,7 @@ struct ip_frag_key {* First two entries in the frags[] array are for the last and first fragments. */ struct ip_frag_pkt { -TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ +RTE_TAILQ_ENTRY (ip_frag_pkt) lru;/**< LRU list */ struct ip_frag_key key;/**< fragmentation key */ uint64_t start;/**< creation timestamp */ uint32_t total_size;/**< expected reassembled size */
@@ -83,7 +83,7 @@ struct rte_ip_frag_death_row {/**< mbufs to be freed */ }; -TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ +RTE_TAILQ_HEAD (ip_pkt_list, ip_frag_pkt);/**< @internal fragments tailq */ /** fragmentation table statistics */ struct ip_frag_tbl_stat {
lib/mempool/rte_mempool.c +1 -1
@@ -1337,7 +1337,7 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),rte_mcfg_mempool_read_lock (); - TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { + RTE_TAILQ_FOREACH_SAFE(te, mempool_list, next, tmp_te) { (*func)((struct rte_mempool *) te->data, arg); }
lib/mempool/rte_mempool.h +4 -5
@@ -38,7 +38,6 @@#include <stdint.h> #include <errno.h> #include <inttypes.h> -#include <sys/queue.h> #include <rte_config.h> #include <rte_spinlock.h>
@@ -141,7 +140,7 @@ struct rte_mempool_objsz {* double-frees. */ struct rte_mempool_objhdr { -STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_objhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the object. */ rte_iova_t iova;/**< IO address of the object. */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -152,7 +151,7 @@ struct rte_mempool_objhdr {/** * A list of object headers type */ -STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr); +RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr);#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
@@ -171,7 +170,7 @@ struct rte_mempool_objtlr {/** * A list of memory where objects are stored */ -STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr); +RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr);/** * Callback used to free a memory chunk
@@ -186,7 +185,7 @@ typedef void (rte_mempool_memchunk_free_cb_t)(struct rte_mempool_memhdr *memhdr,* and physically contiguous. */ struct rte_mempool_memhdr { -STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ +RTE_STAILQ_ENTRY (rte_mempool_memhdr) next;/**< Next in list. */ struct rte_mempool *mp;/**< The mempool owning the chunk */ void *addr;/**< Virtual address of the chunk */ rte_iova_t iova;/**< IO address of the chunk */
lib/pci/rte_pci.h +0 -1
@@ -18,7 +18,6 @@ extern "C" {#include <stdio.h> #include <limits.h> -#include <sys/queue.h> #include <inttypes.h> #include <sys/types.h>
lib/ring/rte_ring_core.h +0 -1
@@ -26,7 +26,6 @@ extern "C" {#include <stdio.h> #include <stdint.h> #include <string.h> -#include <sys/queue.h> #include <errno.h> #include <rte_common.h> #include <rte_config.h>
lib/table/rte_swx_table.h +4 -3
@@ -16,7 +16,8 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> + +#include <rte_os.h> /** Match type. */ enum rte_swx_table_match_type {
@@ -68,7 +69,7 @@ struct rte_swx_table_entry {/** Used to facilitate the membership of this table entry to a * linked list. */ -TAILQ_ENTRY (rte_swx_table_entry) node; +RTE_TAILQ_ENTRY (rte_swx_table_entry) node;/** Key value for the current entry. Array of *key_size* bytes or NULL * if the *key_size* for the current table is 0.
@@ -111,7 +112,7 @@ struct rte_swx_table_entry { };/** List of table entries. */ -TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry); +RTE_TAILQ_HEAD (rte_swx_table_entry_list, rte_swx_table_entry);/** * Table memory footprint get
lib/table/rte_swx_table_selector.h +2 -3
@@ -16,7 +16,6 @@ extern "C" {*/ #include <stdint.h> -#include <sys/queue.h> #include <rte_compat.h>
@@ -56,7 +55,7 @@ struct rte_swx_table_selector_params {/** Group member parameters. */ struct rte_swx_table_selector_member {/** Linked list connectivity. */ -TAILQ_ENTRY (rte_swx_table_selector_member) node; +RTE_TAILQ_ENTRY (rte_swx_table_selector_member) node;/** Member ID. */ uint32_t member_id;
@@ -66,7 +65,7 @@ struct rte_swx_table_selector_member { };/** List of group members. */ -TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member); +RTE_TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member);/** Group parameters. */ struct rte_swx_table_selector_group {
lib/vhost/iotlb.c +6 -5
@@ -32,7 +32,7 @@ vhost_user_iotlb_pending_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_pending_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -100,7 +100,8 @@ vhost_user_iotlb_pending_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_pending_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_pending_list, next, temp_node) { +RTE_TAILQ_FOREACH_SAFE (node, &vq->iotlb_pending_list, next, + temp_node) {if (node->iova < iova)continue ;if (node->iova >= iova + size)
@@ -121,7 +122,7 @@ vhost_user_iotlb_cache_remove_all(struct vhost_virtqueue *vq)rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node); }
@@ -141,7 +142,7 @@ vhost_user_iotlb_cache_random_evict(struct vhost_virtqueue *vq) entry_idx =rte_rand () % vq->iotlb_cache_nr; - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {if (!entry_idx) {TAILQ_REMOVE (&vq->iotlb_list, node, next);rte_mempool_put (vq->iotlb_pool, node);
@@ -218,7 +219,7 @@ vhost_user_iotlb_cache_remove(struct vhost_virtqueue *vq,rte_rwlock_write_lock (&vq->iotlb_lock); - TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) { + RTE_TAILQ_FOREACH_SAFE(node, &vq->iotlb_list, next, temp_node) {/* Sorted list */ if (unlikely (iova + size < node->iova))break ;
lib/vhost/rte_vdpa_dev.h +1 -1
@@ -71,7 +71,7 @@ struct rte_vdpa_dev_ops {* vdpa device structure includes device address and device operations. */ struct rte_vdpa_device { -TAILQ_ENTRY (rte_vdpa_device) next; +RTE_TAILQ_ENTRY (rte_vdpa_device) next;/** Generic device information */ struct rte_device *device;/** vdpa device operations */
lib/vhost/vdpa.c +1 -1
@@ -115,7 +115,7 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)int ret =-1 ;rte_spinlock_lock (&vdpa_device_list_lock); - TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) { + RTE_TAILQ_FOREACH_SAFE(cur_dev, &vdpa_device_list, next, tmp_dev) {if (dev != cur_dev)continue ;
Signature · 1 line
2.30.2
Re: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
Quoted 26 lines · William Tu
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.One solution is to install the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it by the ones withRTE_prefix. For Windows, we copy the definitions from <sys/queue.h> torte_os.hin Windows EAL. Note that theseRTE_macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).Additionally, the
TAILQ_FOREACH_SAFEis not part of <sys/queue.h>, the patch replaces it withRTE_TAILQ_FOREACH_SAFE.
Quoted 7 lines
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Acked-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
Re: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
Quoted 28 lines · Narcisa Ana Maria Vasile
Quoted 26 lines · William Tu
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.One solution is to install the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it by the ones withRTE_prefix. For Windows, we copy the definitions from <sys/queue.h> torte_os.hin Windows EAL. Note that theseRTE_macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).Additionally, the
TAILQ_FOREACH_SAFEis not part of <sys/queue.h>, the patch replaces it withRTE_TAILQ_FOREACH_SAFE.
Quoted 8 lines
Quoted 7 lines
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Acked-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
Acked-by Narcisa Vasile <[email protected]>
Hi Thomas,
Ping to see if the patch can be applied?
Thanks
William
Re: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
Hello William,
Quoted 33 lines · William Tu
Quoted 30 lines · Narcisa Ana Maria Vasile
Quoted 28 lines · William Tu
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.One solution is to install the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it by the ones withRTE_prefix. For Windows, we copy the definitions from <sys/queue.h> torte_os.hin Windows EAL. Note that theseRTE_macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).Additionally, the
TAILQ_FOREACH_SAFEis not part of <sys/queue.h>, the patch replaces it withRTE_TAILQ_FOREACH_SAFE.[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
Quoted 8 lines
Quoted 6 lines
Quoted 5 lines
Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Acked-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
Acked-by Narcisa Vasile <[email protected]>Hi Thomas,
Ping to see if the patch can be applied?
$ grep -rE '\<(|S)(CIRCLEQ|LIST|SIMPLEQ|TAILQ)_' build/install/include/ build/install/include/rte_tailq.h: * first parameter passed to TAILQ_HEAD macro) build/install/include/rte_crypto_sym.h: * - LIST_END should not be added to this enum build/install/include/rte_crypto_sym.h: * - LIST_END should not be added to this enum build/install/include/rte_crypto_sym.h: * - LIST_END should not be added to this enum build/install/include/rte_os.h:#define RTE_TAILQ_HEAD(name, type) TAILQ_HEAD(name, type) build/install/include/rte_os.h:#define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type) build/install/include/rte_os.h:#define RTE_TAILQ_FOREACH(var, head, field) TAILQ_FOREACH(var, head, field) build/install/include/rte_os.h:#define RTE_TAILQ_FIRST(head) TAILQ_FIRST(head) build/install/include/rte_os.h:#define RTE_TAILQ_NEXT(elem, field) TAILQ_NEXT(elem, field) build/install/include/rte_os.h:#define RTE_STAILQ_HEAD(name, type) STAILQ_HEAD(name, type) build/install/include/rte_os.h:#define RTE_STAILQ_ENTRY(type) STAILQ_ENTRY(type)
LGTM.
I just have a concern that headers get broken again if we have no check. Could buildtools/chkincs do the job (if we make this check work on Windows)?
Signature · 1 line
David Marchand
Re: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
2021-10-01 09:27 (UTC+0200), David Marchand:
Quoted 3 lines
[...]
I just have a concern that headers get broken again if we have no check. Could buildtools/chkincs do the job (if we make this check work on Windows)?
It's a valid caoncern and yes, chkincs would be a solution.
I discovered that the real issue with chkincs was a space after shebang in gen_c_file_for_header.py. If it is removed, find_program() is able to parse the line and call the script with Python interpreter. However, spaces *are* allowed after shebangs. Would you like me to submit a patch with a fix just chkincs or shall I *instead* work with meson developers (I'll do that anyway)? I'm asking because we have other files with extra spaces, so there's a question if we should fix them, add a rule for the space, etc.
Re: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
2021-10-01 12:36 (UTC+0300), Dmitry Kozlyuk:
Quoted 7 lines
2021-10-01 09:27 (UTC+0200), David Marchand:
Quoted 3 lines
[...]
I just have a concern that headers get broken again if we have no check. Could buildtools/chkincs do the job (if we make this check work on Windows)?It's a valid caoncern and yes, chkincs would be a solution.
Quoted 7 lines
I discovered that the real issue with chkincs was a space after shebang in
gen_c_file_for_header.py. If it is removed,find_program()is able to parse the line and call the script with Python interpreter. However, spaces *are* allowed after shebangs. Would you like me to submit a patch with a fix just chkincs or shall I *instead* work with meson developers (I'll do that anyway)? I'm asking because we have other files with extra spaces, so there's a question if we should fix them, add a rule for the space, etc.
Just re-checked with meson 0.57.0 (as recommended in Windows GSG) and hit no issue even with a space after "#!". Maybe it was a meson 0.47 issue on Windows at the time you disabled chkins there?
Re: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
Quoted 8 lines · Dmitry Kozlyuk
2021-10-01 12:36 (UTC+0300), Dmitry Kozlyuk:
Quoted 6 lines
2021-10-01 09:27 (UTC+0200), David Marchand:
Quoted 3 lines
[...]
I just have a concern that headers get broken again if we have no check. Could buildtools/chkincs do the job (if we make this check work on Windows)?It's a valid caoncern and yes, chkincs would be a solution.
Talked with Thomas, in any case, we can proceed with this patch.
The check is something to add/make work the sooner the better.
Quoted 9 lines
Quoted 8 lines
I discovered that the real issue with chkincs was a space after shebang in
gen_c_file_for_header.py. If it is removed,find_program()is able to parse the line and call the script with Python interpreter. However, spaces *are* allowed after shebangs. Would you like me to submit a patch with a fix just chkincs or shall I *instead* work with meson developers (I'll do that anyway)? I'm asking because we have other files with extra spaces, so there's a question if we should fix them, add a rule for the space, etc.
Quoted 3 lines
Just re-checked with meson 0.57.0 (as recommended in Windows GSG) and hit no issue even with a space after "#!". Maybe it was a meson 0.47 issue on Windows at the time you disabled chkins there?
Maybe, I am not sure, Bruce had put this limitation.
Signature · 1 line
David Marchand
Re: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
Quoted 23 lines · David Marchand
Quoted 8 lines · Dmitry Kozlyuk
2021-10-01 12:36 (UTC+0300), Dmitry Kozlyuk:
Quoted 6 lines
2021-10-01 09:27 (UTC+0200), David Marchand:
Quoted 3 lines
[...]
I just have a concern that headers get broken again if we have no check. Could buildtools/chkincs do the job (if we make this check work on Windows)?It's a valid caoncern and yes, chkincs would be a solution.
Talked with Thomas, in any case, we can proceed with this patch.
The check is something to add/make work the sooner the better.
Quoted 9 lines
Quoted 8 lines
I discovered that the real issue with chkincs was a space after shebang in
gen_c_file_for_header.py. If it is removed,find_program()is able to parse the line and call the script with Python interpreter. However, spaces *are* allowed after shebangs. Would you like me to submit a patch with a fix just chkincs or shall I *instead* work with meson developers (I'll do that anyway)? I'm asking because we have other files with extra spaces, so there's a question if we should fix them, add a rule for the space, etc.
Quoted 6 lines
Quoted 3 lines
Just re-checked with meson 0.57.0 (as recommended in Windows GSG) and hit no issue even with a space after "#!". Maybe it was a meson 0.47 issue on Windows at the time you disabled chkins there?
Maybe, I am not sure, Bruce had put this limitation.
I'm not sure either, sorry.
Thomas Monjalon
AppliedRe: [dpdk-dev] [PATCH v9] eal: remove sys/queue.h from public headers
In reply to Narcisa Ana Maria Vasile20/09/2021 22:11, Narcisa Ana Maria Vasile:
Quoted 27 lines · William Tu
Quoted 26 lines
Currently there are some public headers that include '
sys/queue.h', which is not POSIX, but usually provided by the Linux/BSD system library. (Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008. Present on the BSDs.) The file is missing on Windows. During the Windows build, DPDK uses a bundled copy, so building a DPDK library works fine. But when OVS or other applications use DPDK as a library, because some DPDK public headers include 'sys/queue.h', on Windows, it triggers an error due to no such file.One solution is to install the '
lib/eal/windows/include/sys/queue.h' into Windows environment, such as [1]. However, this means DPDK exports the functionalities of 'sys/queue.h' into the environment, which might cause symbols, macros, headers clashing with other applications.The patch fixes it by removing the "#include <
sys/queue.h>" from DPDK public headers, so programs including DPDK headers don't depend on the system to provide 'sys/queue.h'. When these public headers use macros such asTAILQ_xxx, we replace it by the ones withRTE_prefix. For Windows, we copy the definitions from <sys/queue.h> torte_os.hin Windows EAL. Note that theseRTE_macros are compatible with <sys/queue.h>, both at the level of API (to use with <sys/queue.h> macros in C files) and ABI (to avoid breaking it).Additionally, the
TAILQ_FOREACH_SAFEis not part of <sys/queue.h>, the patch replaces it withRTE_TAILQ_FOREACH_SAFE.
Quoted 8 lines
Quoted 7 lines
[1] http://mails.dpdk.org/archives/dev/2021-August/216304.html
Suggested-by Nick Connolly <[email protected]>Suggested-by Dmitry Kozliuk <[email protected]>Acked-by Dmitry Kozliuk <[email protected]>Signed-off-by William Tu <[email protected]>---
Acked-by Narcisa Vasile <[email protected]>
Applied, thanks.
Note: I had to add a sys/queue.h include in iavf which is now enabled for Windows.