Merge branch 'linus' into x86/mm
x86/mm is on 32-rc4 and missing the spinlock namespace changes which are needed for further commits into this topic. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user