From patchwork Tue Feb 20 05:35:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremy Kerr X-Patchwork-Id: 875407 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zlq9b04M9z9ryf for ; Tue, 20 Feb 2018 16:36:35 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="FiK9Otv2"; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3zlq9Z5plnzF0bd for ; Tue, 20 Feb 2018 16:36:34 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="FiK9Otv2"; dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Received: from ozlabs.org (bilbo.ozlabs.org [103.22.144.67]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3zlq9R2N5jzDqsf for ; Tue, 20 Feb 2018 16:36:27 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="FiK9Otv2"; dkim-atps=neutral Received: by ozlabs.org (Postfix, from userid 1023) id 3zlq9R12yQz9ryl; Tue, 20 Feb 2018 16:36:27 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ozlabs.org; s=201707; t=1519104987; bh=jzM/lAGhbn1kCuCuHSdLlRmosP70/sxn92+UyZI+/lM=; h=From:To:Cc:Subject:Date:From; b=FiK9Otv24mEHx+hvSbwox/gLn3/HgnXv888MejCKEx00ZZ9Z0LlKvBDUwCrOWNNer Iy9jGu6/k05brR9SVI6cMvwZJ7xJ6jNMlLSy39y1hfggKlGJ6FEnkPc6NYRGvrZVuE qbIkipImjl/FJXS6VaT7L5E8XKqbbYvP8vtxUEIDnQwnD3VYtTMZ23EZoZYH8GZnL3 kLoVpbqvcEWmKWhrKUPwtGCZ+u5v2v11gFs5KyNEHNPRFO811Qa7+maeunEzej6tT3 KYMamMeBHFCND5mUnueJZjDzsRG0y1oOSTp+bLReP1895NTrQhUssCgEH2/IejUI9o HQWaJHuBz6IQw== From: Jeremy Kerr To: skiboot@lists.ozlabs.org Date: Tue, 20 Feb 2018 13:35:58 +0800 Message-Id: <20180220053558.24450-1-jk@ozlabs.org> X-Mailer: git-send-email 2.14.1 Subject: [Skiboot] [PATCH] core: Fix mismatched names between reserved memory nodes & properties X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Deb McLemore MIME-Version: 1.0 Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" OPAL exposes reserved memory regions through the device tree in both new (nodes) and old (properties) formats. However, the names used for these don't match - we use a generated cell address for the nodes, but the plain region name for the properties. This change, heavily based on code from Oliver O'Halloran , reworks the dt-generation code to firstly generate the new-format nodes, then uses those same names to generate the property data. Reported-by: Deb McLemore CC: Oliver O'Halloran Signed-off-by: Jeremy Kerr --- core/mem_region.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/core/mem_region.c b/core/mem_region.c index 3c93cd47..4479a23a 100644 --- a/core/mem_region.c +++ b/core/mem_region.c @@ -1232,32 +1232,39 @@ void mem_region_add_dt_reserved(void) dt_add_property(node, "ranges", NULL, 0); } - /* First pass: calculate length of property data */ + prlog(PR_INFO, "Reserved regions:\n"); + + /* First pass, create /reserved-memory/ nodes for each reservation, + * and calculate the length for the /reserved-names and + * /reserved-ranges properties */ list_for_each(®ions, region, list) { if (!region_is_reservable(region)) continue; - names_len += strlen(region->name) + 1; + + prlog(PR_INFO, " 0x%012llx..%012llx : %s\n", + (long long)region->start, + (long long)(region->start + region->len - 1), + region->name); + + mem_region_add_dt_reserved_node(node, region); + + /* calculate the size of the properties populated later */ + names_len += strlen(region->node->name) + 1; ranges_len += 2 * sizeof(uint64_t); } name = names = malloc(names_len); range = ranges = malloc(ranges_len); - prlog(PR_INFO, "Reserved regions:\n"); - /* Second pass: populate property data */ + /* Second pass: populate the old-style reserved-names and + * reserved-regions arrays based on the node data */ list_for_each(®ions, region, list) { if (!region_is_reservable(region)) continue; - len = strlen(region->name) + 1; - memcpy(name, region->name, len); - name += len; - - prlog(PR_INFO, " 0x%012llx..%012llx : %s\n", - (long long)region->start, - (long long)(region->start + region->len - 1), - region->name); - mem_region_add_dt_reserved_node(node, region); + len = strlen(region->node->name) + 1; + memcpy(name, region->node->name, len); + name += len; range[0] = cpu_to_fdt64(region->start); range[1] = cpu_to_fdt64(region->len); @@ -1265,7 +1272,6 @@ void mem_region_add_dt_reserved(void) } unlock(&mem_region_lock); - prop = dt_find_property(dt_root, "reserved-names"); if (prop) dt_del_property(dt_root, (struct dt_property *)prop);