Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 223417
b: refs/heads/master
c: 4dc2287
h: refs/heads/master
i:
  223415: 67c96ed
v: v3
  • Loading branch information
Bjorn Helgaas authored and Jesse Barnes committed Dec 17, 2010
1 parent 39e8d34 commit 3ae54d6
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 30919b0bf356a8ee0ef4f7d38ca8ad99b96820b2
refs/heads/master: 4dc2287c1805e7fe8a7cb90bbcd44abee8cdb914
38 changes: 37 additions & 1 deletion trunk/arch/x86/kernel/resource.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,47 @@
#include <linux/ioport.h>
#include <asm/e820.h>

static void resource_clip(struct resource *res, resource_size_t start,
resource_size_t end)
{
resource_size_t low = 0, high = 0;

if (res->end < start || res->start > end)
return; /* no conflict */

if (res->start < start)
low = start - res->start;

if (res->end > end)
high = res->end - end;

/* Keep the area above or below the conflict, whichever is larger */
if (low > high)
res->end = start - 1;
else
res->start = end + 1;
}

static void remove_e820_regions(struct resource *avail)
{
int i;
struct e820entry *entry;

for (i = 0; i < e820.nr_map; i++) {
entry = &e820.map[i];

resource_clip(avail, entry->addr,
entry->addr + entry->size - 1);
}
}

void arch_remove_reservations(struct resource *avail)
{
/* Trim out BIOS area (low 1MB) */
/* Trim out BIOS area (low 1MB) and E820 regions */
if (avail->flags & IORESOURCE_MEM) {
if (avail->start < BIOS_END)
avail->start = BIOS_END;

remove_e820_regions(avail);
}
}

0 comments on commit 3ae54d6

Please sign in to comment.