From patchwork Wed Dec 8 21:36:06 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Helgaas X-Patchwork-Id: 392242 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oB8Lc8lX022832 for ; Wed, 8 Dec 2010 21:38:08 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755118Ab0LHVgO (ORCPT ); Wed, 8 Dec 2010 16:36:14 -0500 Received: from g4t0017.houston.hp.com ([15.201.24.20]:40695 "EHLO g4t0017.houston.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755167Ab0LHVgL (ORCPT ); Wed, 8 Dec 2010 16:36:11 -0500 Received: from g4t0009.houston.hp.com (g4t0009.houston.hp.com [16.234.32.26]) by g4t0017.houston.hp.com (Postfix) with ESMTP id C2AE7382E0; Wed, 8 Dec 2010 21:36:10 +0000 (UTC) Received: from ldl (ldl.usa.hp.com [16.125.112.222]) by g4t0009.houston.hp.com (Postfix) with ESMTP id 3DB57C192; Wed, 8 Dec 2010 21:36:07 +0000 (UTC) Received: from localhost (ldl.fc.hp.com [127.0.0.1]) by ldl (Postfix) with ESMTP id ECB44CF002A; Wed, 8 Dec 2010 14:36:06 -0700 (MST) Received: from ldl ([127.0.0.1]) by localhost (ldl.fc.hp.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5t4fnTOiZV7r; Wed, 8 Dec 2010 14:36:06 -0700 (MST) Received: from eh.fc.hp.com (bob.lnx.usa.hp.com [16.125.112.218]) by ldl (Postfix) with ESMTP id D19ABCF0029; Wed, 8 Dec 2010 14:36:06 -0700 (MST) Received: from bob.kio (localhost [127.0.0.1]) by eh.fc.hp.com (Postfix) with ESMTP id 9046F26200; Wed, 8 Dec 2010 14:36:06 -0700 (MST) Subject: [PATCH 1/5] resources: add arch hook for preventing allocation in reserved areas To: Jesse Barnes , Len Brown From: Bjorn Helgaas Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, "H. Peter Anvin" , Thomas Gleixner , Linus Torvalds , Ingo Molnar , Adam Belay Date: Wed, 08 Dec 2010 14:36:06 -0700 Message-ID: <20101208213606.13026.47657.stgit@bob.kio> User-Agent: StGit/0.15 MIME-Version: 1.0 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Wed, 08 Dec 2010 21:38:09 +0000 (UTC) diff --git a/include/linux/ioport.h b/include/linux/ioport.h index d377ea8..b92b8b4 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -124,6 +124,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 9fad33e..246957e 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -374,6 +374,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, @@ -426,6 +430,7 @@ static int find_resource_from_top(struct resource *root, struct resource *new, struct resource *this; struct resource tmp, avail, alloc; + tmp.flags = new->flags; tmp.start = root->end; tmp.end = root->end; @@ -438,6 +443,7 @@ static int find_resource_from_top(struct resource *root, struct resource *new, tmp.start = root->start; resource_clip(&tmp, min, max); + arch_remove_reservations(&tmp); /* Check for overflow after ALIGN() */ avail = *new; @@ -478,6 +484,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 @@ -495,6 +502,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;