From patchwork Fri Aug 11 18:44:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin Ian King X-Patchwork-Id: 800726 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=fwts-devel-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3xTYnS0T8sz9t0j; Sat, 12 Aug 2017 04:44:12 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1dgEuo-0006er-6r; Fri, 11 Aug 2017 18:44:10 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dgEuj-0006eX-F0 for fwts-devel@lists.ubuntu.com; Fri, 11 Aug 2017 18:44:05 +0000 Received: from 1.general.cking.uk.vpn ([10.172.193.212] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dgEui-0004Lk-W8; Fri, 11 Aug 2017 18:44:05 +0000 From: Colin King To: fwts-devel@lists.ubuntu.com Subject: [PATCH] lib: fwts_acpi_tables: re-work fwts_acpi_get_rsdp, less memory copies Date: Fri, 11 Aug 2017 19:44:04 +0100 Message-Id: <20170811184404.17806-1-colin.king@canonical.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 X-BeenThere: fwts-devel@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Firmware Test Suite Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: fwts-devel-bounces@lists.ubuntu.com Sender: fwts-devel-bounces@lists.ubuntu.com From: Colin Ian King Re-work fwts_acpi_get_rsdp so there are less memory copioes of the RSDP Signed-off-by: Colin Ian King Acked-by: Alex Hung Acked-by: Ivan Hu --- src/lib/src/fwts_acpi_tables.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c index f7547c43..9b2312e5 100644 --- a/src/lib/src/fwts_acpi_tables.c +++ b/src/lib/src/fwts_acpi_tables.c @@ -146,39 +146,37 @@ static void *fwts_acpi_find_rsdp_bios(void) static fwts_acpi_table_rsdp *fwts_acpi_get_rsdp(fwts_framework *fw, void *addr, size_t *rsdp_len) { uint8_t *mem; - fwts_acpi_table_rsdp *rsdp = NULL; + fwts_acpi_table_rsdp *rsdp; *rsdp_len = 0; + /* Assume version 2.0 size, we don't care about a few bytes over allocation if it's version 1.0 */ + if ((rsdp = (fwts_acpi_table_rsdp*)fwts_low_calloc(1, sizeof(fwts_acpi_table_rsdp))) == NULL) { + fwts_log_error(fw, "Cannot allocate cached RSDP, out of low memory."); + return NULL; + } + if ((mem = fwts_mmap((off_t)addr, sizeof(fwts_acpi_table_rsdp))) == FWTS_MAP_FAILED) return NULL; - if (fwts_safe_memread(mem, sizeof(fwts_acpi_table_rsdp)) != FWTS_OK) { - fwts_log_error(fw, "Cannot safely read RSDP from address %p.", mem); - goto out; + if (fwts_safe_memcpy(rsdp, mem, sizeof(fwts_acpi_table_rsdp)) != FWTS_OK) { + fwts_log_error(fw, "Cannot safely copy RSDP from address %p.", mem); + goto err; } - rsdp = (fwts_acpi_table_rsdp*)mem; /* Determine original RSDP size from revision. */ *rsdp_len = (rsdp->revision < 1) ? 20 : 36; /* Must have the correct signature */ if (strncmp(rsdp->signature, "RSD PTR ", 8)) { fwts_log_error(fw, "RSDP did not have expected signature."); - rsdp = NULL; - goto out; - } - - /* Assume version 2.0 size, we don't care about a few bytes over allocation if it's version 1.0 */ - if ((rsdp = (fwts_acpi_table_rsdp*)fwts_low_calloc(1, sizeof(fwts_acpi_table_rsdp))) == NULL) { - rsdp = NULL; - goto out; + goto err; } + return rsdp; - memcpy(rsdp, mem, *rsdp_len); -out: +err: (void)fwts_munmap(mem, sizeof(fwts_acpi_table_rsdp)); - - return rsdp; + fwts_low_free(rsdp); + return NULL; } /*