#
c6552d9a |
| 04-Mar-2024 |
Tyler Retzlaff <roretzla@linux.microsoft.com> |
lib: move alignment attribute on types for MSVC
The current location used for __rte_aligned(a) for alignment of types is not compatible with MSVC. There is only a single location accepted by both to
lib: move alignment attribute on types for MSVC
The current location used for __rte_aligned(a) for alignment of types is not compatible with MSVC. There is only a single location accepted by both toolchains.
The standard offers no alignment facility that compatibly interoperates with C and C++ but it may be achieved by relocating the placement of __rte_aligned(a) to the aforementioned location accepted by all currently supported toolchains.
To allow alignment for both compilers, do the following:
* Expand __rte_aligned(a) to __declspec(align(a)) when building with MSVC.
* Move __rte_aligned from the end of {struct,union} definitions to be between {struct,union} and tag.
The placement between {struct,union} and the tag allows the desired alignment to be imparted on the type regardless of the toolchain being used for all of GCC, LLVM, MSVC compilers building both C and C++.
Note: this move has an additional benefit as Doxygen is not confused anymore like for the rte_event_vector struct definition.
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com> Acked-by: Morten Brørup <mb@smartsharesystems.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com> Acked-by: Chengwen Feng <fengchengwen@huawei.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> Signed-off-by: David Marchand <david.marchand@redhat.com>
show more ...
|
#
5dbd4e93 |
| 26-Oct-2023 |
Tyler Retzlaff <roretzla@linux.microsoft.com> |
gpudev: use stdatomic API
Replace the use of gcc builtin __atomic_xxx intrinsics with corresponding rte_atomic_xxx optional stdatomic API
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com
gpudev: use stdatomic API
Replace the use of gcc builtin __atomic_xxx intrinsics with corresponding rte_atomic_xxx optional stdatomic API
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com> Acked-by: David Marchand <david.marchand@redhat.com>
show more ...
|
#
5dd7c0d6 |
| 16-Mar-2023 |
Thomas Monjalon <thomas@monjalon.net> |
gpudev: export header file for external drivers
In DPDK 21.05, the option driver_sdk_headers was introduced to export required headers to allow building out-of-tree drivers.
In DPDK 21.11, the gpud
gpudev: export header file for external drivers
In DPDK 21.05, the option driver_sdk_headers was introduced to export required headers to allow building out-of-tree drivers.
In DPDK 21.11, the gpudev driver class was introduced, without this out-of-tree compatibility.
It is fixed by exporting gpudev_driver.h as part of the driver SDK.
As a consequence of exporting this header file, C++ "extern C" guard must be added.
Fixes: 8b8036a66e3d ("gpudev: introduce GPU device class library") Cc: stable@dpdk.org
Reported-by: David Marchand <david.marchand@redhat.com> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|
#
1094dd94 |
| 28-Oct-2022 |
David Marchand <david.marchand@redhat.com> |
cleanup compat header inclusions
With symbols going though experimental/stable stages, we accumulated a lot of discrepancies about inclusion of the rte_compat.h header.
Some headers are including i
cleanup compat header inclusions
With symbols going though experimental/stable stages, we accumulated a lot of discrepancies about inclusion of the rte_compat.h header.
Some headers are including it where unneeded, while others rely on implicit inclusion.
Fix unneeded inclusions: $ git grep -l include..rte_compat.h | xargs grep -LE '__rte_(internal|experimental)' | xargs sed -i -e '/#include..rte_compat.h/d'
Fix missing inclusion, by inserting rte_compat.h before the first inclusion of a DPDK header: $ git grep -lE '__rte_(internal|experimental)' | xargs grep -L include..rte_compat.h | xargs sed -i -e \ '0,/#include..\(rte_\|.*pmd.h.$\)/{ s/\(#include..\(rte_\|.*pmd.h.$\)\)/#include <rte_compat.h>\n\1/ }'
Fix missing inclusion, by inserting rte_compat.h after the last inclusion of a non DPDK header: $ for file in $(git grep -lE '__rte_(internal|experimental)' | xargs grep -L include..rte_compat.h); do tac $file > $file.$$ sed -i -e \ '0,/#include../{ s/\(#include..*$\)/#include <rte_compat.h>\n\n\1/ }' $file.$$ tac $file.$$ > $file rm $file.$$ done
Fix missing inclusion, by inserting rte_compat.h after the header guard: $ git grep -lE '__rte_(internal|experimental)' | xargs grep -L include..rte_compat.h | xargs sed -i -e \ '0,/#define/{ s/\(#define .*$\)/\1\n\n#include <rte_compat.h>/ }'
And finally, exclude rte_compat.h itself. $ git checkout lib/eal/include/rte_compat.h
At the end of all this, we have a clean tree: $ git grep -lE '__rte_(internal|experimental)' | xargs grep -L include..rte_compat.h buildtools/check-symbols.sh devtools/checkpatches.sh doc/guides/contributing/abi_policy.rst doc/guides/rel_notes/release_20_11.rst lib/eal/include/rte_compat.h
Signed-off-by: David Marchand <david.marchand@redhat.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
show more ...
|
#
1acb7f54 |
| 28-Jul-2022 |
David Marchand <david.marchand@redhat.com> |
dev: hide driver object
Make rte_driver opaque for non internal users. This will make extending this object possible without breaking the ABI.
Introduce a new driver header and move rte_driver defi
dev: hide driver object
Make rte_driver opaque for non internal users. This will make extending this object possible without breaking the ABI.
Introduce a new driver header and move rte_driver definition. Update drivers and library to use the internal header.
Some applications may have been dereferencing rte_driver objects, mark this object's accessors as stable.
Signed-off-by: David Marchand <david.marchand@redhat.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Jay Jayatheerthan <jay.jayatheerthan@intel.com> Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com> Acked-by: Akhil Goyal <gakhil@marvell.com> Acked-by: Abhinandan Gujjar <abhinandan.gujjar@intel.com>
show more ...
|
#
d69bb47d |
| 27-Jan-2022 |
Elena Agostini <eagostini@nvidia.com> |
gpudev: expose GPU memory to CPU
Enable the possibility to expose a GPU memory area and make it accessible from the CPU.
GPU memory has to be allocated via rte_gpu_mem_alloc().
This patch allows t
gpudev: expose GPU memory to CPU
Enable the possibility to expose a GPU memory area and make it accessible from the CPU.
GPU memory has to be allocated via rte_gpu_mem_alloc().
This patch allows the gpudev library to map (and unmap), through the GPU driver, a chunk of GPU memory and to return a memory pointer usable by the CPU to access the GPU memory area.
Signed-off-by: Elena Agostini <eagostini@nvidia.com>
show more ...
|
#
c8557ed4 |
| 08-Jan-2022 |
Elena Agostini <eagostini@nvidia.com> |
gpudev: add alignment for memory allocation
Similarly to rte_malloc, rte_gpu_mem_alloc accepts as input the memory alignment size.
GPU driver should return GPU memory address aligned with the input
gpudev: add alignment for memory allocation
Similarly to rte_malloc, rte_gpu_mem_alloc accepts as input the memory alignment size.
GPU driver should return GPU memory address aligned with the input value.
Signed-off-by: Elena Agostini <eagostini@nvidia.com>
show more ...
|
#
2d61b429 |
| 08-Nov-2021 |
Elena Agostini <eagostini@nvidia.com> |
gpudev: add memory barrier
Add a function for the application to ensure the coherency of the writes executed by another device into the GPU memory.
Signed-off-by: Elena Agostini <eagostini@nvidia.c
gpudev: add memory barrier
Add a function for the application to ensure the coherency of the writes executed by another device into the GPU memory.
Signed-off-by: Elena Agostini <eagostini@nvidia.com>
show more ...
|
#
e818c4e2 |
| 08-Nov-2021 |
Elena Agostini <eagostini@nvidia.com> |
gpudev: add memory API
In heterogeneous computing system, processing is not only in the CPU. Some tasks can be delegated to devices working in parallel. Such workload distribution can be achieved by
gpudev: add memory API
In heterogeneous computing system, processing is not only in the CPU. Some tasks can be delegated to devices working in parallel. Such workload distribution can be achieved by sharing some memory.
As a first step, the features are focused on memory management. A function allows to allocate memory inside the device, or in the main (CPU) memory while making it visible for the device. This memory may be used to save packets or for synchronization data.
The next step should focus on GPU processing task control.
Signed-off-by: Elena Agostini <eagostini@nvidia.com> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|
#
a9af048a |
| 08-Nov-2021 |
Thomas Monjalon <thomas@monjalon.net> |
gpudev: support multi-process
The device data shared between processes are moved in a struct allocated in a shared memory (a new memzone for all GPUs). The main struct rte_gpu references the shared
gpudev: support multi-process
The device data shared between processes are moved in a struct allocated in a shared memory (a new memzone for all GPUs). The main struct rte_gpu references the shared memory via the pointer mpshared.
The API function rte_gpu_attach() is added to attach a device from the secondary process. The function rte_gpu_allocate() can be used only by primary process.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|
#
82e5f6b6 |
| 08-Nov-2021 |
Thomas Monjalon <thomas@monjalon.net> |
gpudev: add child device representing a device context
The computing device may operate in some isolated contexts. Memory and processing are isolated in a silo represented by a child device. The con
gpudev: add child device representing a device context
The computing device may operate in some isolated contexts. Memory and processing are isolated in a silo represented by a child device. The context is provided as an opaque by the caller of rte_gpu_add_child().
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|
#
18cb0756 |
| 08-Nov-2021 |
Thomas Monjalon <thomas@monjalon.net> |
gpudev: add event notification
Callback functions may be registered for a device event. Callback management is per-process and not thread-safe.
The events RTE_GPU_EVENT_NEW and RTE_GPU_EVENT_DEL ar
gpudev: add event notification
Callback functions may be registered for a device event. Callback management is per-process and not thread-safe.
The events RTE_GPU_EVENT_NEW and RTE_GPU_EVENT_DEL are notified respectively after creation and before removal of a device, as part of the library functions. Some future events may be emitted from drivers.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|
#
8b8036a6 |
| 08-Nov-2021 |
Elena Agostini <eagostini@nvidia.com> |
gpudev: introduce GPU device class library
In heterogeneous computing system, processing is not only in the CPU. Some tasks can be delegated to devices working in parallel.
The new library gpudev i
gpudev: introduce GPU device class library
In heterogeneous computing system, processing is not only in the CPU. Some tasks can be delegated to devices working in parallel.
The new library gpudev is for dealing with GPGPU computing devices from a DPDK application running on the CPU.
The infrastructure is prepared to welcome drivers in drivers/gpu/.
Signed-off-by: Elena Agostini <eagostini@nvidia.com> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
show more ...
|