mirror of https://github.com/xemu-project/xemu.git
virtio-blk: move config size params to virtio-blk-common
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> Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com> Message-Id: <20220906073111.353245-3-d-tatianin@yandex-team.ru> Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
d74c30c811
commit
d9cf55a86d
|
@ -2030,8 +2030,10 @@ virtio-blk
|
||||||
M: Stefan Hajnoczi <stefanha@redhat.com>
|
M: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
L: qemu-block@nongnu.org
|
L: qemu-block@nongnu.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: hw/block/virtio-blk-common.c
|
||||||
F: hw/block/virtio-blk.c
|
F: hw/block/virtio-blk.c
|
||||||
F: hw/block/dataplane/*
|
F: hw/block/dataplane/*
|
||||||
|
F: include/hw/virtio/virtio-blk-common.h
|
||||||
F: tests/qtest/virtio-blk-test.c
|
F: tests/qtest/virtio-blk-test.c
|
||||||
T: git https://github.com/stefanha/qemu.git block
|
T: git https://github.com/stefanha/qemu.git block
|
||||||
|
|
||||||
|
|
|
@ -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_XEN', if_true: files('xen-block.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_TC58128', if_true: files('tc58128.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_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'))
|
specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk.c'))
|
||||||
|
|
||||||
subdir('dataplane')
|
subdir('dataplane')
|
||||||
|
|
|
@ -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
|
||||||
|
};
|
|
@ -32,29 +32,9 @@
|
||||||
#include "hw/virtio/virtio-bus.h"
|
#include "hw/virtio/virtio-bus.h"
|
||||||
#include "migration/qemu-file-types.h"
|
#include "migration/qemu-file-types.h"
|
||||||
#include "hw/virtio/virtio-access.h"
|
#include "hw/virtio/virtio-access.h"
|
||||||
|
#include "hw/virtio/virtio-blk-common.h"
|
||||||
#include "qemu/coroutine.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,
|
static void virtio_blk_init_request(VirtIOBlock *s, VirtQueue *vq,
|
||||||
VirtIOBlockReq *req)
|
VirtIOBlockReq *req)
|
||||||
{
|
{
|
||||||
|
@ -1202,7 +1182,7 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
|
||||||
return;
|
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);
|
s->host_features);
|
||||||
virtio_init(vdev, VIRTIO_ID_BLOCK, s->config_size);
|
virtio_init(vdev, VIRTIO_ID_BLOCK, s->config_size);
|
||||||
|
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue