From fb9274546120898933f225742d9e37530504e8f9 Mon Sep 17 00:00:00 2001 From: Hyong Youb Kim Date: Tue, 12 Oct 2021 18:21:23 -0700 Subject: [PATCH] net/enic: fix filter mode detection vnic_dev_capable_filter_mode() currently fails when CMD_CAPABILITY(CMD_ADD_FILTER) returns ERR_EPERM. In turn, this failure causes the driver initialization to fail. But, firmware may legitimately return ERR_EPERM. For example, VF vNIC returns ERR_EPERM when it does not support filtering at all. So, treat ERR_EPERM as "no filtering available" instead of an unexpected error. Fixes: 322b355f2183 ("net/enic/base: bring NIC interface functions up to date") Cc: stable@dpdk.org Signed-off-by: Hyong Youb Kim Reviewed-by: John Daley --- drivers/net/enic/base/vnic_dev.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/enic/base/vnic_dev.c b/drivers/net/enic/base/vnic_dev.c index ab6e05739b..9c42595ced 100644 --- a/drivers/net/enic/base/vnic_dev.c +++ b/drivers/net/enic/base/vnic_dev.c @@ -644,8 +644,8 @@ static int vnic_dev_flowman_enable(struct vnic_dev *vdev, uint32_t *mode, return 1; } -/* Determine the "best" filtering mode VIC is capaible of. Returns one of 4 - * value or 0 on error: +/* Determine the "best" filtering mode VIC is capable of. Returns one of 4 + * value or 0 if filtering is unavailble: * FILTER_FLOWMAN- flowman api capable * FILTER_DPDK_1- advanced filters availabile * FILTER_USNIC_IP_FLAG - advanced filters but with the restriction that @@ -680,6 +680,14 @@ int vnic_dev_capable_filter_mode(struct vnic_dev *vdev, uint32_t *mode, args[0] = CMD_ADD_FILTER; args[1] = 0; err = vnic_dev_cmd_args(vdev, CMD_CAPABILITY, args, 2, 1000); + /* + * ERR_EPERM may be returned if, for example, vNIC is + * on a VF. It simply means no filtering is available + */ + if (err == -ERR_EPERM) { + *mode = 0; + return 0; + } if (err) return err; max_level = args[1]; -- 2.20.1