[libvirt] [PATCHv2] nodedev: add switchdev to NIC capabilities

Ján Tomko jtomko at redhat.com
Mon Sep 18 14:57:53 UTC 2017


On Thu, Sep 14, 2017 at 11:23:02AM -0400, Laine Stump wrote:
>(Almost all of my comments result in "ok, no action needed". There are
>just three items I would like to see changed (2 trivial, 1 also small
>but Edan or John may think it prudent to re-test with the change before
>pushing) - I marked those comments with [**].
>
>On 08/21/2017 05:19 AM, Edan David wrote:
>> Adding functionality to libvirt that will allow querying the interface
>> for the availability of switchdev Offloading NIC capabilities.
>> The switchdev mode was introduced in kernel 4.8, the iproute2-devlink
>> command to retrieve the swtichdev NIC feature,
>> Command example:  devlink dev eswitch show pci/0000:03:00.0
>> This feature is needed for Openstack so we can do a scheduling decision
>> if the NIC is in Hardware Offload (switchdev) or regular SR-IOV (legacy) mode.
>> And select the appropriate hypervisors with the requested capability see [1].
>>
>> [1] - https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/enable-sriov-nic-features.html
>> ---
>>  configure.ac                                      |  13 ++
>>  docs/formatnode.html.in                           |   1 +
>>  src/util/virnetdev.c                              | 187 +++++++++++++++++++++-
>>  src/util/virnetdev.h                              |   1 +
>>  tests/nodedevschemadata/net_00_13_02_b9_f9_d3.xml |   1 +
>>  tests/nodedevschemadata/net_00_15_58_2f_e9_55.xml |   1 +
>>  6 files changed, 203 insertions(+), 1 deletion(-)
>>

This patch fails to compile on a Gentoo machine with
sys-kernel/linux-headers-4.8:

util/virnetdev.c:3248:18: error: use of undeclared identifier 'DEVLINK_CMD_ESWITCH_GET'; did you mean 'DEVLINK_CMD_ESWITCH_MODE_GET'?
    gmsgh->cmd = DEVLINK_CMD_ESWITCH_GET;
                 ^~~~~~~~~~~~~~~~~~~~~~~
                 DEVLINK_CMD_ESWITCH_MODE_GET
/usr/include/linux/devlink.h:60:2: note: 'DEVLINK_CMD_ESWITCH_MODE_GET' declared here
        DEVLINK_CMD_ESWITCH_MODE_GET,
        ^
1 error generated.

>> diff --git a/configure.ac b/configure.ac
>> index b12b7fa..c089798 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -627,6 +627,19 @@ if test "$with_linux" = "yes"; then
>>      AC_CHECK_HEADERS([linux/btrfs.h])
>>  fi
>>
>> +dnl
>> +dnl check for kernel headers required by devlink
>> +dnl
>> +if test "$with_linux" = "yes"; then
>> +    AC_CHECK_HEADERS([linux/devlink.h])
>> +    AC_CHECK_DECLS([DEVLINK_GENL_VERSION, DEVLINK_GENL_NAME, DEVLINK_ATTR_MAX, DEVLINK_CMD_ESWITCH_GET, DEVLINK_ATTR_BUS_NAME, DEVLINK_ATTR_DEV_NAME, DEVLINK_ATTR_ESWITCH_MODE, DEVLINK_ESWITCH_MODE_SWITCHDEV],
>
>That's very ..... thorough, and potentially misleading if someone ever
>wanted to use devlink to check for something other than switchdev (e.g.
>[mythical feature X]) on some system that didn't have the proper stuff
>defined for switchdev, but did have it for [other mythical feature X].
>But that's all just hypothetical, so this is fine with me.
>
>
>> +                   [AC_DEFINE([HAVE_DECL_DEVLINK],
>> +                              [1],
>> +                              [whether devlink declarations is available])],
>
>[**]
>s/is/are/
>

It seems the [action-if-found] is executed for every found symbol:

#define HAVE_DECL_DEVLINK_GENL_VERSION 1
#define HAVE_DECL_DEVLINK 1
#define HAVE_DECL_DEVLINK_GENL_NAME 1
#define HAVE_DECL_DEVLINK 1
#define HAVE_DECL_DEVLINK_ATTR_MAX 1
#define HAVE_DECL_DEVLINK 1
#define HAVE_DECL_DEVLINK_CMD_ESWITCH_GET 0
#define HAVE_DECL_DEVLINK_ATTR_BUS_NAME 1
#define HAVE_DECL_DEVLINK 1
#define HAVE_DECL_DEVLINK_ATTR_DEV_NAME 1
#define HAVE_DECL_DEVLINK 1
#define HAVE_DECL_DEVLINK_ATTR_ESWITCH_MODE 1
#define HAVE_DECL_DEVLINK 1
#define HAVE_DECL_DEVLINK_ESWITCH_MODE_SWITCHDEV 1
#define HAVE_DECL_DEVLINK 1

so this usage of AC_CHECK_DECLS is bogus.

Jan

>> +                   [],
>> +                   [[#include <linux/devlink.h>]])
>> +fi
>> +
>>  dnl Allow perl/python overrides
>>  AC_PATH_PROGS([PYTHON], [python2 python])
>>  if test -z "$PYTHON"; then
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170918/44cd568c/attachment-0001.sig>


More information about the libvir-list mailing list