public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
To: Jesse Barnes <jbarnes@virtuousgeek.org>, Len Brown <lenb@kernel.org>
Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-acpi@vger.kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Ingo Molnar <mingo@elte.hu>, Adam Belay <abelay@mit.edu>
Subject: [PATCH 6/9] resources: add arch hook for preventing allocation in reserved areas
Date: Thu, 16 Dec 2010 10:38:46 -0700	[thread overview]
Message-ID: <20101216173846.8185.82045.stgit@bob.kio> (raw)
In-Reply-To: <20101216173614.8185.19462.stgit@bob.kio>


This adds arch_remove_reservations(), which an arch can implement if it
needs to protect part of the address space from allocation.

Sometimes that can be done by just putting a region in the resource tree,
but there are cases where that doesn't work well.  For example, x86 BIOS
E820 reservations are not related to devices, so they may overlap part of,
all of, or more than a device resource, so they may not end up at the
correct spot in the resource tree.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---

 include/linux/ioport.h |    1 +
 kernel/resource.c      |    6 ++++++
 2 files changed, 7 insertions(+), 0 deletions(-)


diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index b227902..e9bb22c 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -123,6 +123,7 @@ extern void reserve_region_with_split(struct resource *root,
 extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new);
 extern int insert_resource(struct resource *parent, struct resource *new);
 extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
+extern void arch_remove_reservations(struct resource *avail);
 extern int allocate_resource(struct resource *root, struct resource *new,
 			     resource_size_t size, resource_size_t min,
 			     resource_size_t max, resource_size_t align,
diff --git a/kernel/resource.c b/kernel/resource.c
index 560659f..798e2fa 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -357,6 +357,10 @@ int __weak page_is_ram(unsigned long pfn)
 	return walk_system_ram_range(pfn, 1, NULL, __is_ram) == 1;
 }
 
+void __weak arch_remove_reservations(struct resource *avail)
+{
+}
+
 static resource_size_t simple_align_resource(void *data,
 					     const struct resource *avail,
 					     resource_size_t size,
@@ -394,6 +398,7 @@ static int find_resource(struct resource *root, struct resource *new,
 	struct resource *this = root->child;
 	struct resource tmp = *new, avail, alloc;
 
+	tmp.flags = new->flags;
 	tmp.start = root->start;
 	/*
 	 * Skip past an allocated resource that starts at 0, since the assignment
@@ -410,6 +415,7 @@ static int find_resource(struct resource *root, struct resource *new,
 			tmp.end = root->end;
 
 		resource_clip(&tmp, min, max);
+		arch_remove_reservations(&tmp);
 
 		/* Check for overflow after ALIGN() */
 		avail = *new;

  parent reply	other threads:[~2010-12-16 17:38 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-16 17:38 [PATCH 0/9] PCI: revert to allocating bottom-up, avoid E820 areas Bjorn Helgaas
2010-12-16 17:38 ` [PATCH 1/9] Revert "PCI: fix pci_bus_alloc_resource() hang, prefer positive decode" Bjorn Helgaas
2010-12-16 17:38 ` [PATCH 2/9] Revert "x86: allocate space within a region top-down" Bjorn Helgaas
2010-12-16 17:38 ` [PATCH 3/9] Revert "x86/PCI: allocate space from the end of a region, not the beginning" Bjorn Helgaas
2010-12-16 17:38 ` [PATCH 4/9] Revert "PCI: allocate bus resources from the top down" Bjorn Helgaas
2010-12-16 17:38 ` [PATCH 5/9] Revert "resources: support allocating space within a region " Bjorn Helgaas
2010-12-16 17:38 ` Bjorn Helgaas [this message]
2010-12-16 22:03   ` [PATCH 6/9] resources: add arch hook for preventing allocation in reserved areas Linus Torvalds
2010-12-16 22:56     ` Bjorn Helgaas
2010-12-16 23:17       ` Linus Torvalds
2010-12-16 17:38 ` [PATCH 7/9] x86: avoid low BIOS area when allocating address space Bjorn Helgaas
2010-12-16 17:38 ` [PATCH 8/9] x86: avoid E820 regions " Bjorn Helgaas
2010-12-19  9:50   ` Yinghai Lu
2010-12-19 23:33     ` Bjorn Helgaas
2010-12-16 17:39 ` [PATCH 9/9] x86: avoid high BIOS area " Bjorn Helgaas
2010-12-16 21:59 ` [PATCH 0/9] PCI: revert to allocating bottom-up, avoid E820 areas Linus Torvalds
2010-12-16 22:03   ` Jesse Barnes
2010-12-17  3:00   ` H. Peter Anvin
2010-12-17 16:00   ` Bjorn Helgaas
2010-12-19 14:31     ` David John

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=20101216173846.8185.82045.stgit@bob.kio \
    --to=bjorn.helgaas@hp.com \
    --cc=abelay@mit.edu \
    --cc=hpa@zytor.com \
    --cc=jbarnes@virtuousgeek.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.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
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