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:
Родитель
c73e5c9c59
Коммит
ae8e3a915a
|
@ -706,24 +706,13 @@ void insert_resource_expand_to_fit(struct resource *root, struct resource *new)
|
|||
write_unlock(&resource_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
static int __adjust_resource(struct resource *res, resource_size_t start,
|
||||
resource_size_t size)
|
||||
{
|
||||
struct resource *tmp, *parent = res->parent;
|
||||
resource_size_t end = start + size - 1;
|
||||
int result = -EBUSY;
|
||||
|
||||
write_lock(&resource_lock);
|
||||
|
||||
if (!parent)
|
||||
goto skip;
|
||||
|
||||
|
@ -751,6 +740,26 @@ skip:
|
|||
result = 0;
|
||||
|
||||
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);
|
||||
return result;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче