Message ID | 20240729052146.621924-4-lulu@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | vdpa: support set mac address from vdpa tool | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
> +static int mlx5_vdpa_set_attr(struct vdpa_mgmt_dev *v_mdev, struct vdpa_device *dev, > + const struct vdpa_dev_set_config *add_config) > +{ > + struct virtio_net_config *config; > + struct mlx5_core_dev *pfmdev; > + struct mlx5_vdpa_dev *mvdev; > + struct mlx5_vdpa_net *ndev; > + struct mlx5_core_dev *mdev; > + int err = -EINVAL; I would say this should also be EOPNOTSUPP. > + > + mvdev = to_mvdev(dev); > + ndev = to_mlx5_vdpa_ndev(mvdev); > + mdev = mvdev->mdev; > + config = &ndev->config; > + > + down_write(&ndev->reslock); > + if (add_config->mask & (1 << VDPA_ATTR_DEV_NET_CFG_MACADDR)) { > + pfmdev = pci_get_drvdata(pci_physfn(mdev->pdev)); > + err = mlx5_mpfs_add_mac(pfmdev, config->mac); > + if (!err) > + ether_addr_copy(config->mac, add_config->net.mac); > + } > + > + up_write(&ndev->reslock); > + return err; Andrew --- pw-bot: cr
On Tue, 30 Jul 2024 at 03:16, Andrew Lunn <andrew@lunn.ch> wrote: > > > +static int mlx5_vdpa_set_attr(struct vdpa_mgmt_dev *v_mdev, struct vdpa_device *dev, > > + const struct vdpa_dev_set_config *add_config) > > +{ > > + struct virtio_net_config *config; > > + struct mlx5_core_dev *pfmdev; > > + struct mlx5_vdpa_dev *mvdev; > > + struct mlx5_vdpa_net *ndev; > > + struct mlx5_core_dev *mdev; > > + int err = -EINVAL; > > I would say this should also be EOPNOTSUPP. > sure, will change this Thanks cindy > > + > > + mvdev = to_mvdev(dev); > > + ndev = to_mlx5_vdpa_ndev(mvdev); > > + mdev = mvdev->mdev; > > + config = &ndev->config; > > + > > + down_write(&ndev->reslock); > > + if (add_config->mask & (1 << VDPA_ATTR_DEV_NET_CFG_MACADDR)) { > > + pfmdev = pci_get_drvdata(pci_physfn(mdev->pdev)); > > + err = mlx5_mpfs_add_mac(pfmdev, config->mac); > > + if (!err) > > + ether_addr_copy(config->mac, add_config->net.mac); > > + } > > + > > + up_write(&ndev->reslock); > > + return err; > > > Andrew > > --- > pw-bot: cr >
diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c index ecfc16151d61..dd19eec40297 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -3786,9 +3786,37 @@ static void mlx5_vdpa_dev_del(struct vdpa_mgmt_dev *v_mdev, struct vdpa_device * mgtdev->ndev = NULL; } +static int mlx5_vdpa_set_attr(struct vdpa_mgmt_dev *v_mdev, struct vdpa_device *dev, + const struct vdpa_dev_set_config *add_config) +{ + struct virtio_net_config *config; + struct mlx5_core_dev *pfmdev; + struct mlx5_vdpa_dev *mvdev; + struct mlx5_vdpa_net *ndev; + struct mlx5_core_dev *mdev; + int err = -EINVAL; + + mvdev = to_mvdev(dev); + ndev = to_mlx5_vdpa_ndev(mvdev); + mdev = mvdev->mdev; + config = &ndev->config; + + down_write(&ndev->reslock); + if (add_config->mask & (1 << VDPA_ATTR_DEV_NET_CFG_MACADDR)) { + pfmdev = pci_get_drvdata(pci_physfn(mdev->pdev)); + err = mlx5_mpfs_add_mac(pfmdev, config->mac); + if (!err) + ether_addr_copy(config->mac, add_config->net.mac); + } + + up_write(&ndev->reslock); + return err; +} + static const struct vdpa_mgmtdev_ops mdev_ops = { .dev_add = mlx5_vdpa_dev_add, .dev_del = mlx5_vdpa_dev_del, + .dev_set_attr = mlx5_vdpa_set_attr, }; static struct virtio_device_id id_table[] = {
Add the function to support setting the MAC address. For vdpa/mlx5, the function will use mlx5_mpfs_add_mac to set the mac address Tested in ConnectX-6 Dx device Signed-off-by: Cindy Lu <lulu@redhat.com> --- drivers/vdpa/mlx5/net/mlx5_vnet.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)