From patchwork Tue Nov 18 16:16:37 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ekaterina Tumanova X-Patchwork-Id: 412080 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id A4F9F14010F for ; Wed, 19 Nov 2014 03:17:41 +1100 (AEDT) Received: from localhost ([::1]:53996 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqlTH-0007gB-J5 for incoming@patchwork.ozlabs.org; Tue, 18 Nov 2014 11:17:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41428) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqlSV-0006JC-0W for qemu-devel@nongnu.org; Tue, 18 Nov 2014 11:17:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XqlSL-0005ce-VM for qemu-devel@nongnu.org; Tue, 18 Nov 2014 11:16:50 -0500 Received: from e06smtp15.uk.ibm.com ([195.75.94.111]:54248) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqlSL-0005cR-Mz for qemu-devel@nongnu.org; Tue, 18 Nov 2014 11:16:41 -0500 Received: from /spool/local by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 18 Nov 2014 16:16:40 -0000 Received: from d06dlp03.portsmouth.uk.ibm.com (9.149.20.15) by e06smtp15.uk.ibm.com (192.168.101.145) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 18 Nov 2014 16:16:38 -0000 Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by d06dlp03.portsmouth.uk.ibm.com (Postfix) with ESMTP id EFB6D1B08049 for ; Tue, 18 Nov 2014 16:16:49 +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 sAIGGc2X16187872 for ; Tue, 18 Nov 2014 16:16:38 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 sAIBDnZR002064 for ; Tue, 18 Nov 2014 06:13:49 -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 sAIBDnTp002055 for ; Tue, 18 Nov 2014 06:13:49 -0500 Message-ID: <546B70E5.70904@linux.vnet.ibm.com> Date: Tue, 18 Nov 2014 19:16:37 +0300 From: Ekaterina Tumanova User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: qemu-devel References: <1416327001-22278-6-git-send-email-tumanova@linux.vnet.ibm.com> In-Reply-To: <1416327001-22278-6-git-send-email-tumanova@linux.vnet.ibm.com> X-Forwarded-Message-Id: <1416327001-22278-6-git-send-email-tumanova@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 14111816-0021-0000-0000-000001D3630B X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 195.75.94.111 Subject: [Qemu-devel] Fwd: [PATCH v2 5/6] geometry: Call backend function to detect geometry and blocksize X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org copying to mail list -------- Forwarded Message -------- Subject: [PATCH v2 5/6] geometry: Call backend function to detect geometry and blocksize Date: Tue, 18 Nov 2014 17:10:00 +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 hd_geometry_guess function autodetects the drive geometry. This patch adds a block backend call, that probes the backing device geometry. If the inner driver method is implemented and succeeds (currently only DASDs), the blkconf_geometry will pass-through the backing device geometry. Signed-off-by: Ekaterina Tumanova --- hw/block/block.c | 11 +++++++++++ hw/block/hd-geometry.c | 9 +++++++++ hw/block/virtio-blk.c | 1 + include/hw/block/block.h | 1 + 4 files changed, 22 insertions(+) diff --git a/hw/block/block.c b/hw/block/block.c index a625773..f1d29bc 100644 --- a/hw/block/block.c +++ b/hw/block/block.c @@ -25,6 +25,17 @@ void blkconf_serial(BlockConf *conf, char **serial) } } +void blkconf_blocksizes(BlockConf *conf) +{ + BlockBackend *blk = conf->blk; + struct ProbeBlockSize blocksize = blk_probe_blocksizes(blk); + + if (blocksize.rc == 0) { + conf->physical_block_size = blocksize.size.phys; + conf->logical_block_size = blocksize.size.log; + } +} + void blkconf_geometry(BlockConf *conf, int *ptrans, unsigned cyls_max, unsigned heads_max, unsigned secs_max, Error **errp) diff --git a/hw/block/hd-geometry.c b/hw/block/hd-geometry.c index 6fcf74d..4972114 100644 --- a/hw/block/hd-geometry.c +++ b/hw/block/hd-geometry.c @@ -121,6 +121,14 @@ void hd_geometry_guess(BlockBackend *blk, 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 */ @@ -143,6 +151,7 @@ void hd_geometry_guess(BlockBackend *blk, the logical geometry */ translation = BIOS_ATA_TRANSLATION_NONE; } +done: if (ptrans) { *ptrans = translation; } diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index b19b102..6f01565 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -745,6 +745,7 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp) error_propagate(errp, err); return; } + blkconf_blocksizes(&conf->conf); virtio_init(vdev, "virtio-blk", VIRTIO_ID_BLOCK, sizeof(struct virtio_blk_config)); diff --git a/include/hw/block/block.h b/include/hw/block/block.h index 0d0ce9a..856bf75 100644 --- a/include/hw/block/block.h +++ b/include/hw/block/block.h @@ -63,6 +63,7 @@ void blkconf_serial(BlockConf *conf, char **serial); void blkconf_geometry(BlockConf *conf, int *trans, unsigned cyls_max, unsigned heads_max, unsigned secs_max, Error **errp); +void blkconf_blocksizes(BlockConf *conf); /* Hard disk geometry */