From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
To: Grant Likely <grant.likely@linaro.org>,
Rob Herring <robherring2@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Bjorn Helgaas <bhelgaas@google.com>,
Vivek Goyal <vgoyal@redhat.com>,
Jakub Sitnicki <jsitnicki@gmail.com>,
Mike Travis <travis@sgi.com>,
Jiang Liu <jiang.liu@linux.intel.com>,
Thierry Reding <treding@nvidia.com>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
gregkh@linuxfoundation.org, Tejun Heo <tj@kernel.org>,
Cliff Wickman <cpw@sgi.com>
Cc: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Subject: [PATCH 1/2] kernel/resource: Add new flag IORESOURCE_SHARED
Date: Fri, 5 Jun 2015 12:51:17 +0200 [thread overview]
Message-ID: <1433501478-15164-1-git-send-email-ricardo.ribalda@gmail.com> (raw)
Some device tree platforms have not defined correctly their memory
resources (i.e. Overlapping or duplication of resources).
To avoid this issue we have historically avoided to add their resources to
the resource tree. This leads to code duplication and oops when trying to
unload dynamically a device tree (feature introduced recently).
This new flag tells the resource system that a resource can be shared by
multiple owners, so we can support device trees with problems at the
same time that we do not duplicate code or crash when unloading the
device tree.
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
include/linux/ioport.h | 1 +
kernel/resource.c | 6 ++++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index 388e3ae94f7a..f4d992381529 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -49,6 +49,7 @@ struct resource {
#define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */
#define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */
+#define IORESOURCE_SHARED 0x04000000 /* Resource can be shared */
#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
#define IORESOURCE_DISABLED 0x10000000
#define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */
diff --git a/kernel/resource.c b/kernel/resource.c
index 90552aab5f2d..4a3626489b62 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -210,6 +210,7 @@ static struct resource * __request_resource(struct resource *root, struct resour
resource_size_t start = new->start;
resource_size_t end = new->end;
struct resource *tmp, **p;
+ bool root_shared = root && root->flags & IORESOURCE_SHARED;
if (end < start)
return root;
@@ -220,14 +221,15 @@ static struct resource * __request_resource(struct resource *root, struct resour
p = &root->child;
for (;;) {
tmp = *p;
- if (!tmp || tmp->start > end) {
+ if (!tmp || tmp->start > end ||
+ (root_shared && tmp->start > start)) {
new->sibling = tmp;
*p = new;
new->parent = root;
return NULL;
}
p = &tmp->sibling;
- if (tmp->end < start)
+ if (tmp->end < start || root_shared)
continue;
return tmp;
}
--
2.1.4
next reply other threads:[~2015-06-05 10:51 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-05 10:51 Ricardo Ribalda Delgado [this message]
2015-06-05 10:51 ` [PATCH 2/2] of/platform: Mark all device tree resources as SHARED Ricardo Ribalda Delgado
[not found] ` <1433501478-15164-2-git-send-email-ricardo.ribalda-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-06-05 16:45 ` Rob Herring
[not found] ` <CAL_JsqLOqpP4E5mG5t5RvaTs96jLC=umY2cUQEhyZiWJNOt1nQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-06-05 16:51 ` Ricardo Ribalda Delgado
[not found] ` <CAPybu_0s=9yTFH5jngh6=Zuz0iia0F1RU6AsLi-vcWNrF3-qYg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-06-07 14:01 ` Grant Likely
[not found] ` <1433501478-15164-1-git-send-email-ricardo.ribalda-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-06-08 18:23 ` [PATCH 1/2] kernel/resource: Add new flag IORESOURCE_SHARED Grant Likely
[not found] ` <20150608182310.1F13FC406AA-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2015-06-08 20:02 ` Ricardo Ribalda Delgado
[not found] ` <CAPybu_2-EZoMEkWR9BoRfzGBevxCp-sd+CiVK2DhRjLoy5Pfyg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-06-09 11:13 ` Grant Likely
2015-06-09 12:30 ` Ricardo Ribalda Delgado
[not found] ` <20150609111320.F299FC40580-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2015-06-09 12:33 ` Ricardo Ribalda Delgado
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=1433501478-15164-1-git-send-email-ricardo.ribalda@gmail.com \
--to=ricardo.ribalda@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bhelgaas@google.com \
--cc=cpw@sgi.com \
--cc=devicetree@vger.kernel.org \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=jiang.liu@linux.intel.com \
--cc=jsitnicki@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=robh+dt@kernel.org \
--cc=robherring2@gmail.com \
--cc=tj@kernel.org \
--cc=travis@sgi.com \
--cc=treding@nvidia.com \
--cc=vgoyal@redhat.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).