From: Markus Armbruster <armbru@redhat.com>
To: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
Cc: kwolf@redhat.com, borntraeger@de.ibm.com,
Public KVM Mailing List <qemu-devel@nongnu.org>,
mihajlov@linux.vnet.ibm.com, dahi@linux.vnet.ibm.com,
stefanha@redhat.com, cornelia.huck@de.ibm.com,
pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 6/6] geometry: Target specific hook for s390x in geometry guessing
Date: Fri, 28 Nov 2014 11:47:16 +0100 [thread overview]
Message-ID: <87k32fa9fv.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <1416392276-10408-7-git-send-email-tumanova@linux.vnet.ibm.com> (Ekaterina Tumanova's message of "Wed, 19 Nov 2014 11:17:56 +0100")
Ekaterina Tumanova <tumanova@linux.vnet.ibm.com> writes:
> For target-s390x, the behaviour is chosen as follows:
> If no geo could be guessed from backing device, guess_disk_lchs (partition
> table guessing) is called.
> If this is not successful (e.g. image files) geometry is derived from the
> size of the disk (as before).
> We have no translation on s390, so we simply set in to NONE.
>
> Signed-off-by: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
> ---
> hw/block/Makefile.objs | 6 +++++-
> hw/block/hd-geometry.c | 36 +++++++++++++++++++++++++++++++-----
> 2 files changed, 36 insertions(+), 6 deletions(-)
>
> diff --git a/hw/block/Makefile.objs b/hw/block/Makefile.objs
> index d4c3ab7..1f7da7a 100644
> --- a/hw/block/Makefile.objs
> +++ b/hw/block/Makefile.objs
> @@ -1,4 +1,4 @@
> -common-obj-y += block.o cdrom.o hd-geometry.o
> +common-obj-y += block.o cdrom.o
> common-obj-$(CONFIG_FDC) += fdc.o
> common-obj-$(CONFIG_SSI_M25P80) += m25p80.o
> common-obj-$(CONFIG_NAND) += nand.o
> @@ -13,3 +13,7 @@ obj-$(CONFIG_SH4) += tc58128.o
>
> obj-$(CONFIG_VIRTIO) += virtio-blk.o
> obj-$(CONFIG_VIRTIO) += dataplane/
> +
> +# geometry is target/architecture dependent and therefore needs to be built
> +# for every target platform
> +obj-y += hd-geometry.o
> diff --git a/hw/block/hd-geometry.c b/hw/block/hd-geometry.c
> index 4972114..b462225 100644
> --- a/hw/block/hd-geometry.c
> +++ b/hw/block/hd-geometry.c
> @@ -49,11 +49,12 @@ struct partition {
>
> /* try to guess the disk logical geometry from the MSDOS partition table.
> Return 0 if OK, -1 if could not guess */
> -static int guess_disk_lchs(BlockBackend *blk,
> - int *pcylinders, int *pheads, int *psectors)
> +static int guess_disk_lchs(BlockBackend *blk, uint32_t *pcylinders,
> + uint32_t *pheads, uint32_t *psectors)
> {
> uint8_t buf[BDRV_SECTOR_SIZE];
> - int i, heads, sectors, cylinders;
> + int i;
> + uint32_t heads, sectors, cylinders;
> struct partition *p;
> uint32_t nr_sects;
> uint64_t nb_sectors;
> @@ -116,11 +117,11 @@ static void guess_chs_for_size(BlockBackend *blk,
> *psecs = 63;
> }
>
> +#ifdef TARGET_S390X
> void hd_geometry_guess(BlockBackend *blk,
> uint32_t *pcyls, uint32_t *pheads, uint32_t *psecs,
> int *ptrans)
> {
> - int cylinders, heads, secs, translation;
> struct ProbeGeometry geometry = blk_probe_geometry(blk);
>
> if (geometry.rc == 0) {
> @@ -129,7 +130,32 @@ void hd_geometry_guess(BlockBackend *blk,
> *pheads = geometry.geo.heads;
> goto done;
> }
> + if (guess_disk_lchs(blk, pcyls, pheads, psecs) == 0) {
> + goto done;
> + }
> + guess_chs_for_size(blk, pcyls, pheads, psecs);
> +done:
> + if (ptrans) {
> + *ptrans = BIOS_ATA_TRANSLATION_NONE;
> + }
The goto looks awkward... What about
if (guess_disk_lchs(blk, pcyls, pheads, psecs) < 0) {
guess_chs_for_size(blk, pcyls, pheads, psecs);
}
>
> + trace_hd_geometry_guess(blk, *pcyls, *pheads, *psecs,
> + BIOS_ATA_TRANSLATION_NONE);
> +}
> +#else
> +void hd_geometry_guess(BlockBackend *blk,
> + uint32_t *pcyls, uint32_t *pheads, uint32_t *psecs,
> + int *ptrans)
> +{
> + int cylinders, heads, secs, translation;
> + struct ProbeGeometry geometry = blk_probe_geometry(blk);
> +
> + if (geometry.rc == 0) {
> + *pcyls = geometry.geo.cylinders;
> + *psecs = geometry.geo.sectors;
> + *pheads = geometry.geo.heads;
> + goto done;
> + }
> if (guess_disk_lchs(blk, &cylinders, &heads, &secs) < 0) {
> /* no LCHS guess: use a standard physical disk geometry */
> guess_chs_for_size(blk, pcyls, pheads, psecs);
> @@ -157,7 +183,7 @@ done:
> }
> trace_hd_geometry_guess(blk, *pcyls, *pheads, *psecs, translation);
> }
> -
> +#endif
Please put the blank line after the #endif.
> int hd_bios_chs_auto_trans(uint32_t cyls, uint32_t heads, uint32_t secs)
> {
> return cyls <= 1024 && heads <= 16 && secs <= 63
hd_geometry_guess() behavior before this series:
If we can't guess LCHS from MSDOS partition table
guess geometry on size
translation is NONE for very small disk, else LBA
Else if LCHS guess has heads > 16
BIOS LBA translation must be active
guess geometry on size
translation is LARGE for sufficiently small disk, else LBA
Else
use LCHS guess
translation is NONE
Afterwards, targets other than s390x:
If backend has a geometry (currently only DASD has)
use backend geometry
translation is NONE
Else behave like before this series
Incompatible change. Why do we want it?
Afterwards, target s390x:
If backend has a geometry (currently only DASD has)
use backend geometry
translation is NONE
Else if we can't guess LCHS from MSDOS partition table
guess geometry on size
Else
use LCHS guess
Regardless, translation is NONE
Non-trivial incompatible change. At least some of it is wanted.
Why do you still guess from an MS-DOS partition table with an s390x
target?
The only caller that passes non-null ptrans is ide_dev_initfn(), and the
only user of the value stored there is pc_cmos_init_late(). Thus,
what you store here doesn't matter.
next prev parent reply other threads:[~2014-11-28 10:47 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-19 10:17 [Qemu-devel] [PATCH v2 0/6] Geometry and blocksize support for backing devices Ekaterina Tumanova
2014-11-19 10:17 ` [Qemu-devel] [PATCH v2 1/6] geometry: add bdrv functions for geometry and blocksize Ekaterina Tumanova
2014-11-21 10:01 ` Christian Borntraeger
2014-11-27 14:55 ` Markus Armbruster
2014-11-27 16:05 ` Ekaterina Tumanova
2014-11-28 8:25 ` Markus Armbruster
2014-11-19 10:17 ` [Qemu-devel] [PATCH v2 2/6] geometry: Detect blocksize via ioctls in separate static functions Ekaterina Tumanova
2014-11-21 10:17 ` Christian Borntraeger
2014-11-25 11:09 ` Stefan Hajnoczi
2014-11-27 17:41 ` Markus Armbruster
2014-11-28 10:58 ` Ekaterina Tumanova
2014-11-28 12:52 ` Markus Armbruster
2014-11-28 13:28 ` Ekaterina Tumanova
2014-11-19 10:17 ` [Qemu-devel] [PATCH v2 3/6] geometry: Add driver methods to probe blocksizes and geometry Ekaterina Tumanova
2014-11-21 13:52 ` Christian Borntraeger
2014-11-28 8:43 ` Markus Armbruster
2014-11-19 10:17 ` [Qemu-devel] [PATCH v2 4/6] geometry: Add block-backend wrappers for geometry probing Ekaterina Tumanova
2014-11-19 10:17 ` [Qemu-devel] [PATCH v2 5/6] geometry: Call backend function to detect geometry and blocksize Ekaterina Tumanova
2014-11-28 10:10 ` Markus Armbruster
2014-11-28 10:54 ` Ekaterina Tumanova
2014-11-28 12:58 ` Markus Armbruster
2014-11-28 10:27 ` Markus Armbruster
2014-11-19 10:17 ` [Qemu-devel] [PATCH v2 6/6] geometry: Target specific hook for s390x in geometry guessing Ekaterina Tumanova
2014-11-28 10:47 ` Markus Armbruster [this message]
2014-11-19 11:39 ` [Qemu-devel] [PATCH v2 0/6] Geometry and blocksize support for backing devices Christian Borntraeger
2014-11-19 14:01 ` [Qemu-devel] [PATCH] geometry: fix i386 compilation Ekaterina Tumanova
2014-11-19 14:40 ` Peter Maydell
2014-11-19 15:04 ` Cornelia Huck
2014-11-20 16:18 ` Kevin Wolf
2014-11-20 16:30 ` Christian Borntraeger
2014-11-21 9:42 ` Ekaterina Tumanova
2014-11-28 10:47 ` Markus Armbruster
2014-11-21 14:01 ` [Qemu-devel] [PATCH v2 0/6] Geometry and blocksize support for backing devices Christian Borntraeger
2014-11-25 13:01 ` Stefan Hajnoczi
2014-11-26 10:16 ` Ekaterina Tumanova
2014-11-28 10:35 ` Stefan Hajnoczi
2014-11-28 11:15 ` Ekaterina Tumanova
2014-11-28 13:40 ` Markus Armbruster
2014-11-28 10:40 ` Stefan Hajnoczi
2014-11-28 10:57 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k32fa9fv.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cornelia.huck@de.ibm.com \
--cc=dahi@linux.vnet.ibm.com \
--cc=kwolf@redhat.com \
--cc=mihajlov@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=tumanova@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.