[v3,1/3] kni: flag deprecated status at build time

Message ID 20221010104448.350578-1-bruce.richardson@intel.com (mailing list archive)
State Accepted, archived
Delegated to: David Marchand
Headers
Series [v3,1/3] kni: flag deprecated status at build time |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Bruce Richardson Oct. 10, 2022, 10:44 a.m. UTC
  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

David Marchand Oct. 10, 2022, 3:09 p.m. UTC | #1
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!
  

Patch

diff --git a/doc/guides/prog_guide/kernel_nic_interface.rst b/doc/guides/prog_guide/kernel_nic_interface.rst
index 03b5bca958..6a564f61ca 100644
--- a/doc/guides/prog_guide/kernel_nic_interface.rst
+++ b/doc/guides/prog_guide/kernel_nic_interface.rst
@@ -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.
 
diff --git a/drivers/meson.build b/drivers/meson.build
index f6ba5ba4fb..f7ef22c9e6 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -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
diff --git a/lib/meson.build b/lib/meson.build
index c648f7d800..a17a5a986a 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -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
diff --git a/meson.build b/meson.build
index cf3343a547..1d35a255c3 100644
--- a/meson.build
+++ b/meson.build
@@ -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 = []
diff --git a/meson_options.txt b/meson_options.txt
index 8640f599ae..39af78787c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -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.')