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 | 27 | struct vdpa_device *vdev = dev_to_vdpa(d); |
| 28 | 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 | 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 | 39 | if (drv && drv->probe) |
| 32 | 40 | ret = drv->probe(vdev); |
| 33 | 41 | |