diff options
Diffstat (limited to 'kernel/resource.c')
| -rw-r--r-- | kernel/resource.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/resource.c b/kernel/resource.c index e1d2b8ee76d5..dc8b47764443 100644 --- a/kernel/resource.c +++ b/kernel/resource.c | |||
| @@ -722,14 +722,12 @@ int adjust_resource(struct resource *res, resource_size_t start, resource_size_t | |||
| 722 | 722 | ||
| 723 | write_lock(&resource_lock); | 723 | write_lock(&resource_lock); |
| 724 | 724 | ||
| 725 | if (!parent) | ||
| 726 | goto skip; | ||
| 727 | |||
| 725 | if ((start < parent->start) || (end > parent->end)) | 728 | if ((start < parent->start) || (end > parent->end)) |
| 726 | goto out; | 729 | goto out; |
| 727 | 730 | ||
| 728 | for (tmp = res->child; tmp; tmp = tmp->sibling) { | ||
| 729 | if ((tmp->start < start) || (tmp->end > end)) | ||
| 730 | goto out; | ||
| 731 | } | ||
| 732 | |||
| 733 | if (res->sibling && (res->sibling->start <= end)) | 731 | if (res->sibling && (res->sibling->start <= end)) |
| 734 | goto out; | 732 | goto out; |
| 735 | 733 | ||
| @@ -741,6 +739,11 @@ int adjust_resource(struct resource *res, resource_size_t start, resource_size_t | |||
| 741 | goto out; | 739 | goto out; |
| 742 | } | 740 | } |
| 743 | 741 | ||
| 742 | skip: | ||
| 743 | for (tmp = res->child; tmp; tmp = tmp->sibling) | ||
| 744 | if ((tmp->start < start) || (tmp->end > end)) | ||
| 745 | goto out; | ||
| 746 | |||
| 744 | res->start = start; | 747 | res->start = start; |
| 745 | res->end = end; | 748 | res->end = end; |
| 746 | result = 0; | 749 | result = 0; |
