A recent Xen commit [1] clarified the semantics of sector based quantities used in the blkif protocol such that it is now safe to create a xen-block device with a logical_block_size != 512, as long as the device only connects to a frontend advertizing 'feature-large-block-size'. This patch modifies xen-block accordingly. It also uses a stack variable for the BlockBackend in xen_block_realize() to avoid repeated dereferencing of the BlockConf pointer, and changes the parameters of xen_block_dataplane_create() so that the BlockBackend pointer and sector size are passed expicitly rather than implicitly via the BlockConf. These modifications have been tested against a recent Windows PV XENVBD driver [2] using a xen-disk device with a 4kB logical block size. [1] http://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=67e1c050e36b2c9900cca83618e56189effbad98 [2] https://winpvdrvbuild.xenproject.org:8080/job/XENVBD-master/126 Signed-off-by: Paul Durrant <paul.durrant@citrix.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com> Message-Id: <20190409164038.25484-1-paul.durrant@citrix.com> [Edited error message] Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
31 lines
1.2 KiB
C
31 lines
1.2 KiB
C
/*
|
|
* Copyright (c) 2018 Citrix Systems Inc.
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#ifndef HW_BLOCK_DATAPLANE_XEN_BLOCK_H
|
|
#define HW_BLOCK_DATAPLANE_XEN_BLOCK_H
|
|
|
|
#include "hw/block/block.h"
|
|
#include "hw/xen/xen-bus.h"
|
|
#include "sysemu/iothread.h"
|
|
|
|
typedef struct XenBlockDataPlane XenBlockDataPlane;
|
|
|
|
XenBlockDataPlane *xen_block_dataplane_create(XenDevice *xendev,
|
|
BlockBackend *blk,
|
|
unsigned int sector_size,
|
|
IOThread *iothread);
|
|
void xen_block_dataplane_destroy(XenBlockDataPlane *dataplane);
|
|
void xen_block_dataplane_start(XenBlockDataPlane *dataplane,
|
|
const unsigned int ring_ref[],
|
|
unsigned int nr_ring_ref,
|
|
unsigned int event_channel,
|
|
unsigned int protocol,
|
|
Error **errp);
|
|
void xen_block_dataplane_stop(XenBlockDataPlane *dataplane);
|
|
|
|
#endif /* HW_BLOCK_DATAPLANE_XEN_BLOCK_H */
|