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>
|
||||
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
|
||||
|
||||
|
|
|
@ -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_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'))
|
||||
|
||||
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 "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);
|
||||
|
||||
|
|
|
@ -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