Received: by 10.223.185.116 with SMTP id b49csp6537056wrg; Wed, 28 Feb 2018 11:06:15 -0800 (PST) X-Google-Smtp-Source: AH8x227NK9JTB0lZN3d1PSh8aMnKW2x/7YHEatVZ0WUtPjuV0TYQbKDtpu6woRX8B0oM1Dc6zMYV X-Received: by 2002:a17:902:d83:: with SMTP id 3-v6mr19472011plv.47.1519844775004; Wed, 28 Feb 2018 11:06:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519844774; cv=none; d=google.com; s=arc-20160816; b=LC58At1l3slhCWtZf0FTc26i/NIzjd2kff9meXxicnT/pE4EpgKGb1arnwGlHjN7P7 QpEBApC4k+t5aChwXrzWGRzninYraK3wBDLkPWLFmIBABCkSKYZ5difl++CDJQ+fHluA 08NAclBfitME0DbOClt9kZHmeFUE7Pk0DVeyxWVSQT9p/CxKfym+HjhIH7cpic9zvGKs ZLfDBIdp5EXDId3eX9+f9IdA1MZ5KXTW2wTxgW37caYQXvPpfWTdvWjnDGBMOULMyzHu aD6wj05Xq0URxzmXZVhB9qfavEX+JrEkjN/yRFOXwfxhDEIUYuBqvKSbdEGwVVE3A8P7 deQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=0F2yPBRPotrP4zm5f60meoOpyhpFPVt/NWiIBLONRn4=; b=rj/2Ndqhq1WGpxV+zKfPuueSnUgG5F0WYgUL+jkWG5ILGhTu7VZPsmUCN+ieaIEYqq jvyTru3MR2bY1GWV4sHd5Ns0alH11xExtYR0z3046KQk5+D6pBI5zUGaVpAQEGy8RDfa 5bvEwIBxn+QPhl2gM49BxBGLvXgXRKQwVuDmkGbAelkL8077E3wRrPFo0+/99ztqZeEm cs6GcLr9UQjDqOO6XFpgiG6Md7bsjKA6mhXrhM0/6eB32xRj3LajulHazmfT6re+WIbD LScOYc0mhbQHMwGRe78Z2DI0s+8ZRHaX0cDPIEX96K9EpM6zjnlHNPgBhwi/KzrGV9OS BrLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Mir6m3oa; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e24si1631777pff.233.2018.02.28.11.05.59; Wed, 28 Feb 2018 11:06:14 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Mir6m3oa; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933150AbeB1TFK (ORCPT + 99 others); Wed, 28 Feb 2018 14:05:10 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:36225 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933023AbeB1TFG (ORCPT ); Wed, 28 Feb 2018 14:05:06 -0500 Received: by mail-pf0-f196.google.com with SMTP id 68so1385790pfx.3; Wed, 28 Feb 2018 11:05:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0F2yPBRPotrP4zm5f60meoOpyhpFPVt/NWiIBLONRn4=; b=Mir6m3oatAiq4Xwqc36W21fsr8JxvCc1hABegG8ljsQCFd6fEf/ZS0xY/T96uyKgjd OEAdhS4NT8aDd5rKlBXvTmZPRJIFI3FD8rzXV4uEY0OUXIabL7A7vb4zA5mgmS/Xdgai xCnTZSz2qcKQjmR+w+s5tGH7Na0ko3lRLpqMV4VzEuplB9w5fO1l9WMRqZEbDxRRwXyA juR5lnQz6bUIfVV2fG+oag924bb5kgur5GboODwdu88BvfThtgiTpvYXonabZm0NDRDg 1A3Dzet0bijAy6j2tS3nfWfJ3+aMFzcEe8Omse8frZrL2iXIPubo0veRFsBvachzyVnp ulnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0F2yPBRPotrP4zm5f60meoOpyhpFPVt/NWiIBLONRn4=; b=k4/FcjXk/ssdX4C1V5qBTrZ0Kw7nlvV2lA4Eql1C/9gYsW7M0tXrJf6+miKm3EWzz2 1tLz2rtj1TTZ2VhxgeDbOaJAoYzPV4GoIWgcUPHYDSisUnmDto9oSKx01LJA4aogdvnx A6pO8smXwMo+FCEAqsbaWPRABGg4ayCGqvlQsoZ9GILo6FkGEar/ui9YwG/EzdJZD/DL jlQfsqUtDHfhgKTmDD74pyXM27VrSWMmSLw55klyAFKYBSErc+nfYOmNoCbnpwpVbc+4 zQMn6roB6oq5IeUB11GYoYtuenj+xp2lAdy03ZGM4JEMl2cuK4FYB6QZaylIhENhN/HM BXJA== X-Gm-Message-State: APf1xPBbi9Bm0TcKdjyWWArylCCVOBcECV3ySEj078MbYL3SBJkf8jSw Z+71ovZ/KJx8Pb5Ty3Z9GKrEVw== X-Received: by 10.99.125.8 with SMTP id y8mr14995658pgc.241.1519844706157; Wed, 28 Feb 2018 11:05:06 -0800 (PST) Received: from localhost.localdomain (c-73-93-215-6.hsd1.ca.comcast.net. [73.93.215.6]) by smtp.gmail.com with ESMTPSA id m22sm5027462pfg.188.2018.02.28.11.05.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 28 Feb 2018 11:05:05 -0800 (PST) From: frowand.list@gmail.com To: Rob Herring , cpandya@codeaurora.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/2] of: add early boot allocation of of_find_node_by_phandle() cache Date: Wed, 28 Feb 2018 11:04:16 -0800 Message-Id: <1519844656-16443-3-git-send-email-frowand.list@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1519844656-16443-1-git-send-email-frowand.list@gmail.com> References: <1519844656-16443-1-git-send-email-frowand.list@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Frank Rowand The initial implementation of the of_find_node_by_phandle() cache allocates the cache using kcalloc(). Add an early boot allocation of the cache so it will be usable during early boot. Switch over to the kcalloc() based cache once normal memory allocation becomes available. Signed-off-by: Frank Rowand --- The previous version of this patch was a standalone patch: [PATCH] of: add early boot allocation of of_find_node_by_phandle() cache that was dependent on patch 1/2 of this series. Changes from previous versions: - no changes drivers/of/base.c | 33 +++++++++++++++++++++++++++++++++ drivers/of/fdt.c | 2 ++ drivers/of/of_private.h | 2 ++ 3 files changed, 37 insertions(+) diff --git a/drivers/of/base.c b/drivers/of/base.c index e71d157d7149..eeaa270a5135 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -16,9 +16,11 @@ #define pr_fmt(fmt) "OF: " fmt +#include #include #include #include +#include #include #include #include @@ -134,6 +136,29 @@ static void of_populate_phandle_cache(void) raw_spin_unlock_irqrestore(&devtree_lock, flags); } +void __init of_populate_phandle_cache_early(void) +{ + u32 cache_entries; + struct device_node *np; + u32 phandles = 0; + size_t size; + + for_each_of_allnodes(np) + if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL) + phandles++; + + cache_entries = roundup_pow_of_two(phandles); + phandle_cache_mask = cache_entries - 1; + + size = cache_entries * sizeof(*phandle_cache); + phandle_cache = memblock_virt_alloc(size, 4); + memset(phandle_cache, 0, size); + + for_each_of_allnodes(np) + if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL) + phandle_cache[np->phandle & phandle_cache_mask] = np; +} + #ifndef CONFIG_MODULES static int __init of_free_phandle_cache(void) { @@ -153,7 +178,15 @@ static int __init of_free_phandle_cache(void) void __init of_core_init(void) { + unsigned long flags; struct device_node *np; + phys_addr_t size; + + raw_spin_lock_irqsave(&devtree_lock, flags); + size = (phandle_cache_mask + 1) * sizeof(*phandle_cache); + memblock_free(__pa(phandle_cache), size); + phandle_cache = NULL; + raw_spin_unlock_irqrestore(&devtree_lock, flags); of_populate_phandle_cache(); diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 84aa9d676375..cb320df23f26 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -1264,6 +1264,8 @@ void __init unflatten_device_tree(void) of_alias_scan(early_init_dt_alloc_memory_arch); unittest_unflatten_overlay_base(); + + of_populate_phandle_cache_early(); } /** diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h index fa70650136b4..6720448c84cc 100644 --- a/drivers/of/of_private.h +++ b/drivers/of/of_private.h @@ -134,6 +134,8 @@ extern void __of_sysfs_remove_bin_file(struct device_node *np, /* illegal phandle value (set when unresolved) */ #define OF_PHANDLE_ILLEGAL 0xdeadbeef +extern void __init of_populate_phandle_cache_early(void); + /* iterators for transactions, used for overlays */ /* forward iterator */ #define for_each_transaction_entry(_oft, _te) \ -- Frank Rowand