Just failed to probe the vdpa device if the min virtqueue num returned by get_vq_num_min is greater than the max virtqueue num returned by get_vq_num_max.
Unified · Split
| @@ -26,8 +26,16 @@ static int vdpa_dev_probe(struct device *d) · 25 unmodified lines | |||
| 26 | { | 26 | { |
| 27 | struct vdpa_device *vdev = dev_to_vdpa(d); | 27 | struct vdpa_device *vdev = dev_to_vdpa(d); |
| 28 | struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver); | 28 | struct vdpa_driver *drv = drv_to_vdpa(vdev->dev.driver); |
| 29 | const struct vdpa_config_ops *ops = vdev->config; | ||
| 30 | u32 max_num, min_num = 1; | ||
| 29 | int ret = 0; | 31 | int ret = 0; |
| 30 | 32 | ||
| 33 | max_num = ops->get_vq_num_max(vdev); | ||
| 34 | if (ops->get_vq_num_min) | ||
| 35 | min_num = ops->get_vq_num_min(vdev); | ||
| 36 | if (max_num < min_num) | ||
| 37 | return -EINVAL; | ||
| 38 | |||
| 31 | if (drv && drv->probe) | 39 | if (drv && drv->probe) |
| 32 | ret = drv->probe(vdev); | 40 | ret = drv->probe(vdev); |
| 33 | 41 | ||