Am 19.11.2014 um 11:17 schrieb Ekaterina Tumanova:
> Hi folks,
>
> I'm sorry for the recent spam. I messed up during code submission last time.
> So please ignore any previous notes you received from me and answer only to
> this thread.
>
> This is the rework of the geometry+blocksize patch, which was
> recently discussed here:
> http://lists.gnu.org/archive/html/qemu-devel/2014-11/msg01148.html
>
> Markus suggested that we only detect blocksize and geometry for DASDs.
>
> According to this agreement new version contains DASD special casing.
> The driver methods are implemented only for "host_device" and inner hdev_xxx
> functions check if the backing storage is a DASD by means of
> BIODASDINFO2 ioctl.
>
> Original patchset can be found here:
> http://lists.gnu.org/archive/html/qemu-devel/2014-07/msg03791.html
>
> Ekaterina Tumanova (6):
> geometry: add bdrv functions for geometry and blocksize
> geometry: Detect blocksize via ioctls in separate static functions
> geometry: Add driver methods to probe blocksizes and geometry
> geometry: Add block-backend wrappers for geometry probing
> geometry: Call backend function to detect geometry and blocksize
> geometry: Target specific hook for s390x in geometry guessing
>
> block.c | 26 +++++++++
> block/block-backend.c | 10 ++++
> block/raw-posix.c | 123
> ++++++++++++++++++++++++++++++++++-------
> block/raw_bsd.c | 12 ++++
> hw/block/Makefile.objs | 6 +-
> hw/block/block.c | 11 ++++
> hw/block/hd-geometry.c | 43 ++++++++++++--
> hw/block/virtio-blk.c | 1 +
> include/block/block.h | 20 +++++++
> include/block/block_int.h | 3 +
> include/hw/block/block.h | 1 +
> include/sysemu/block-backend.h | 2 +
> 12 files changed, 234 insertions(+), 24 deletions(-)
>
I can confirm that it makes dasd devices on s390 work (partition detection is
fine, so geometry/sector size must be as well)
This patch set needs to be fixed for i386, though:
/home/cborntra/REPOS/qemu/hw/block/hd-geometry.c: In function
'hd_geometry_guess':
/home/cborntra/REPOS/qemu/hw/block/hd-geometry.c:159:5: error: pointer targets
in passing argument 2 of 'guess_disk_lchs' differ in signedness
[-Werror=pointer-sign]
if (guess_disk_lchs(blk, &cylinders, &heads, &secs) < 0) {
^
/home/cborntra/REPOS/qemu/hw/block/hd-geometry.c:52:12: note: expected
'uint32_t *' but argument is of type 'int *'
static int guess_disk_lchs(BlockBackend *blk, uint32_t *pcylinders,