diff options
| author | H. Peter Anvin <hpa@zytor.com> | 2010-02-10 16:55:28 -0800 |
|---|---|---|
| committer | H. Peter Anvin <hpa@zytor.com> | 2010-02-10 16:55:28 -0800 |
| commit | 84abd88a70090cf00f9e45c3a81680874f17626e (patch) | |
| tree | 4f58b80057f6e1f5817af1dc33a5458b3dfc9a99 /kernel/resource.c | |
| parent | 13ca0fcaa33f6b1984c4111b6ec5df42689fea6f (diff) | |
| parent | e28cab42f384745c8a947a9ccd51e4aae52f5d51 (diff) | |
Merge remote branch 'linus/master' into x86/bootmem
Diffstat (limited to 'kernel/resource.c')
| -rw-r--r-- | kernel/resource.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/kernel/resource.c b/kernel/resource.c index e68cd7477c4..03c897f7935 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -321,35 +321,37 @@ static int find_resource(struct resource *root, struct resource *new, void *alignf_data) { struct resource *this = root->child; + struct resource tmp = *new; - new->start = root->start; + tmp.start = root->start; /* * Skip past an allocated resource that starts at 0, since the assignment - * of this->start - 1 to new->end below would cause an underflow. + * of this->start - 1 to tmp->end below would cause an underflow. */ if (this && this->start == 0) { - new->start = this->end + 1; + tmp.start = this->end + 1; this = this->sibling; } for(;;) { if (this) - new->end = this->start - 1; + tmp.end = this->start - 1; else - new->end = root->end; - if (new->start < min) - new->start = min; - if (new->end > max) - new->end = max; - new->start = ALIGN(new->start, align); + tmp.end = root->end; + if (tmp.start < min) + tmp.start = min; + if (tmp.end > max) + tmp.end = max; + tmp.start = ALIGN(tmp.start, align); if (alignf) - alignf(alignf_data, new, size, align); - if (new->start < new->end && new->end - new->start >= size - 1) { - new->end = new->start + size - 1; + alignf(alignf_data, &tmp, size, align); + if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) { + new->start = tmp.start; + new->end = tmp.start + size - 1; return 0; } if (!this) break; - new->start = this->end + 1; + tmp.start = this->end + 1; this = this->sibling; } return -EBUSY; |
