mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 06:37:59 +00:00
resource: add __adjust_resource() for internal use
Add __adjust_resource(), which is called by adjust_resource() internally after the resource_lock is held. There is no interface change to adjust_resource(). This change allows other functions to call __adjust_resource() internally while the resource_lock is held. Signed-off-by: Toshi Kani <toshi.kani@hp.com> Reviewed-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com> Acked-by: David Rientjes <rientjes@google.com> Cc: Ram Pai <linuxram@us.ibm.com> Cc: T Makphaibulchoke <tmac@hp.com> Cc: Wen Congyang <wency@cn.fujitsu.com> Cc: Tang Chen <tangchen@cn.fujitsu.com> Cc: Jiang Liu <jiang.liu@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c73e5c9c59
commit
ae8e3a915a
1 changed files with 22 additions and 13 deletions
|
@ -706,24 +706,13 @@ void insert_resource_expand_to_fit(struct resource *root, struct resource *new)
|
||||||
write_unlock(&resource_lock);
|
write_unlock(&resource_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static int __adjust_resource(struct resource *res, resource_size_t start,
|
||||||
* adjust_resource - modify a resource's start and size
|
resource_size_t size)
|
||||||
* @res: resource to modify
|
|
||||||
* @start: new start value
|
|
||||||
* @size: new size
|
|
||||||
*
|
|
||||||
* Given an existing resource, change its start and size to match the
|
|
||||||
* arguments. Returns 0 on success, -EBUSY if it can't fit.
|
|
||||||
* Existing children of the resource are assumed to be immutable.
|
|
||||||
*/
|
|
||||||
int adjust_resource(struct resource *res, resource_size_t start, resource_size_t size)
|
|
||||||
{
|
{
|
||||||
struct resource *tmp, *parent = res->parent;
|
struct resource *tmp, *parent = res->parent;
|
||||||
resource_size_t end = start + size - 1;
|
resource_size_t end = start + size - 1;
|
||||||
int result = -EBUSY;
|
int result = -EBUSY;
|
||||||
|
|
||||||
write_lock(&resource_lock);
|
|
||||||
|
|
||||||
if (!parent)
|
if (!parent)
|
||||||
goto skip;
|
goto skip;
|
||||||
|
|
||||||
|
@ -751,6 +740,26 @@ skip:
|
||||||
result = 0;
|
result = 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* adjust_resource - modify a resource's start and size
|
||||||
|
* @res: resource to modify
|
||||||
|
* @start: new start value
|
||||||
|
* @size: new size
|
||||||
|
*
|
||||||
|
* Given an existing resource, change its start and size to match the
|
||||||
|
* arguments. Returns 0 on success, -EBUSY if it can't fit.
|
||||||
|
* Existing children of the resource are assumed to be immutable.
|
||||||
|
*/
|
||||||
|
int adjust_resource(struct resource *res, resource_size_t start,
|
||||||
|
resource_size_t size)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
write_lock(&resource_lock);
|
||||||
|
result = __adjust_resource(res, start, size);
|
||||||
write_unlock(&resource_lock);
|
write_unlock(&resource_lock);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue