All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 9473/10190] drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types)
@ 2024-11-07 21:34 kernel test robot
  2024-11-07 21:42 ` Michael S. Tsirkin
  2024-11-07 21:48 ` Michael S. Tsirkin
  0 siblings, 2 replies; 3+ messages in thread
From: kernel test robot @ 2024-11-07 21:34 UTC (permalink / raw)
  To: Carlos Bilbao; +Cc: oe-kbuild-all, Michael S. Tsirkin, Dragos Tatulea

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   74741a050b79d31d8d2eeee12c77736596d0a6b2
commit: 09e317f5d07e3fb5bc09674eb94e38e138fef4bf [9473/10190] vdpa/mlx5: Set speed and duplex of vDPA devices to UNKNOWN
config: i386-randconfig-061-20241107 (https://download.01.org/0day-ci/archive/20241108/202411080535.Xq60FSHw-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241108/202411080535.Xq60FSHw-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202411080535.Xq60FSHw-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le32 [usertype] speed @@     got restricted __virtio32 @@
   drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse:     expected restricted __le32 [usertype] speed
   drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse:     got restricted __virtio32

vim +3910 drivers/vdpa/mlx5/net/mlx5_vnet.c

  3822	
  3823	static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
  3824				     const struct vdpa_dev_set_config *add_config)
  3825	{
  3826		struct mlx5_vdpa_mgmtdev *mgtdev = container_of(v_mdev, struct mlx5_vdpa_mgmtdev, mgtdev);
  3827		struct virtio_net_config *config;
  3828		struct mlx5_core_dev *pfmdev;
  3829		struct mlx5_vdpa_dev *mvdev;
  3830		struct mlx5_vdpa_net *ndev;
  3831		struct mlx5_core_dev *mdev;
  3832		u64 device_features;
  3833		u32 max_vqs;
  3834		u16 mtu;
  3835		int err;
  3836	
  3837		if (mgtdev->ndev)
  3838			return -ENOSPC;
  3839	
  3840		mdev = mgtdev->madev->mdev;
  3841		device_features = mgtdev->mgtdev.supported_features;
  3842		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) {
  3843			if (add_config->device_features & ~device_features) {
  3844				dev_warn(mdev->device,
  3845					 "The provisioned features 0x%llx are not supported by this device with features 0x%llx\n",
  3846					 add_config->device_features, device_features);
  3847				return -EINVAL;
  3848			}
  3849			device_features &= add_config->device_features;
  3850		} else {
  3851			device_features &= ~BIT_ULL(VIRTIO_NET_F_MRG_RXBUF);
  3852		}
  3853		if (!(device_features & BIT_ULL(VIRTIO_F_VERSION_1) &&
  3854		      device_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM))) {
  3855			dev_warn(mdev->device,
  3856				 "Must provision minimum features 0x%llx for this device",
  3857				 BIT_ULL(VIRTIO_F_VERSION_1) | BIT_ULL(VIRTIO_F_ACCESS_PLATFORM));
  3858			return -EOPNOTSUPP;
  3859		}
  3860	
  3861		if (!(MLX5_CAP_DEV_VDPA_EMULATION(mdev, virtio_queue_type) &
  3862		    MLX5_VIRTIO_EMULATION_CAP_VIRTIO_QUEUE_TYPE_SPLIT)) {
  3863			dev_warn(mdev->device, "missing support for split virtqueues\n");
  3864			return -EOPNOTSUPP;
  3865		}
  3866	
  3867		max_vqs = min_t(int, MLX5_CAP_DEV_VDPA_EMULATION(mdev, max_num_virtio_queues),
  3868				1 << MLX5_CAP_GEN(mdev, log_max_rqt_size));
  3869		if (max_vqs < 2) {
  3870			dev_warn(mdev->device,
  3871				 "%d virtqueues are supported. At least 2 are required\n",
  3872				 max_vqs);
  3873			return -EAGAIN;
  3874		}
  3875	
  3876		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MAX_VQP)) {
  3877			if (add_config->net.max_vq_pairs > max_vqs / 2)
  3878				return -EINVAL;
  3879			max_vqs = min_t(u32, max_vqs, 2 * add_config->net.max_vq_pairs);
  3880		} else {
  3881			max_vqs = 2;
  3882		}
  3883	
  3884		ndev = vdpa_alloc_device(struct mlx5_vdpa_net, mvdev.vdev, mdev->device, &mgtdev->vdpa_ops,
  3885					 MLX5_VDPA_NUMVQ_GROUPS, MLX5_VDPA_NUM_AS, name, false);
  3886		if (IS_ERR(ndev))
  3887			return PTR_ERR(ndev);
  3888	
  3889		ndev->mvdev.max_vqs = max_vqs;
  3890		mvdev = &ndev->mvdev;
  3891		mvdev->mdev = mdev;
  3892	
  3893		ndev->vqs = kcalloc(max_vqs, sizeof(*ndev->vqs), GFP_KERNEL);
  3894		ndev->event_cbs = kcalloc(max_vqs + 1, sizeof(*ndev->event_cbs), GFP_KERNEL);
  3895		if (!ndev->vqs || !ndev->event_cbs) {
  3896			err = -ENOMEM;
  3897			goto err_alloc;
  3898		}
  3899		ndev->cur_num_vqs = MLX5V_DEFAULT_VQ_COUNT;
  3900	
  3901		mvqs_set_defaults(ndev);
  3902		allocate_irqs(ndev);
  3903		init_rwsem(&ndev->reslock);
  3904		config = &ndev->config;
  3905	
  3906		/*
  3907		 * mlx5_vdpa vDPA devices currently don't support reporting or
  3908		 * setting the speed or duplex.
  3909		 */
> 3910		config->speed  = cpu_to_mlx5vdpa32(mvdev, SPEED_UNKNOWN);
  3911		config->duplex = DUPLEX_UNKNOWN;
  3912	
  3913		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MTU)) {
  3914			err = config_func_mtu(mdev, add_config->net.mtu);
  3915			if (err)
  3916				goto err_alloc;
  3917		}
  3918	
  3919		if (device_features & BIT_ULL(VIRTIO_NET_F_MTU)) {
  3920			err = query_mtu(mdev, &mtu);
  3921			if (err)
  3922				goto err_alloc;
  3923	
  3924			ndev->config.mtu = cpu_to_mlx5vdpa16(mvdev, mtu);
  3925		}
  3926	
  3927		if (device_features & BIT_ULL(VIRTIO_NET_F_STATUS)) {
  3928			if (get_link_state(mvdev))
  3929				ndev->config.status |= cpu_to_mlx5vdpa16(mvdev, VIRTIO_NET_S_LINK_UP);
  3930			else
  3931				ndev->config.status &= cpu_to_mlx5vdpa16(mvdev, ~VIRTIO_NET_S_LINK_UP);
  3932		}
  3933	
  3934		if (add_config->mask & (1 << VDPA_ATTR_DEV_NET_CFG_MACADDR)) {
  3935			memcpy(ndev->config.mac, add_config->net.mac, ETH_ALEN);
  3936		/* No bother setting mac address in config if not going to provision _F_MAC */
  3937		} else if ((add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) == 0 ||
  3938			   device_features & BIT_ULL(VIRTIO_NET_F_MAC)) {
  3939			err = mlx5_query_nic_vport_mac_address(mdev, 0, 0, config->mac);
  3940			if (err)
  3941				goto err_alloc;
  3942		}
  3943	
  3944		if (!is_zero_ether_addr(config->mac)) {
  3945			pfmdev = pci_get_drvdata(pci_physfn(mdev->pdev));
  3946			err = mlx5_mpfs_add_mac(pfmdev, config->mac);
  3947			if (err)
  3948				goto err_alloc;
  3949		} else if ((add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) == 0) {
  3950			/*
  3951			 * We used to clear _F_MAC feature bit if seeing
  3952			 * zero mac address when device features are not
  3953			 * specifically provisioned. Keep the behaviour
  3954			 * so old scripts do not break.
  3955			 */
  3956			device_features &= ~BIT_ULL(VIRTIO_NET_F_MAC);
  3957		} else if (device_features & BIT_ULL(VIRTIO_NET_F_MAC)) {
  3958			/* Don't provision zero mac address for _F_MAC */
  3959			mlx5_vdpa_warn(&ndev->mvdev,
  3960				       "No mac address provisioned?\n");
  3961			err = -EINVAL;
  3962			goto err_alloc;
  3963		}
  3964	
  3965		if (device_features & BIT_ULL(VIRTIO_NET_F_MQ)) {
  3966			config->max_virtqueue_pairs = cpu_to_mlx5vdpa16(mvdev, max_vqs / 2);
  3967			ndev->rqt_size = max_vqs / 2;
  3968		} else {
  3969			ndev->rqt_size = 1;
  3970		}
  3971	
  3972		mlx5_cmd_init_async_ctx(mdev, &mvdev->async_ctx);
  3973	
  3974		ndev->mvdev.mlx_features = device_features;
  3975		mvdev->vdev.dma_dev = &mdev->pdev->dev;
  3976		err = mlx5_vdpa_alloc_resources(&ndev->mvdev);
  3977		if (err)
  3978			goto err_alloc;
  3979	
  3980		err = mlx5_vdpa_init_mr_resources(mvdev);
  3981		if (err)
  3982			goto err_alloc;
  3983	
  3984		if (MLX5_CAP_GEN(mvdev->mdev, umem_uid_0)) {
  3985			err = mlx5_vdpa_create_dma_mr(mvdev);
  3986			if (err)
  3987				goto err_alloc;
  3988		}
  3989	
  3990		err = alloc_fixed_resources(ndev);
  3991		if (err)
  3992			goto err_alloc;
  3993	
  3994		ndev->cvq_ent.mvdev = mvdev;
  3995		INIT_WORK(&ndev->cvq_ent.work, mlx5_cvq_kick_handler);
  3996		mvdev->wq = create_singlethread_workqueue("mlx5_vdpa_wq");
  3997		if (!mvdev->wq) {
  3998			err = -ENOMEM;
  3999			goto err_alloc;
  4000		}
  4001	
  4002		mvdev->vdev.mdev = &mgtdev->mgtdev;
  4003		err = _vdpa_register_device(&mvdev->vdev, max_vqs + 1);
  4004		if (err)
  4005			goto err_reg;
  4006	
  4007		mgtdev->ndev = ndev;
  4008	
  4009		/* For virtio-vdpa, the device was set up during device register. */
  4010		if (ndev->setup)
  4011			return 0;
  4012	
  4013		down_write(&ndev->reslock);
  4014		err = setup_vq_resources(ndev, false);
  4015		up_write(&ndev->reslock);
  4016		if (err)
  4017			goto err_setup_vq_res;
  4018	
  4019		return 0;
  4020	
  4021	err_setup_vq_res:
  4022		_vdpa_unregister_device(&mvdev->vdev);
  4023	err_reg:
  4024		destroy_workqueue(mvdev->wq);
  4025	err_alloc:
  4026		put_device(&mvdev->vdev.dev);
  4027		return err;
  4028	}
  4029	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [linux-next:master 9473/10190] drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types)
  2024-11-07 21:34 [linux-next:master 9473/10190] drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types) kernel test robot
@ 2024-11-07 21:42 ` Michael S. Tsirkin
  2024-11-07 21:48 ` Michael S. Tsirkin
  1 sibling, 0 replies; 3+ messages in thread
From: Michael S. Tsirkin @ 2024-11-07 21:42 UTC (permalink / raw)
  To: kernel test robot; +Cc: Carlos Bilbao, oe-kbuild-all, Dragos Tatulea

On Fri, Nov 08, 2024 at 05:34:27AM +0800, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head:   74741a050b79d31d8d2eeee12c77736596d0a6b2
> commit: 09e317f5d07e3fb5bc09674eb94e38e138fef4bf [9473/10190] vdpa/mlx5: Set speed and duplex of vDPA devices to UNKNOWN
> config: i386-randconfig-061-20241107 (https://download.01.org/0day-ci/archive/20241108/202411080535.Xq60FSHw-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241108/202411080535.Xq60FSHw-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202411080535.Xq60FSHw-lkp@intel.com/
> 
> sparse warnings: (new ones prefixed by >>)
> >> drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le32 [usertype] speed @@     got restricted __virtio32 @@
>    drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse:     expected restricted __le32 [usertype] speed
>    drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse:     got restricted __virtio32
> 
> vim +3910 drivers/vdpa/mlx5/net/mlx5_vnet.c
> 
>   3822	
>   3823	static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
>   3824				     const struct vdpa_dev_set_config *add_config)
>   3825	{
>   3826		struct mlx5_vdpa_mgmtdev *mgtdev = container_of(v_mdev, struct mlx5_vdpa_mgmtdev, mgtdev);
>   3827		struct virtio_net_config *config;
>   3828		struct mlx5_core_dev *pfmdev;
>   3829		struct mlx5_vdpa_dev *mvdev;
>   3830		struct mlx5_vdpa_net *ndev;
>   3831		struct mlx5_core_dev *mdev;
>   3832		u64 device_features;
>   3833		u32 max_vqs;
>   3834		u16 mtu;
>   3835		int err;
>   3836	
>   3837		if (mgtdev->ndev)
>   3838			return -ENOSPC;
>   3839	
>   3840		mdev = mgtdev->madev->mdev;
>   3841		device_features = mgtdev->mgtdev.supported_features;
>   3842		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) {
>   3843			if (add_config->device_features & ~device_features) {
>   3844				dev_warn(mdev->device,
>   3845					 "The provisioned features 0x%llx are not supported by this device with features 0x%llx\n",
>   3846					 add_config->device_features, device_features);
>   3847				return -EINVAL;
>   3848			}
>   3849			device_features &= add_config->device_features;
>   3850		} else {
>   3851			device_features &= ~BIT_ULL(VIRTIO_NET_F_MRG_RXBUF);
>   3852		}
>   3853		if (!(device_features & BIT_ULL(VIRTIO_F_VERSION_1) &&
>   3854		      device_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM))) {
>   3855			dev_warn(mdev->device,
>   3856				 "Must provision minimum features 0x%llx for this device",
>   3857				 BIT_ULL(VIRTIO_F_VERSION_1) | BIT_ULL(VIRTIO_F_ACCESS_PLATFORM));
>   3858			return -EOPNOTSUPP;
>   3859		}
>   3860	
>   3861		if (!(MLX5_CAP_DEV_VDPA_EMULATION(mdev, virtio_queue_type) &
>   3862		    MLX5_VIRTIO_EMULATION_CAP_VIRTIO_QUEUE_TYPE_SPLIT)) {
>   3863			dev_warn(mdev->device, "missing support for split virtqueues\n");
>   3864			return -EOPNOTSUPP;
>   3865		}
>   3866	
>   3867		max_vqs = min_t(int, MLX5_CAP_DEV_VDPA_EMULATION(mdev, max_num_virtio_queues),
>   3868				1 << MLX5_CAP_GEN(mdev, log_max_rqt_size));
>   3869		if (max_vqs < 2) {
>   3870			dev_warn(mdev->device,
>   3871				 "%d virtqueues are supported. At least 2 are required\n",
>   3872				 max_vqs);
>   3873			return -EAGAIN;
>   3874		}
>   3875	
>   3876		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MAX_VQP)) {
>   3877			if (add_config->net.max_vq_pairs > max_vqs / 2)
>   3878				return -EINVAL;
>   3879			max_vqs = min_t(u32, max_vqs, 2 * add_config->net.max_vq_pairs);
>   3880		} else {
>   3881			max_vqs = 2;
>   3882		}
>   3883	
>   3884		ndev = vdpa_alloc_device(struct mlx5_vdpa_net, mvdev.vdev, mdev->device, &mgtdev->vdpa_ops,
>   3885					 MLX5_VDPA_NUMVQ_GROUPS, MLX5_VDPA_NUM_AS, name, false);
>   3886		if (IS_ERR(ndev))
>   3887			return PTR_ERR(ndev);
>   3888	
>   3889		ndev->mvdev.max_vqs = max_vqs;
>   3890		mvdev = &ndev->mvdev;
>   3891		mvdev->mdev = mdev;
>   3892	
>   3893		ndev->vqs = kcalloc(max_vqs, sizeof(*ndev->vqs), GFP_KERNEL);
>   3894		ndev->event_cbs = kcalloc(max_vqs + 1, sizeof(*ndev->event_cbs), GFP_KERNEL);
>   3895		if (!ndev->vqs || !ndev->event_cbs) {
>   3896			err = -ENOMEM;
>   3897			goto err_alloc;
>   3898		}
>   3899		ndev->cur_num_vqs = MLX5V_DEFAULT_VQ_COUNT;
>   3900	
>   3901		mvqs_set_defaults(ndev);
>   3902		allocate_irqs(ndev);
>   3903		init_rwsem(&ndev->reslock);
>   3904		config = &ndev->config;
>   3905	
>   3906		/*
>   3907		 * mlx5_vdpa vDPA devices currently don't support reporting or
>   3908		 * setting the speed or duplex.
>   3909		 */
> > 3910		config->speed  = cpu_to_mlx5vdpa32(mvdev, SPEED_UNKNOWN);

Indeed, speed is just __le. No need for fancy accessors.

>   3911		config->duplex = DUPLEX_UNKNOWN;
>   3912	
>   3913		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MTU)) {
>   3914			err = config_func_mtu(mdev, add_config->net.mtu);
>   3915			if (err)
>   3916				goto err_alloc;
>   3917		}
>   3918	
>   3919		if (device_features & BIT_ULL(VIRTIO_NET_F_MTU)) {
>   3920			err = query_mtu(mdev, &mtu);
>   3921			if (err)
>   3922				goto err_alloc;
>   3923	
>   3924			ndev->config.mtu = cpu_to_mlx5vdpa16(mvdev, mtu);
>   3925		}
>   3926	
>   3927		if (device_features & BIT_ULL(VIRTIO_NET_F_STATUS)) {
>   3928			if (get_link_state(mvdev))
>   3929				ndev->config.status |= cpu_to_mlx5vdpa16(mvdev, VIRTIO_NET_S_LINK_UP);
>   3930			else
>   3931				ndev->config.status &= cpu_to_mlx5vdpa16(mvdev, ~VIRTIO_NET_S_LINK_UP);
>   3932		}
>   3933	
>   3934		if (add_config->mask & (1 << VDPA_ATTR_DEV_NET_CFG_MACADDR)) {
>   3935			memcpy(ndev->config.mac, add_config->net.mac, ETH_ALEN);
>   3936		/* No bother setting mac address in config if not going to provision _F_MAC */
>   3937		} else if ((add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) == 0 ||
>   3938			   device_features & BIT_ULL(VIRTIO_NET_F_MAC)) {
>   3939			err = mlx5_query_nic_vport_mac_address(mdev, 0, 0, config->mac);
>   3940			if (err)
>   3941				goto err_alloc;
>   3942		}
>   3943	
>   3944		if (!is_zero_ether_addr(config->mac)) {
>   3945			pfmdev = pci_get_drvdata(pci_physfn(mdev->pdev));
>   3946			err = mlx5_mpfs_add_mac(pfmdev, config->mac);
>   3947			if (err)
>   3948				goto err_alloc;
>   3949		} else if ((add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) == 0) {
>   3950			/*
>   3951			 * We used to clear _F_MAC feature bit if seeing
>   3952			 * zero mac address when device features are not
>   3953			 * specifically provisioned. Keep the behaviour
>   3954			 * so old scripts do not break.
>   3955			 */
>   3956			device_features &= ~BIT_ULL(VIRTIO_NET_F_MAC);
>   3957		} else if (device_features & BIT_ULL(VIRTIO_NET_F_MAC)) {
>   3958			/* Don't provision zero mac address for _F_MAC */
>   3959			mlx5_vdpa_warn(&ndev->mvdev,
>   3960				       "No mac address provisioned?\n");
>   3961			err = -EINVAL;
>   3962			goto err_alloc;
>   3963		}
>   3964	
>   3965		if (device_features & BIT_ULL(VIRTIO_NET_F_MQ)) {
>   3966			config->max_virtqueue_pairs = cpu_to_mlx5vdpa16(mvdev, max_vqs / 2);
>   3967			ndev->rqt_size = max_vqs / 2;
>   3968		} else {
>   3969			ndev->rqt_size = 1;
>   3970		}
>   3971	
>   3972		mlx5_cmd_init_async_ctx(mdev, &mvdev->async_ctx);
>   3973	
>   3974		ndev->mvdev.mlx_features = device_features;
>   3975		mvdev->vdev.dma_dev = &mdev->pdev->dev;
>   3976		err = mlx5_vdpa_alloc_resources(&ndev->mvdev);
>   3977		if (err)
>   3978			goto err_alloc;
>   3979	
>   3980		err = mlx5_vdpa_init_mr_resources(mvdev);
>   3981		if (err)
>   3982			goto err_alloc;
>   3983	
>   3984		if (MLX5_CAP_GEN(mvdev->mdev, umem_uid_0)) {
>   3985			err = mlx5_vdpa_create_dma_mr(mvdev);
>   3986			if (err)
>   3987				goto err_alloc;
>   3988		}
>   3989	
>   3990		err = alloc_fixed_resources(ndev);
>   3991		if (err)
>   3992			goto err_alloc;
>   3993	
>   3994		ndev->cvq_ent.mvdev = mvdev;
>   3995		INIT_WORK(&ndev->cvq_ent.work, mlx5_cvq_kick_handler);
>   3996		mvdev->wq = create_singlethread_workqueue("mlx5_vdpa_wq");
>   3997		if (!mvdev->wq) {
>   3998			err = -ENOMEM;
>   3999			goto err_alloc;
>   4000		}
>   4001	
>   4002		mvdev->vdev.mdev = &mgtdev->mgtdev;
>   4003		err = _vdpa_register_device(&mvdev->vdev, max_vqs + 1);
>   4004		if (err)
>   4005			goto err_reg;
>   4006	
>   4007		mgtdev->ndev = ndev;
>   4008	
>   4009		/* For virtio-vdpa, the device was set up during device register. */
>   4010		if (ndev->setup)
>   4011			return 0;
>   4012	
>   4013		down_write(&ndev->reslock);
>   4014		err = setup_vq_resources(ndev, false);
>   4015		up_write(&ndev->reslock);
>   4016		if (err)
>   4017			goto err_setup_vq_res;
>   4018	
>   4019		return 0;
>   4020	
>   4021	err_setup_vq_res:
>   4022		_vdpa_unregister_device(&mvdev->vdev);
>   4023	err_reg:
>   4024		destroy_workqueue(mvdev->wq);
>   4025	err_alloc:
>   4026		put_device(&mvdev->vdev.dev);
>   4027		return err;
>   4028	}
>   4029	
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [linux-next:master 9473/10190] drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types)
  2024-11-07 21:34 [linux-next:master 9473/10190] drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types) kernel test robot
  2024-11-07 21:42 ` Michael S. Tsirkin
@ 2024-11-07 21:48 ` Michael S. Tsirkin
  1 sibling, 0 replies; 3+ messages in thread
From: Michael S. Tsirkin @ 2024-11-07 21:48 UTC (permalink / raw)
  To: kernel test robot; +Cc: Carlos Bilbao, oe-kbuild-all, Dragos Tatulea

I dropped the patch for now, I think it's wrong. CB.

On Fri, Nov 08, 2024 at 05:34:27AM +0800, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head:   74741a050b79d31d8d2eeee12c77736596d0a6b2
> commit: 09e317f5d07e3fb5bc09674eb94e38e138fef4bf [9473/10190] vdpa/mlx5: Set speed and duplex of vDPA devices to UNKNOWN
> config: i386-randconfig-061-20241107 (https://download.01.org/0day-ci/archive/20241108/202411080535.Xq60FSHw-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241108/202411080535.Xq60FSHw-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202411080535.Xq60FSHw-lkp@intel.com/
> 
> sparse warnings: (new ones prefixed by >>)
> >> drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le32 [usertype] speed @@     got restricted __virtio32 @@
>    drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse:     expected restricted __le32 [usertype] speed
>    drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse:     got restricted __virtio32
> 
> vim +3910 drivers/vdpa/mlx5/net/mlx5_vnet.c
> 
>   3822	
>   3823	static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
>   3824				     const struct vdpa_dev_set_config *add_config)
>   3825	{
>   3826		struct mlx5_vdpa_mgmtdev *mgtdev = container_of(v_mdev, struct mlx5_vdpa_mgmtdev, mgtdev);
>   3827		struct virtio_net_config *config;
>   3828		struct mlx5_core_dev *pfmdev;
>   3829		struct mlx5_vdpa_dev *mvdev;
>   3830		struct mlx5_vdpa_net *ndev;
>   3831		struct mlx5_core_dev *mdev;
>   3832		u64 device_features;
>   3833		u32 max_vqs;
>   3834		u16 mtu;
>   3835		int err;
>   3836	
>   3837		if (mgtdev->ndev)
>   3838			return -ENOSPC;
>   3839	
>   3840		mdev = mgtdev->madev->mdev;
>   3841		device_features = mgtdev->mgtdev.supported_features;
>   3842		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) {
>   3843			if (add_config->device_features & ~device_features) {
>   3844				dev_warn(mdev->device,
>   3845					 "The provisioned features 0x%llx are not supported by this device with features 0x%llx\n",
>   3846					 add_config->device_features, device_features);
>   3847				return -EINVAL;
>   3848			}
>   3849			device_features &= add_config->device_features;
>   3850		} else {
>   3851			device_features &= ~BIT_ULL(VIRTIO_NET_F_MRG_RXBUF);
>   3852		}
>   3853		if (!(device_features & BIT_ULL(VIRTIO_F_VERSION_1) &&
>   3854		      device_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM))) {
>   3855			dev_warn(mdev->device,
>   3856				 "Must provision minimum features 0x%llx for this device",
>   3857				 BIT_ULL(VIRTIO_F_VERSION_1) | BIT_ULL(VIRTIO_F_ACCESS_PLATFORM));
>   3858			return -EOPNOTSUPP;
>   3859		}
>   3860	
>   3861		if (!(MLX5_CAP_DEV_VDPA_EMULATION(mdev, virtio_queue_type) &
>   3862		    MLX5_VIRTIO_EMULATION_CAP_VIRTIO_QUEUE_TYPE_SPLIT)) {
>   3863			dev_warn(mdev->device, "missing support for split virtqueues\n");
>   3864			return -EOPNOTSUPP;
>   3865		}
>   3866	
>   3867		max_vqs = min_t(int, MLX5_CAP_DEV_VDPA_EMULATION(mdev, max_num_virtio_queues),
>   3868				1 << MLX5_CAP_GEN(mdev, log_max_rqt_size));
>   3869		if (max_vqs < 2) {
>   3870			dev_warn(mdev->device,
>   3871				 "%d virtqueues are supported. At least 2 are required\n",
>   3872				 max_vqs);
>   3873			return -EAGAIN;
>   3874		}
>   3875	
>   3876		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MAX_VQP)) {
>   3877			if (add_config->net.max_vq_pairs > max_vqs / 2)
>   3878				return -EINVAL;
>   3879			max_vqs = min_t(u32, max_vqs, 2 * add_config->net.max_vq_pairs);
>   3880		} else {
>   3881			max_vqs = 2;
>   3882		}
>   3883	
>   3884		ndev = vdpa_alloc_device(struct mlx5_vdpa_net, mvdev.vdev, mdev->device, &mgtdev->vdpa_ops,
>   3885					 MLX5_VDPA_NUMVQ_GROUPS, MLX5_VDPA_NUM_AS, name, false);
>   3886		if (IS_ERR(ndev))
>   3887			return PTR_ERR(ndev);
>   3888	
>   3889		ndev->mvdev.max_vqs = max_vqs;
>   3890		mvdev = &ndev->mvdev;
>   3891		mvdev->mdev = mdev;
>   3892	
>   3893		ndev->vqs = kcalloc(max_vqs, sizeof(*ndev->vqs), GFP_KERNEL);
>   3894		ndev->event_cbs = kcalloc(max_vqs + 1, sizeof(*ndev->event_cbs), GFP_KERNEL);
>   3895		if (!ndev->vqs || !ndev->event_cbs) {
>   3896			err = -ENOMEM;
>   3897			goto err_alloc;
>   3898		}
>   3899		ndev->cur_num_vqs = MLX5V_DEFAULT_VQ_COUNT;
>   3900	
>   3901		mvqs_set_defaults(ndev);
>   3902		allocate_irqs(ndev);
>   3903		init_rwsem(&ndev->reslock);
>   3904		config = &ndev->config;
>   3905	
>   3906		/*
>   3907		 * mlx5_vdpa vDPA devices currently don't support reporting or
>   3908		 * setting the speed or duplex.
>   3909		 */
> > 3910		config->speed  = cpu_to_mlx5vdpa32(mvdev, SPEED_UNKNOWN);
>   3911		config->duplex = DUPLEX_UNKNOWN;


