vDPA: report virtio-block capacity to user space
This commit allows userspace to query capacity of a virtio-block device. Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com> Message-Id: <20240218185606.13509-2-lingshan.zhu@intel.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
2b666ee296
commit
c2475a9a78
@ -944,6 +944,38 @@ static int vdpa_dev_net_config_fill(struct vdpa_device *vdev, struct sk_buff *ms
|
||||
return vdpa_dev_net_mq_config_fill(msg, features_device, &config);
|
||||
}
|
||||
|
||||
static int
|
||||
vdpa_dev_blk_capacity_config_fill(struct sk_buff *msg,
|
||||
const struct virtio_blk_config *config)
|
||||
{
|
||||
u64 val_u64;
|
||||
|
||||
val_u64 = __virtio64_to_cpu(true, config->capacity);
|
||||
|
||||
return nla_put_u64_64bit(msg, VDPA_ATTR_DEV_BLK_CFG_CAPACITY,
|
||||
val_u64, VDPA_ATTR_PAD);
|
||||
}
|
||||
|
||||
static int vdpa_dev_blk_config_fill(struct vdpa_device *vdev,
|
||||
struct sk_buff *msg)
|
||||
{
|
||||
struct virtio_blk_config config = {};
|
||||
u64 features_device;
|
||||
|
||||
vdev->config->get_config(vdev, 0, &config, sizeof(config));
|
||||
|
||||
features_device = vdev->config->get_device_features(vdev);
|
||||
|
||||
if (nla_put_u64_64bit(msg, VDPA_ATTR_DEV_FEATURES, features_device,
|
||||
VDPA_ATTR_PAD))
|
||||
return -EMSGSIZE;
|
||||
|
||||
if (vdpa_dev_blk_capacity_config_fill(msg, &config))
|
||||
return -EMSGSIZE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
vdpa_dev_config_fill(struct vdpa_device *vdev, struct sk_buff *msg, u32 portid, u32 seq,
|
||||
int flags, struct netlink_ext_ack *extack)
|
||||
@ -988,6 +1020,9 @@ vdpa_dev_config_fill(struct vdpa_device *vdev, struct sk_buff *msg, u32 portid,
|
||||
case VIRTIO_ID_NET:
|
||||
err = vdpa_dev_net_config_fill(vdev, msg);
|
||||
break;
|
||||
case VIRTIO_ID_BLOCK:
|
||||
err = vdpa_dev_blk_config_fill(vdev, msg);
|
||||
break;
|
||||
default:
|
||||
err = -EOPNOTSUPP;
|
||||
break;
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/vhost_iotlb.h>
|
||||
#include <linux/virtio_net.h>
|
||||
#include <linux/virtio_blk.h>
|
||||
#include <linux/if_ether.h>
|
||||
|
||||
/**
|
||||
|
@ -56,6 +56,8 @@ enum vdpa_attr {
|
||||
/* virtio features that are provisioned to the vDPA device */
|
||||
VDPA_ATTR_DEV_FEATURES, /* u64 */
|
||||
|
||||
VDPA_ATTR_DEV_BLK_CFG_CAPACITY, /* u64 */
|
||||
|
||||
/* new attributes must be added above here */
|
||||
VDPA_ATTR_MAX,
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user