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,