diff options
-rw-r--r-- | kernel/resource.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/kernel/resource.c b/kernel/resource.c index 73f35d4b30b9..ae246f97c5d3 100644 --- a/kernel/resource.c +++ b/kernel/resource.c | |||
@@ -706,24 +706,13 @@ void insert_resource_expand_to_fit(struct resource *root, struct resource *new) | |||
706 | write_unlock(&resource_lock); | 706 | write_unlock(&resource_lock); |
707 | } | 707 | } |
708 | 708 | ||
709 | /** | 709 | static int __adjust_resource(struct resource *res, resource_size_t start, |
710 | * adjust_resource - modify a resource's start and size | 710 | resource_size_t size) |
711 | * @res: resource to modify | ||
712 | * @start: new start value | ||
713 | * @size: new size | ||
714 | * | ||
715 | * Given an existing resource, change its start and size to match the | ||
716 | * arguments. Returns 0 on success, -EBUSY if it can't fit. | ||
717 | * Existing children of the resource are assumed to be immutable. | ||
718 | */ | ||
719 | int adjust_resource(struct resource *res, resource_size_t start, resource_size_t size) | ||
720 | { | 711 | { |
721 | struct resource *tmp, *parent = res->parent; | 712 | struct resource *tmp, *parent = res->parent; |
722 | resource_size_t end = start + size - 1; | 713 | resource_size_t end = start + size - 1; |
723 | int result = -EBUSY; | 714 | int result = -EBUSY; |
724 | 715 | ||
725 | write_lock(&resource_lock); | ||
726 | |||
727 | if (!parent) | 716 | if (!parent) |
728 | goto skip; | 717 | goto skip; |
729 | 718 | ||
@@ -751,6 +740,26 @@ skip: | |||
751 | result = 0; | 740 | result = 0; |
752 | 741 | ||
753 | out: | 742 | out: |
743 | return result; | ||
744 | } | ||
745 | |||
746 | /** | ||
747 | * adjust_resource - modify a resource's start and size | ||
748 | * @res: resource to modify | ||
749 | * @start: new start value | ||
750 | * @size: new size | ||
751 | * | ||
752 | * Given an existing resource, change its start and size to match the | ||
753 | * arguments. Returns 0 on success, -EBUSY if it can't fit. | ||
754 | * Existing children of the resource are assumed to be immutable. | ||
755 | */ | ||
756 | int adjust_resource(struct resource *res, resource_size_t start, | ||
757 | resource_size_t size) | ||
758 | { | ||
759 | int result; | ||
760 | |||
761 | write_lock(&resource_lock); | ||
762 | result = __adjust_resource(res, start, size); | ||
754 | write_unlock(&resource_lock); | 763 | write_unlock(&resource_lock); |
755 | return result; | 764 | return result; |
756 | } | 765 | } |