[libvirt] [PATCH v3 1/4] util: fixing wrong assumption that PF has to have netdev assigned

Michal Privoznik mprivozn at redhat.com
Wed Jan 23 09:28:47 UTC 2019


On 1/22/19 8:26 PM, dann frazier wrote:
> From: Radoslaw Biernacki <radoslaw.biernacki at linaro.org>
> 
> libvirt wrongly assumes that VF netdev has to have the
> netdev assigned to PF. There is no such requirement in SRIOV standard.
> This patch change the virNetDevSwitchdevFeature() function to deal
> with SRIOV devices which does not have netdev on PF. Also corrects
> one comment about PF netdev assumption.
> 
> One example of such devices is ThunderX VNIC.
> By applying this change, VF device is used for virNetlinkCommand() as
> it is the only netdev assigned to VNIC.
> 
> Signed-off-by: Radoslaw Biernacki <radoslaw.biernacki at linaro.org>
> [ dannf: Reinstated error path in virNetDevGetPhysicalFunction() as
>   suggested by Michal Privoznik ]
> Signed-off-by: dann frazier <dann.frazier at canonical.com>
> ---
>  src/util/virnetdev.c | 19 +++++++++++++------
>  1 file changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
> index 2111b3ada9..82823c0dfc 100644
> --- a/src/util/virnetdev.c
> +++ b/src/util/virnetdev.c
> @@ -1355,9 +1355,8 @@ virNetDevGetPhysicalFunction(const char *ifname, char **pfname)
>      }
>  
>      if (!*pfname) {
> -        /* this shouldn't be possible. A VF can't exist unless its
> -         * PF device is bound to a network driver
> -         */
> +        /* The SRIOV standard does not require VF netdevs to have the
> +           netdev assigned to a PF */
>          virReportError(VIR_ERR_INTERNAL_ERROR,
>                         _("The PF device for VF %s has no network device name"),
>                         ifname);
> @@ -1449,8 +1448,12 @@ virNetDevGetVirtualFunctionInfo(const char *vfname, char **pfname,
>  
>      *pfname = NULL;
>  
> -    if (virNetDevGetPhysicalFunction(vfname, pfname) < 0)
> +    if (virNetDevGetPhysicalFunction(vfname, pfname) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("Cannot get PF netdev name for VF %s"),
> +                       vfname);
>          return ret;

This is not needed. It overwrites (probably more accurate) error
reported by virNetDevGetPhysicalFunction().


ACK with that removed.

Michal




More information about the libvir-list mailing list