From patchwork Tue Oct 10 06:36:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AKASHI Takahiro X-Patchwork-Id: 115350 Delivered-To: patch@linaro.org Received: by 10.140.22.163 with SMTP id 32csp3401302qgn; Mon, 9 Oct 2017 23:35:10 -0700 (PDT) X-Received: by 10.99.146.76 with SMTP id s12mr9309861pgn.354.1507617310463; Mon, 09 Oct 2017 23:35:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507617310; cv=none; d=google.com; s=arc-20160816; b=ywx5FRMYGb/LQGRcEew0YmWf44h89wTRZ/kTHZ9EYn1Rf4eOoV38AOQnvjaLfkQDQL hQgh4ZYOghoZlMamVl26yBhvQ6MMtZ8GrTYv5B0TQS7xhaj6ALZmgDKkR/FZVay41QVa 2t+Px21PEl6YFUSltXM5lxoJHA51Q0SO8kgEGALchb1or4PEh9P6J65cXXh1kim5l6u+ Qlk0eEtz5i5EGty78xARK05jaROn/I7fNvSV+x7boDSPbkTKiuz2ky9fHboNiSXhKv8m XIlKTCJbNrRbg8k9PwykTs3mWQ0OdCKZc8AMs5CH4Qy2Y/Im6YNopJdgJE8wZPLEVOz4 Vo0A== 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=qXdYk7Urfs9sg9VuSaIsAvtksSYSR/RmSQ5t2VIYZpY=; b=FtFvBPtq7rEuUjcT88W57sBetJBCER7EQytwydETT8Y2MvC8ksjlqoyDwzyqrnRSw1 /VMD+A/kx6BRfnuYcpQ5HW05qPuz+C+cF/qG0P2GhLrZYvBDJ10vrrV7gHWTItZf6FVx c2NGRTZJIYZ/5mOPEfYGje73ekmGkVdoR+BBki8FQ/1FIhN/j2JJNhqDibVVkSt/lOdO MDArVbe6sLvLDeVyKdVoHBbkLA2F7KBq9BSQbJ6F15WQOH4RX5y+tKz6kOz8iCXhcOau wP8hV8OSdwrQwVJN8k7dNMpUq4ynV49DZ0sITJRoSPW2XA8TwRI3uS7x8W7QwyQTDc/g PrKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=JR29Ddbw; 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=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p5si8117352plk.185.2017.10.09.23.35.10; Mon, 09 Oct 2017 23:35:10 -0700 (PDT) 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=@linaro.org header.s=google header.b=JR29Ddbw; 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=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755064AbdJJGfJ (ORCPT + 26 others); Tue, 10 Oct 2017 02:35:09 -0400 Received: from mail-pf0-f181.google.com ([209.85.192.181]:52404 "EHLO mail-pf0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752528AbdJJGfG (ORCPT ); Tue, 10 Oct 2017 02:35:06 -0400 Received: by mail-pf0-f181.google.com with SMTP id a1so13003649pfj.9 for ; Mon, 09 Oct 2017 23:35:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qXdYk7Urfs9sg9VuSaIsAvtksSYSR/RmSQ5t2VIYZpY=; b=JR29Ddbw08ns1+XWOolVrUCZBNzMnZZ0e5xtyUI3vMmFVu/g2s8J/VeE6r0xxRMTXq WPevm7w7Gq5wceCAf4KYxocpjh0i/RhFyD1kLIyTqEOQSBlBgOVOKx+0RxgI5tY05Qj1 hRtQV7esI3HJmll0gmq4WUsuBd3skCR5P4NNA= 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=qXdYk7Urfs9sg9VuSaIsAvtksSYSR/RmSQ5t2VIYZpY=; b=tV0JTMN7AutNZaGzgcFAkJPBKss23Jks/JYF8ERMVdt3nKHO76X1mFexbsG44DP+6l GedMC8MtuFDn/fB2rVxYncgjvd/wibOGhlxsX9aZMEhwvVjwQ/h9Zsictr84QLSRF6dR vZ6Btr2FwTuiD8P3OlXXQPgTcoK+JihGBNFayHHt21oll7ZEzyeJ2ZtnoUJzDVDY+J6s Dyr5atO7MyigsGYTcjjOZ+9YSx/2MMb6j8i7HLCg53zVCQVKhKGf/W4JOobjernafZrQ VjkVH38B+jsbhOWGE9GSi5McGrclPiU9HHBffL3pDCpr8hbso6uiz5F+poD5DrzypFRL UvJw== X-Gm-Message-State: AMCzsaVItUIuPnVKaBztd6kgCHVythjajFTw8l6AYRBOiMYfw+dTuIPW oerWNTApPvGVSIWmb2snVJboaA== X-Google-Smtp-Source: AOwi7QBS6IxobYwRQMWBinYpf0n3MCxqO++hwUIXagf6+cAsYQ7+vPNqGgBdPsofD8EE9w3UlIc/mA== X-Received: by 10.159.246.23 with SMTP id b23mr5225947pls.60.1507617305598; Mon, 09 Oct 2017 23:35:05 -0700 (PDT) Received: from linaro.org ([121.95.100.191]) by smtp.googlemail.com with ESMTPSA id i3sm1162090pgs.82.2017.10.09.23.35.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Oct 2017 23:35:05 -0700 (PDT) From: AKASHI Takahiro To: catalin.marinas@arm.com, will.deacon@arm.com, bauerman@linux.vnet.ibm.com, dhowells@redhat.com, vgoyal@redhat.com, herbert@gondor.apana.org.au, davem@davemloft.net, akpm@linux-foundation.org, mpe@ellerman.id.au, dyoung@redhat.com, bhe@redhat.com, arnd@arndb.de, ard.biesheuvel@linaro.org, julien.thierry@arm.com Cc: kexec@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, AKASHI Takahiro , Linus Torvalds Subject: [PATCH v5 02/10] resource: add walk_system_ram_res_rev() Date: Tue, 10 Oct 2017 15:36:11 +0900 Message-Id: <20171010063619.6303-3-takahiro.akashi@linaro.org> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171010063619.6303-1-takahiro.akashi@linaro.org> References: <20171010063619.6303-1-takahiro.akashi@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This function, being a variant of walk_system_ram_res() introduced in commit 8c86e70acead ("resource: provide new functions to walk through resources"), walks through a list of all the resources of System RAM in reversed order, i.e., from higher to lower. It will be used in kexec_file implementation on arm64. Signed-off-by: AKASHI Takahiro Cc: Vivek Goyal Cc: Andrew Morton Cc: Linus Torvalds --- include/linux/ioport.h | 3 +++ kernel/resource.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) -- 2.14.1 diff --git a/include/linux/ioport.h b/include/linux/ioport.h index f5cf32e80041..62eb62b98118 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -273,6 +273,9 @@ extern int walk_system_ram_res(u64 start, u64 end, void *arg, int (*func)(u64, u64, void *)); extern int +walk_system_ram_res_rev(u64 start, u64 end, void *arg, + int (*func)(u64, u64, void *)); +extern int walk_iomem_res_desc(unsigned long desc, unsigned long flags, u64 start, u64 end, void *arg, int (*func)(u64, u64, void *)); diff --git a/kernel/resource.c b/kernel/resource.c index 9b5f04404152..69c31454cb2e 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include @@ -469,6 +471,61 @@ int walk_system_ram_res(u64 start, u64 end, void *arg, return ret; } +int walk_system_ram_res_rev(u64 start, u64 end, void *arg, + int (*func)(u64, u64, void *)) +{ + struct resource res, *rams; + int rams_size = 16, i; + int ret = -1; + + /* create a list */ + rams = vmalloc(sizeof(struct resource) * rams_size); + if (!rams) + return ret; + + res.start = start; + res.end = end; + res.flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; + i = 0; + while ((res.start < res.end) && + (!find_next_iomem_res(&res, IORES_DESC_NONE, true))) { + if (i >= rams_size) { + /* re-alloc */ + struct resource *rams_new; + int rams_new_size; + + rams_new_size = rams_size + 16; + rams_new = vmalloc(sizeof(struct resource) + * rams_new_size); + if (!rams_new) + goto out; + + memcpy(rams_new, rams, + sizeof(struct resource) * rams_size); + vfree(rams); + rams = rams_new; + rams_size = rams_new_size; + } + + rams[i].start = res.start; + rams[i++].end = res.end; + + res.start = res.end + 1; + res.end = end; + } + + /* go reverse */ + for (i--; i >= 0; i--) { + ret = (*func)(rams[i].start, rams[i].end, arg); + if (ret) + break; + } + +out: + vfree(rams); + return ret; +} + #if !defined(CONFIG_ARCH_HAS_WALK_MEMORY) /*