Message ID | 20220826143248.580939-6-d-tatianin@yandex-team.ru |
---|---|
State | New |
Headers | show |
Series | vhost-user-blk: dynamically resize config space based on features | expand |
The vhost-user-blk bits in meson.build and Maintainers should probably be in patch 8? Otherwise LGTM. On Fri, Aug 26, 2022 at 05:32:45PM +0300, Daniil Tatianin wrote: > This way we can reuse it for other virtio-blk devices, e.g > vhost-user-blk, which currently does not control its config space size > dynamically. > > Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru> > --- > MAINTAINERS | 4 +++ > hw/block/meson.build | 4 +-- > hw/block/virtio-blk-common.c | 39 +++++++++++++++++++++++++++ > hw/block/virtio-blk.c | 24 ++--------------- > include/hw/virtio/virtio-blk-common.h | 20 ++++++++++++++ > 5 files changed, 67 insertions(+), 24 deletions(-) > create mode 100644 hw/block/virtio-blk-common.c > create mode 100644 include/hw/virtio/virtio-blk-common.h > <snip> i.e. move this. > @@ -2271,11 +2273,13 @@ S: Maintained > F: contrib/vhost-user-blk/ > F: contrib/vhost-user-scsi/ > F: hw/block/vhost-user-blk.c > +F: hw/block/virtio-blk-common.c > F: hw/scsi/vhost-user-scsi.c > F: hw/virtio/vhost-user-blk-pci.c > F: hw/virtio/vhost-user-scsi-pci.c > F: include/hw/virtio/vhost-user-blk.h > F: include/hw/virtio/vhost-user-scsi.h > +F: include/hw/virtio/virtio-blk-common.h > > vhost-user-gpu > M: Marc-André Lureau <marcandre.lureau@redhat.com> > diff --git a/hw/block/meson.build b/hw/block/meson.build > index 2389326112..1908abd45c 100644 > --- a/hw/block/meson.build > +++ b/hw/block/meson.build > @@ -16,7 +16,7 @@ softmmu_ss.add(when: 'CONFIG_SWIM', if_true: files('swim.c')) > softmmu_ss.add(when: 'CONFIG_XEN', if_true: files('xen-block.c')) > softmmu_ss.add(when: 'CONFIG_TC58128', if_true: files('tc58128.c')) > > -specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c')) > -specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk.c')) > +specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c', 'virtio-blk-common.c')) And this > +specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk.c', 'virtio-blk-common.c'))
On 9/2/22 8:57 PM, Raphael Norwitz wrote: > The vhost-user-blk bits in meson.build and Maintainers should probably > be in patch 8? You're totally right, thanks. > Otherwise LGTM. > > On Fri, Aug 26, 2022 at 05:32:45PM +0300, Daniil Tatianin wrote: >> This way we can reuse it for other virtio-blk devices, e.g >> vhost-user-blk, which currently does not control its config space size >> dynamically. >> >> Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru> >> --- >> MAINTAINERS | 4 +++ >> hw/block/meson.build | 4 +-- >> hw/block/virtio-blk-common.c | 39 +++++++++++++++++++++++++++ >> hw/block/virtio-blk.c | 24 ++--------------- >> include/hw/virtio/virtio-blk-common.h | 20 ++++++++++++++ >> 5 files changed, 67 insertions(+), 24 deletions(-) >> create mode 100644 hw/block/virtio-blk-common.c >> create mode 100644 include/hw/virtio/virtio-blk-common.h >> > > <snip> > > i.e. move this. > >> @@ -2271,11 +2273,13 @@ S: Maintained >> F: contrib/vhost-user-blk/ >> F: contrib/vhost-user-scsi/ >> F: hw/block/vhost-user-blk.c >> +F: hw/block/virtio-blk-common.c >> F: hw/scsi/vhost-user-scsi.c >> F: hw/virtio/vhost-user-blk-pci.c >> F: hw/virtio/vhost-user-scsi-pci.c >> F: include/hw/virtio/vhost-user-blk.h >> F: include/hw/virtio/vhost-user-scsi.h >> +F: include/hw/virtio/virtio-blk-common.h >> >> vhost-user-gpu >> M: Marc-André Lureau <marcandre.lureau@redhat.com> >> diff --git a/hw/block/meson.build b/hw/block/meson.build >> index 2389326112..1908abd45c 100644 >> --- a/hw/block/meson.build >> +++ b/hw/block/meson.build >> @@ -16,7 +16,7 @@ softmmu_ss.add(when: 'CONFIG_SWIM', if_true: files('swim.c')) >> softmmu_ss.add(when: 'CONFIG_XEN', if_true: files('xen-block.c')) >> softmmu_ss.add(when: 'CONFIG_TC58128', if_true: files('tc58128.c')) >> >> -specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c')) >> -specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk.c')) >> +specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c', 'virtio-blk-common.c')) > > And this > >> +specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk.c', 'virtio-blk-common.c'))
diff --git a/MAINTAINERS b/MAINTAINERS index 5ce4227ff6..a7d3914735 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2030,8 +2030,10 @@ virtio-blk M: Stefan Hajnoczi <stefanha@redhat.com> L: qemu-block@nongnu.org S: Supported +F: hw/block/virtio-blk-common.c F: hw/block/virtio-blk.c F: hw/block/dataplane/* +F: include/hw/virtio/virtio-blk-common.h F: tests/qtest/virtio-blk-test.c T: git https://github.com/stefanha/qemu.git block @@ -2271,11 +2273,13 @@ S: Maintained F: contrib/vhost-user-blk/ F: contrib/vhost-user-scsi/ F: hw/block/vhost-user-blk.c +F: hw/block/virtio-blk-common.c F: hw/scsi/vhost-user-scsi.c F: hw/virtio/vhost-user-blk-pci.c F: hw/virtio/vhost-user-scsi-pci.c F: include/hw/virtio/vhost-user-blk.h F: include/hw/virtio/vhost-user-scsi.h +F: include/hw/virtio/virtio-blk-common.h vhost-user-gpu M: Marc-André Lureau <marcandre.lureau@redhat.com> diff --git a/hw/block/meson.build b/hw/block/meson.build index 2389326112..1908abd45c 100644 --- a/hw/block/meson.build +++ b/hw/block/meson.build @@ -16,7 +16,7 @@ softmmu_ss.add(when: 'CONFIG_SWIM', if_true: files('swim.c')) softmmu_ss.add(when: 'CONFIG_XEN', if_true: files('xen-block.c')) softmmu_ss.add(when: 'CONFIG_TC58128', if_true: files('tc58128.c')) -specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c')) -specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk.c')) +specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c', 'virtio-blk-common.c')) +specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk.c', 'virtio-blk-common.c')) subdir('dataplane') diff --git a/hw/block/virtio-blk-common.c b/hw/block/virtio-blk-common.c new file mode 100644 index 0000000000..ac52d7c176 --- /dev/null +++ b/hw/block/virtio-blk-common.c @@ -0,0 +1,39 @@ +/* + * Virtio Block Device common helpers + * + * Copyright IBM, Corp. 2007 + * + * Authors: + * Anthony Liguori <aliguori@us.ibm.com> + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" + +#include "standard-headers/linux/virtio_blk.h" +#include "hw/virtio/virtio.h" +#include "hw/virtio/virtio-blk-common.h" + +/* Config size before the discard support (hide associated config fields) */ +#define VIRTIO_BLK_CFG_SIZE offsetof(struct virtio_blk_config, \ + max_discard_sectors) + +/* + * Starting from the discard feature, we can use this array to properly + * set the config size depending on the features enabled. + */ +static const VirtIOFeature feature_sizes[] = { + {.flags = 1ULL << VIRTIO_BLK_F_DISCARD, + .end = endof(struct virtio_blk_config, discard_sector_alignment)}, + {.flags = 1ULL << VIRTIO_BLK_F_WRITE_ZEROES, + .end = endof(struct virtio_blk_config, write_zeroes_may_unmap)}, + {} +}; + +const VirtIOConfigSizeParams virtio_blk_cfg_size_params = { + .min_size = VIRTIO_BLK_CFG_SIZE, + .max_size = sizeof(struct virtio_blk_config), + .feature_sizes = feature_sizes +}; diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index 10c47c2934..8131ec2dbc 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -32,29 +32,9 @@ #include "hw/virtio/virtio-bus.h" #include "migration/qemu-file-types.h" #include "hw/virtio/virtio-access.h" +#include "hw/virtio/virtio-blk-common.h" #include "qemu/coroutine.h" -/* Config size before the discard support (hide associated config fields) */ -#define VIRTIO_BLK_CFG_SIZE offsetof(struct virtio_blk_config, \ - max_discard_sectors) -/* - * Starting from the discard feature, we can use this array to properly - * set the config size depending on the features enabled. - */ -static const VirtIOFeature feature_sizes[] = { - {.flags = 1ULL << VIRTIO_BLK_F_DISCARD, - .end = endof(struct virtio_blk_config, discard_sector_alignment)}, - {.flags = 1ULL << VIRTIO_BLK_F_WRITE_ZEROES, - .end = endof(struct virtio_blk_config, write_zeroes_may_unmap)}, - {} -}; - -static const VirtIOConfigSizeParams cfg_size_params = { - .min_size = VIRTIO_BLK_CFG_SIZE, - .max_size = sizeof(struct virtio_blk_config), - .feature_sizes = feature_sizes -}; - static void virtio_blk_init_request(VirtIOBlock *s, VirtQueue *vq, VirtIOBlockReq *req) { @@ -1202,7 +1182,7 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp) return; } - s->config_size = virtio_get_config_size(&cfg_size_params, + s->config_size = virtio_get_config_size(&virtio_blk_cfg_size_params, s->host_features); virtio_init(vdev, VIRTIO_ID_BLOCK, s->config_size); diff --git a/include/hw/virtio/virtio-blk-common.h b/include/hw/virtio/virtio-blk-common.h new file mode 100644 index 0000000000..31daada3e3 --- /dev/null +++ b/include/hw/virtio/virtio-blk-common.h @@ -0,0 +1,20 @@ +/* + * Virtio Block Device common helpers + * + * Copyright IBM, Corp. 2007 + * + * Authors: + * Anthony Liguori <aliguori@us.ibm.com> + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + */ + +#ifndef VIRTIO_BLK_COMMON_H +#define VIRTIO_BLK_COMMON_H + +#include "hw/virtio/virtio.h" + +extern const VirtIOConfigSizeParams virtio_blk_cfg_size_params; + +#endif
This way we can reuse it for other virtio-blk devices, e.g vhost-user-blk, which currently does not control its config space size dynamically. Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru> --- MAINTAINERS | 4 +++ hw/block/meson.build | 4 +-- hw/block/virtio-blk-common.c | 39 +++++++++++++++++++++++++++ hw/block/virtio-blk.c | 24 ++--------------- include/hw/virtio/virtio-blk-common.h | 20 ++++++++++++++ 5 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 hw/block/virtio-blk-common.c create mode 100644 include/hw/virtio/virtio-blk-common.h