diff options
Diffstat (limited to 'kernel/resource.c')
| -rw-r--r-- | kernel/resource.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/resource.c b/kernel/resource.c index 3b3cedc52592..c8dc249da5ce 100644 --- a/kernel/resource.c +++ b/kernel/resource.c | |||
| @@ -419,6 +419,9 @@ static int __find_resource(struct resource *root, struct resource *old, | |||
| 419 | else | 419 | else |
| 420 | tmp.end = root->end; | 420 | tmp.end = root->end; |
| 421 | 421 | ||
| 422 | if (tmp.end < tmp.start) | ||
| 423 | goto next; | ||
| 424 | |||
| 422 | resource_clip(&tmp, constraint->min, constraint->max); | 425 | resource_clip(&tmp, constraint->min, constraint->max); |
| 423 | arch_remove_reservations(&tmp); | 426 | arch_remove_reservations(&tmp); |
| 424 | 427 | ||
| @@ -436,8 +439,10 @@ static int __find_resource(struct resource *root, struct resource *old, | |||
| 436 | return 0; | 439 | return 0; |
| 437 | } | 440 | } |
| 438 | } | 441 | } |
| 439 | if (!this) | 442 | |
| 443 | next: if (!this || this->end == root->end) | ||
| 440 | break; | 444 | break; |
| 445 | |||
| 441 | if (this != old) | 446 | if (this != old) |
| 442 | tmp.start = this->end + 1; | 447 | tmp.start = this->end + 1; |
| 443 | this = this->sibling; | 448 | this = this->sibling; |
