From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1bINIV-0002tB-TA for mharc-grub-devel@gnu.org; Wed, 29 Jun 2016 17:45:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59700) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bINIR-0002R6-Dl for grub-devel@gnu.org; Wed, 29 Jun 2016 17:45:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bININ-0006Dv-Qt for grub-devel@gnu.org; Wed, 29 Jun 2016 17:45:22 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:39752) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bININ-0006DM-JY for grub-devel@gnu.org; Wed, 29 Jun 2016 17:45:19 -0400 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u5TLjIt5003489 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 29 Jun 2016 21:45:19 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u5TLjINZ007058 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 29 Jun 2016 21:45:18 GMT Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u5TLjHHl020774 for ; Wed, 29 Jun 2016 21:45:18 GMT Received: from ca-qasparc20.us.oracle.com (/10.147.24.73) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 29 Jun 2016 14:45:17 -0700 From: Eric Snowberg To: grub-devel@gnu.org Cc: Eric Snowberg Subject: [PATCH 09/15] ieee1275: ofdisk - don't continue to query block-size after we have it Date: Wed, 29 Jun 2016 14:43:22 -0700 Message-Id: <6ae5fcfdcdf1dc3f9fd1e7bfd35e64b3544aa985.1467232724.git.eric.snowberg@oracle.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Source-IP: aserv0021.oracle.com [141.146.126.233] Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by aserp1040.oracle.com id u5TLjIt5003489 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 141.146.126.69 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jun 2016 21:45:26 -0000 Within commit: 87ec3b7fa9061f470616ed927fc140e995831c00 - "Don't continue to query block-size if disk doesn't have it.=E2=80=9D Disks that returne= d 0 to the block-size query, still get queried every time. OpenBoot PROM (OBP) does not have hotplug support until the OS is running. Therefore, fix logic in grub_ofdisk_get_block_size so the block size is n= ot requested upon each open since it will not change. Signed-off-by: Eric Snowberg --- grub-core/disk/ieee1275/ofdisk.c | 26 +++++++++++++------------- 1 files changed, 13 insertions(+), 13 deletions(-) diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/o= fdisk.c index 956f675..6eaa044 100644 --- a/grub-core/disk/ieee1275/ofdisk.c +++ b/grub-core/disk/ieee1275/ofdisk.c @@ -35,7 +35,8 @@ struct ofdisk_hash_ent char *grub_devpath; int is_boot; int is_removable; - int block_size_fails; + int block_size_retries; + grub_uint32_t block_size; /* Pointer to shortest available name on nodes representing canonical = names, otherwise NULL. */ const char *shortest; @@ -703,10 +704,15 @@ grub_ofdisk_get_block_size (grub_uint32_t *block_si= ze, struct ofdisk_hash_ent *o grub_ieee1275_cell_t size2; } args_ieee1275; =20 + if ((op->block_size_retries >=3D 2) || (op->block_size > 0)) + { + *block_size =3D op->block_size; + return GRUB_ERR_NONE; + } + *block_size =3D 0; =20 - if (op->block_size_fails >=3D 2) - return GRUB_ERR_NONE; + op->block_size_retries++; =20 INIT_IEEE1275_COMMON (&args_ieee1275.common, "call-method", 2, 2); args_ieee1275.method =3D (grub_ieee1275_cell_t) "block-size"; @@ -714,21 +720,15 @@ grub_ofdisk_get_block_size (grub_uint32_t *block_si= ze, struct ofdisk_hash_ent *o args_ieee1275.result =3D 1; =20 if (IEEE1275_CALL_ENTRY_FN (&args_ieee1275) =3D=3D -1) - { - grub_dprintf ("disk", "can't get block size: failed call-method\n"= ); - op->block_size_fails++; - } + grub_dprintf ("disk", "can't get block size: failed call-method\n"); else if (args_ieee1275.result) - { - grub_dprintf ("disk", "can't get block size: %lld\n", - (long long) args_ieee1275.result); - op->block_size_fails++; - } + grub_dprintf ("disk", "can't get block size: %lld\n", + (long long) args_ieee1275.result); else if (args_ieee1275.size1 && !(args_ieee1275.size1 & (args_ieee1275.size1 - 1)) && args_ieee1275.size1 >=3D 512 && args_ieee1275.size1 <=3D 16384) { - op->block_size_fails =3D 0; + op->block_size =3D args_ieee1275.size1; *block_size =3D args_ieee1275.size1; } =20 --=20 1.7.1