From: Baoquan He <bhe@redhat.com> To: linux-kernel@vger.kernel.org, akpm@linux-foundation.org, robh+dt@kernel.org, dan.j.williams@intel.com, nicolas.pitre@linaro.org, josh@joshtriplett.org, fengguang.wu@intel.com, bp@suse.de, andy.shevchenko@gmail.com Cc: patrik.r.jakobsson@gmail.com, airlied@linux.ie, kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, dmitry.torokhov@gmail.com, frowand.list@gmail.com, keith.busch@intel.com, jonathan.derrick@intel.com, lorenzo.pieralisi@arm.com, bhelgaas@google.com, tglx@linutronix.de, brijesh.singh@amd.com, jglisse@redhat.com, thomas.lendacky@amd.com, gregkh@linuxfoundation.org, baiyaowei@cmss.chinamobile.com, richard.weiyang@gmail.com, devel@linuxdriverproject.org, linux-input@vger.kernel.org, linux-nvdimm@lists.01.org, devicetree@vger.kernel.org, linux-pci@vger.kernel.org, ebiederm@xmission.com, vgoyal@redhat.com, dyoung@redhat.com, yinghai@kernel.org, monstr@monstr.eu, davem@davemloft.net, chris@zankel.net, jcmvbkbc@gmail.com, gustavo@padovan.org, maarten.lankhorst@linux.intel.com, seanpaul@chromium.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Baoquan He <bhe@redhat.com> Subject: [PATCH v7 3/4] resource: add walk_system_ram_res_rev() Date: Wed, 18 Jul 2018 10:49:43 +0800 Message-ID: <20180718024944.577-4-bhe@redhat.com> (raw) In-Reply-To: <20180718024944.577-1-bhe@redhat.com> 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 code. Signed-off-by: Baoquan He <bhe@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: "Jérôme Glisse" <jglisse@redhat.com> Cc: Borislav Petkov <bp@suse.de> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Wei Yang <richard.weiyang@gmail.com> --- include/linux/ioport.h | 3 +++ kernel/resource.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/linux/ioport.h b/include/linux/ioport.h index b7456ae889dd..066cc263e2cc 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -279,6 +279,9 @@ extern int walk_system_ram_res(u64 start, u64 end, void *arg, int (*func)(struct resource *, void *)); extern int +walk_system_ram_res_rev(u64 start, u64 end, void *arg, + int (*func)(struct resource *, void *)); +extern int walk_iomem_res_desc(unsigned long desc, unsigned long flags, u64 start, u64 end, void *arg, int (*func)(struct resource *, void *)); diff --git a/kernel/resource.c b/kernel/resource.c index c96e58d3d2f8..3e18f24b90c4 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -23,6 +23,8 @@ #include <linux/pfn.h> #include <linux/mm.h> #include <linux/resource_ext.h> +#include <linux/string.h> +#include <linux/vmalloc.h> #include <asm/io.h> @@ -443,6 +445,44 @@ int walk_system_ram_res(u64 start, u64 end, void *arg, } /* + * This function, being a variant of walk_system_ram_res(), calls the @func + * callback against all memory ranges of type System RAM which are marked as + * IORESOURCE_SYSTEM_RAM and IORESOUCE_BUSY in reversed order, i.e., from + * higher to lower. + */ +int walk_system_ram_res_rev(u64 start, u64 end, void *arg, + int (*func)(struct resource *, void *)) +{ + unsigned long flags; + struct resource *res; + int ret = -1; + + flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; + + read_lock(&resource_lock); + list_for_each_entry_reverse(res, &iomem_resource.child, sibling) { + if (start >= end) + break; + if ((res->flags & flags) != flags) + continue; + if (res->desc != IORES_DESC_NONE) + continue; + if (res->end < start) + break; + + if ((res->end >= start) && (res->start < end)) { + ret = (*func)(res, arg); + if (ret) + break; + } + end = res->start - 1; + + } + read_unlock(&resource_lock); + return ret; +} + +/* * This function calls the @func callback against all memory ranges, which * are ranges marked as IORESOURCE_MEM and IORESOUCE_BUSY. */ -- 2.13.6 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-07-18 2:53 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-07-18 2:49 [PATCH v7 0/4] resource: Use list_head to link sibling resource Baoquan He 2018-07-18 2:49 ` [PATCH v7 1/4] resource: Move reparent_resources() to kernel/resource.c and make it public Baoquan He 2018-07-18 2:49 ` [PATCH v7 2/4] resource: Use list_head to link sibling resource Baoquan He 2018-07-18 2:49 ` Baoquan He [this message] 2018-07-18 2:49 ` [PATCH v7 4/4] kexec_file: Load kernel at top of system RAM if required Baoquan He 2018-07-18 22:33 ` Andrew Morton 2018-07-19 15:17 ` Baoquan He 2018-07-19 19:44 ` Andrew Morton 2018-07-25 2:21 ` Baoquan He 2018-07-23 14:34 ` Michal Hocko 2018-07-25 6:48 ` Baoquan He 2018-07-26 12:59 ` Michal Hocko 2018-07-26 13:09 ` Baoquan He 2018-07-26 13:12 ` Michal Hocko 2018-07-26 13:14 ` Michal Hocko 2018-07-26 13:37 ` Baoquan He 2018-07-26 14:01 ` Michal Hocko 2018-07-26 15:10 ` Baoquan He
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180718024944.577-4-bhe@redhat.com \ --to=bhe@redhat.com \ --cc=airlied@linux.ie \ --cc=akpm@linux-foundation.org \ --cc=andy.shevchenko@gmail.com \ --cc=baiyaowei@cmss.chinamobile.com \ --cc=bhelgaas@google.com \ --cc=bp@suse.de \ --cc=brijesh.singh@amd.com \ --cc=chris@zankel.net \ --cc=dan.j.williams@intel.com \ --cc=davem@davemloft.net \ --cc=devel@linuxdriverproject.org \ --cc=devicetree@vger.kernel.org \ --cc=dmitry.torokhov@gmail.com \ --cc=dyoung@redhat.com \ --cc=ebiederm@xmission.com \ --cc=fengguang.wu@intel.com \ --cc=frowand.list@gmail.com \ --cc=gregkh@linuxfoundation.org \ --cc=gustavo@padovan.org \ --cc=haiyangz@microsoft.com \ --cc=jcmvbkbc@gmail.com \ --cc=jglisse@redhat.com \ --cc=jonathan.derrick@intel.com \ --cc=josh@joshtriplett.org \ --cc=keith.busch@intel.com \ --cc=kys@microsoft.com \ --cc=linux-input@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ --cc=linux-parisc@vger.kernel.org \ --cc=linux-pci@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=lorenzo.pieralisi@arm.com \ --cc=maarten.lankhorst@linux.intel.com \ --cc=monstr@monstr.eu \ --cc=nicolas.pitre@linaro.org \ --cc=patrik.r.jakobsson@gmail.com \ --cc=richard.weiyang@gmail.com \ --cc=robh+dt@kernel.org \ --cc=seanpaul@chromium.org \ --cc=sthemmin@microsoft.com \ --cc=tglx@linutronix.de \ --cc=thomas.lendacky@amd.com \ --cc=vgoyal@redhat.com \ --cc=yinghai@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
($INBOX_DIR/description missing) This inbox may be cloned and mirrored by anyone: # this inbox consists of 2 epochs: git clone --mirror http://archive.lwn.net:8080/devicetree/0 devicetree/git/0.git # oldest git clone --mirror http://archive.lwn.net:8080/devicetree/1 devicetree/git/1.git # newest # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devicetree devicetree/ http://archive.lwn.net:8080/devicetree \ devicetree@vger.kernel.org lwn-devicetree@archive.lwn.net public-inbox-index devicetree Example config snippet for mirrors. Newsgroup available over NNTP: nntp://archive.lwn.net/lwn.kernel.devicetree AGPL code for this site: git clone https://public-inbox.org/public-inbox.git