From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41499) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqlSg-0006cr-GC for qemu-devel@nongnu.org; Tue, 18 Nov 2014 11:17:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XqlSX-0005fW-An for qemu-devel@nongnu.org; Tue, 18 Nov 2014 11:17:02 -0500 Received: from e06smtp13.uk.ibm.com ([195.75.94.109]:38956) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqlSX-0005fL-38 for qemu-devel@nongnu.org; Tue, 18 Nov 2014 11:16:53 -0500 Received: from /spool/local by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 18 Nov 2014 16:16:52 -0000 Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id 9255117D8045 for ; Tue, 18 Nov 2014 16:17:02 +0000 (GMT) Received: from d06av06.portsmouth.uk.ibm.com (d06av06.portsmouth.uk.ibm.com [9.149.37.217]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id sAIGGob017170710 for ; Tue, 18 Nov 2014 16:16:50 GMT Received: from d06av06.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av06.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id sAIBE1Bh002456 for ; Tue, 18 Nov 2014 06:14:01 -0500 Received: from [9.156.34.39] (tumanova.moscow-rstl.ru.ibm.com [9.156.34.39] (may be forged)) by d06av06.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id sAIBE1FG002445 for ; Tue, 18 Nov 2014 06:14:01 -0500 Message-ID: <546B70F1.7010708@linux.vnet.ibm.com> Date: Tue, 18 Nov 2014 19:16:49 +0300 From: Ekaterina Tumanova MIME-Version: 1.0 References: <1416327001-22278-7-git-send-email-tumanova@linux.vnet.ibm.com> In-Reply-To: <1416327001-22278-7-git-send-email-tumanova@linux.vnet.ibm.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Fwd: [PATCH v2 6/6] geometry: Target specific hook for s390x in geometry guessing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel copying to mail list -------- Forwarded Message -------- Subject: [PATCH v2 6/6] geometry: Target specific hook for s390x in geometry guessing Date: Tue, 18 Nov 2014 17:10:01 +0100 From: Ekaterina Tumanova To: armbru@redhat.com, pbonzini@redhat.com, stefanha@redhat.com, kwolf@redhat.com CC: borntraeger@de.ibm.com, cornelia.huck@de.ibm.com, dahi@linux.vnet.ibm.com, mihajlov@linux.vnet.ibm.com, Ekaterina Tumanova 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 --- 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; + } + 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 int hd_bios_chs_auto_trans(uint32_t cyls, uint32_t heads, uint32_t secs) { return cyls <= 1024 && heads <= 16 && secs <= 63 -- 1.8.5.5