vdpasim: customize allocation size
authorJason Wang <jasowang@redhat.com>
Fri, 23 Dec 2022 05:55:46 +0000 (13:55 +0800)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 21 Feb 2023 00:26:57 +0000 (19:26 -0500)
Allow individual simulator to customize the allocation size.

Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Eugenio PĂ©rez <eperezma@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20221223055548.27810-3-jasowang@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/vdpa/vdpa_sim/vdpa_sim.c
drivers/vdpa/vdpa_sim/vdpa_sim.h
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
drivers/vdpa/vdpa_sim/vdpa_sim_net.c

index f41f9fc522ee39fd920c81cb8312bea4c3c1b408..45905db17f86cb28914440b8e7f75e92900b7a20 100644 (file)
@@ -256,6 +256,9 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr,
        struct device *dev;
        int i, ret = -ENOMEM;
 
+       if (!dev_attr->alloc_size)
+               return ERR_PTR(-EINVAL);
+
        if (config->mask & BIT_ULL(VDPA_ATTR_DEV_FEATURES)) {
                if (config->device_features &
                    ~dev_attr->supported_features)
@@ -271,7 +274,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr,
 
        vdpa = __vdpa_alloc_device(NULL, ops,
                                   dev_attr->ngroups, dev_attr->nas,
-                                  sizeof(struct vdpasim),
+                                  dev_attr->alloc_size,
                                   dev_attr->name, false);
        if (IS_ERR(vdpa)) {
                ret = PTR_ERR(vdpa);
index a745605589e20c6af5199321492939a6235fa897..8a379ef4196cd5e427b56c7279dba37c28179e3c 100644 (file)
@@ -37,6 +37,7 @@ struct vdpasim_dev_attr {
        struct vdpa_mgmt_dev *mgmt_dev;
        const char *name;
        u64 supported_features;
+       size_t alloc_size;
        size_t config_size;
        size_t buffer_size;
        int nvqs;
index f745926237a88dc34176cfde834368dfc31ddf13..5117959bed8a2c847df8cec3a847e9f08855170f 100644 (file)
@@ -378,6 +378,7 @@ static int vdpasim_blk_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
        dev_attr.nvqs = VDPASIM_BLK_VQ_NUM;
        dev_attr.ngroups = VDPASIM_BLK_GROUP_NUM;
        dev_attr.nas = VDPASIM_BLK_AS_NUM;
+       dev_attr.alloc_size = sizeof(struct vdpasim);
        dev_attr.config_size = sizeof(struct virtio_blk_config);
        dev_attr.get_config = vdpasim_blk_get_config;
        dev_attr.work_fn = vdpasim_blk_work;
index e8a115fbe49f219ea1e210b8ac873a767698f0a6..5abd4efd90284dc83a63d46e6988478e9b2b7037 100644 (file)
@@ -253,6 +253,7 @@ static int vdpasim_net_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
        dev_attr.nvqs = VDPASIM_NET_VQ_NUM;
        dev_attr.ngroups = VDPASIM_NET_GROUP_NUM;
        dev_attr.nas = VDPASIM_NET_AS_NUM;
+       dev_attr.alloc_size = sizeof(struct vdpasim);
        dev_attr.config_size = sizeof(struct virtio_net_config);
        dev_attr.get_config = vdpasim_net_get_config;
        dev_attr.work_fn = vdpasim_net_work;