[v3,1/3] kni: flag deprecated status at build time
Checks
Commit Message
To ensure all users are aware of KNI's deprecated status at build time
we can take the following actions:
1. disable the library by default. It can be re-enabled by setting
disabled_libs to the empty string (or other string not including
'kni')
2. add support for a list of deprecated libs to the lib/meson.build file
so the error message for KNI being disabled includes the fact that it
is a deprecated library.
3. for the dependent NIC driver, drivers/net/kni, modify the driver
build code to similarly flag the deprecation in the reason why
the driver is not being built..
NOTE: This is part of the deprecation process for KNI agreed by the DPDK
technical board.[1]
[1] http://mails.dpdk.org/archives/dev/2022-June/243596.html
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
V3: Incorporate code from David M. to generalise the driver dependency
handling of deprecated libs.
V2: correct dpdk_conf lookup key to RTE_LIB_KNI
---
doc/guides/prog_guide/kernel_nic_interface.rst | 4 ++++
drivers/meson.build | 3 +++
lib/meson.build | 11 +++++++++++
meson.build | 1 +
meson_options.txt | 2 +-
5 files changed, 20 insertions(+), 1 deletion(-)
Comments
On Mon, Oct 10, 2022 at 12:45 PM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> To ensure all users are aware of KNI's deprecated status at build time
> we can take the following actions:
>
> 1. disable the library by default. It can be re-enabled by setting
> disabled_libs to the empty string (or other string not including
> 'kni')
>
> 2. add support for a list of deprecated libs to the lib/meson.build file
> so the error message for KNI being disabled includes the fact that it
> is a deprecated library.
>
> 3. for the dependent NIC driver, drivers/net/kni, modify the driver
> build code to similarly flag the deprecation in the reason why
> the driver is not being built..
>
> NOTE: This is part of the deprecation process for KNI agreed by the DPDK
> technical board.[1]
>
> [1] http://mails.dpdk.org/archives/dev/2022-June/243596.html
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
>
> ---
> V3: Incorporate code from David M. to generalise the driver dependency
> handling of deprecated libs.
> V2: correct dpdk_conf lookup key to RTE_LIB_KNI
Thomas had some last minute offlist comments that I handled (he was
asking for introducing the deprecated library handling first, then
marking kni as deprecated).
I handled it and reworked the patches, the end-result is the same.
Series applied, thanks Bruce!
@@ -14,6 +14,10 @@ Kernel NIC Interface
For an alternative to KNI, that does not require any out-of-tree Linux kernel modules,
or a custom library, see :ref:`virtio_user_as_exception_path`.
+.. note::
+
+ KNI is disabled by default in the DPDK build.
+ To re-enable the library, remove 'kni' from the "disable_libs" meson option when configuring a build.
The DPDK Kernel NIC Interface (KNI) allows userspace applications access to the Linux* control plane.
@@ -133,6 +133,9 @@ foreach subpath:subdirs
if not is_variable('shared_rte_' + d)
build = false
reason = 'missing internal dependency, "@0@"'.format(d)
+ if dpdk_libs_deprecated.contains(d)
+ reason += ' (deprecated lib)'
+ endif
message('Disabling @1@ [@2@]: missing internal dependency "@0@"'
.format(d, name, 'drivers/' + drv_path))
else
@@ -85,6 +85,8 @@ optional_libs = [
'vhost',
]
+dpdk_libs_deprecated += ['kni']
+
disabled_libs = []
opt_disabled_libs = run_command(list_dir_globs, get_option('disable_libs'),
check: true).stdout().split()
@@ -133,7 +135,13 @@ foreach l:libraries
if disabled_libs.contains(l)
build = false
reason = 'explicitly disabled via build config'
+ if dpdk_libs_deprecated.contains(l)
+ reason += ' (deprecated lib)'
+ endif
else
+ if dpdk_libs_deprecated.contains(l)
+ warning('Enabling deprecated library, "@0@"'.format(l))
+ endif
subdir(l)
endif
if name != l
@@ -149,6 +157,9 @@ foreach l:libraries
if not is_variable('shared_rte_' + d)
build = false
reason = 'missing internal dependency, "@0@"'.format(d)
+ if dpdk_libs_deprecated.contains(d)
+ reason += ' (deprecated lib)'
+ endif
message('Disabling @1@ [@2@]: missing internal dependency "@0@"'
.format(d, name, 'lib/' + l))
else
@@ -40,6 +40,7 @@ dpdk_chkinc_headers = []
dpdk_driver_classes = []
dpdk_drivers = []
dpdk_extra_ldflags = []
+dpdk_libs_deprecated = []
dpdk_libs_disabled = []
dpdk_drvs_disabled = []
testpmd_drivers_sources = []
@@ -8,7 +8,7 @@ option('developer_mode', type: 'feature', description:
'turn on additional build checks relevant for DPDK developers')
option('disable_drivers', type: 'string', value: '', description:
'Comma-separated list of drivers to explicitly disable.')
-option('disable_libs', type: 'string', value: '', description:
+option('disable_libs', type: 'string', value: 'kni', description:
'Comma-separated list of libraries to explicitly disable. [NOTE: not all libs can be disabled]')
option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-<VERSION>', description:
'Subdirectory of libdir where to install PMDs. Defaults to using a versioned subdirectory.')