Looking at this in more detail, so 

1. why not just clear the feature bits?

2. you should not expose SPEED_UNKNOWN in UAPI, it happens to work but
   really there's no intent to devices to actually say "I do not know
   the duplex" - unknown here was intended so we can later add
   new values and userspace will say "I don't know how to interpret it"
   rather than crashing. Same for duplex.




>   3912	
>   3913		if (add_config->mask & BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MTU)) {
>   3914			err = config_func_mtu(mdev, add_config->net.mtu);
>   3915			if (err)
>   3916				goto err_alloc;
>   3917		}
>   3918	
>   3919		if (device_features & BIT_ULL(VIRTIO_NET_F_MTU)) {
>   3920			err = query_mtu(mdev, &mtu);
>   3921			if (err)
>   3922				goto err_alloc;
>   3923	
>   3924			ndev->config.mtu = cpu_to_mlx5vdpa16(mvdev, mtu);
>   3925		}
>   3926	
>   3927		if (device_features & BIT_ULL(VIRTIO_NET_F_STATUS)) {
>   3928			if (get_link_state(mvdev))
>   3929				ndev->config.status |= cpu_to_mlx5vdpa16(mvdev, VIRTIO_NET_S_LINK_UP);
>   3930			else
>   3931				ndev->config.status &= cpu_to_mlx5vdpa16(mvdev, ~VIRTIO_NET_S_LINK_UP);
>   3932		}
>   3933	
>   3934		if (add_config->mask & (1 << VDPA_ATTR_DEV_NET_CFG_MACADDR)) {
>   3935			memcpy(ndev->config.mac, add_config->net.mac, ETH_ALEN);
>   3936		/* No bother setting mac address in config if not going to provision _F_MAC */
>   3937		} else if ((add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) == 0 ||
>   3938			   device_features & BIT_ULL(VIRTIO_NET_F_MAC)) {
>   3939			err = mlx5_query_nic_vport_mac_address(mdev, 0, 0, config->mac);
>   3940			if (err)
>   3941				goto err_alloc;
>   3942		}
>   3943	
>   3944		if (!is_zero_ether_addr(config->mac)) {
>   3945			pfmdev = pci_get_drvdata(pci_physfn(mdev->pdev));
>   3946			err = mlx5_mpfs_add_mac(pfmdev, config->mac);
>   3947			if (err)
>   3948				goto err_alloc;
>   3949		} else if ((add_config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) == 0) {
>   3950			/*
>   3951			 * We used to clear _F_MAC feature bit if seeing
>   3952			 * zero mac address when device features are not
>   3953			 * specifically provisioned. Keep the behaviour
>   3954			 * so old scripts do not break.
>   3955			 */
>   3956			device_features &= ~BIT_ULL(VIRTIO_NET_F_MAC);
>   3957		} else if (device_features & BIT_ULL(VIRTIO_NET_F_MAC)) {
>   3958			/* Don't provision zero mac address for _F_MAC */
>   3959			mlx5_vdpa_warn(&ndev->mvdev,
>   3960				       "No mac address provisioned?\n");
>   3961			err = -EINVAL;
>   3962			goto err_alloc;
>   3963		}
>   3964	
>   3965		if (device_features & BIT_ULL(VIRTIO_NET_F_MQ)) {
>   3966			config->max_virtqueue_pairs = cpu_to_mlx5vdpa16(mvdev, max_vqs / 2);
>   3967			ndev->rqt_size = max_vqs / 2;
>   3968		} else {
>   3969			ndev->rqt_size = 1;
>   3970		}
>   3971	
>   3972		mlx5_cmd_init_async_ctx(mdev, &mvdev->async_ctx);
>   3973	
>   3974		ndev->mvdev.mlx_features = device_features;
>   3975		mvdev->vdev.dma_dev = &mdev->pdev->dev;
>   3976		err = mlx5_vdpa_alloc_resources(&ndev->mvdev);
>   3977		if (err)
>   3978			goto err_alloc;
>   3979	
>   3980		err = mlx5_vdpa_init_mr_resources(mvdev);
>   3981		if (err)
>   3982			goto err_alloc;
>   3983	
>   3984		if (MLX5_CAP_GEN(mvdev->mdev, umem_uid_0)) {
>   3985			err = mlx5_vdpa_create_dma_mr(mvdev);
>   3986			if (err)
>   3987				goto err_alloc;
>   3988		}
>   3989	
>   3990		err = alloc_fixed_resources(ndev);
>   3991		if (err)
>   3992			goto err_alloc;
>   3993	
>   3994		ndev->cvq_ent.mvdev = mvdev;
>   3995		INIT_WORK(&ndev->cvq_ent.work, mlx5_cvq_kick_handler);
>   3996		mvdev->wq = create_singlethread_workqueue("mlx5_vdpa_wq");
>   3997		if (!mvdev->wq) {
>   3998			err = -ENOMEM;
>   3999			goto err_alloc;
>   4000		}
>   4001	
>   4002		mvdev->vdev.mdev = &mgtdev->mgtdev;
>   4003		err = _vdpa_register_device(&mvdev->vdev, max_vqs + 1);
>   4004		if (err)
>   4005			goto err_reg;
>   4006	
>   4007		mgtdev->ndev = ndev;
>   4008	
>   4009		/* For virtio-vdpa, the device was set up during device register. */
>   4010		if (ndev->setup)
>   4011			return 0;
>   4012	
>   4013		down_write(&ndev->reslock);
>   4014		err = setup_vq_resources(ndev, false);
>   4015		up_write(&ndev->reslock);
>   4016		if (err)
>   4017			goto err_setup_vq_res;
>   4018	
>   4019		return 0;
>   4020	
>   4021	err_setup_vq_res:
>   4022		_vdpa_unregister_device(&mvdev->vdev);
>   4023	err_reg:
>   4024		destroy_workqueue(mvdev->wq);
>   4025	err_alloc:
>   4026		put_device(&mvdev->vdev.dev);
>   4027		return err;
>   4028	}
>   4029	
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-11-07 21:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-07 21:34 [linux-next:master 9473/10190] drivers/vdpa/mlx5/net/mlx5_vnet.c:3910:24: sparse: sparse: incorrect type in assignment (different base types) kernel test robot
2024-11-07 21:42 ` Michael S. Tsirkin
2024-11-07 21:48 ` Michael S. Tsirkin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.