projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] IPC namespace - sysctls
[cascardo/linux.git]
/
kernel
/
resource.c
diff --git
a/kernel/resource.c
b/kernel/resource.c
index
129cf04
..
9db38a1
100644
(file)
--- a/
kernel/resource.c
+++ b/
kernel/resource.c
@@
-244,6
+244,7
@@
int find_next_system_ram(struct resource *res)
start = res->start;
end = res->end;
start = res->start;
end = res->end;
+ BUG_ON(start >= end);
read_lock(&resource_lock);
for (p = iomem_resource.child; p ; p = p->sibling) {
read_lock(&resource_lock);
for (p = iomem_resource.child; p ; p = p->sibling) {
@@
-254,15
+255,17
@@
int find_next_system_ram(struct resource *res)
p = NULL;
break;
}
p = NULL;
break;
}
- if (
p->start >= start
)
+ if (
(p->end >= start) && (p->start < end)
)
break;
}
read_unlock(&resource_lock);
if (!p)
return -1;
/* copy data */
break;
}
read_unlock(&resource_lock);
if (!p)
return -1;
/* copy data */
- res->start = p->start;
- res->end = p->end;
+ if (res->start < p->start)
+ res->start = p->start;
+ if (res->end > p->end)
+ res->end = p->end;
return 0;
}
#endif
return 0;
}
#endif
@@
-341,12
+344,11
@@
EXPORT_SYMBOL(allocate_resource);
*
* Returns 0 on success, -EBUSY if the resource can't be inserted.
*
*
* Returns 0 on success, -EBUSY if the resource can't be inserted.
*
- * This function is equivalent
of
request_resource when no conflict
+ * This function is equivalent
to
request_resource when no conflict
* happens. If a conflict happens, and the conflicting resources
* entirely fit within the range of the new resource, then the new
* happens. If a conflict happens, and the conflicting resources
* entirely fit within the range of the new resource, then the new
- * resource is inserted and the conflicting resources become childs of
- * the new resource. Otherwise the new resource becomes the child of
- * the conflicting resource
+ * resource is inserted and the conflicting resources become children of
+ * the new resource.
*/
int insert_resource(struct resource *parent, struct resource *new)
{
*/
int insert_resource(struct resource *parent, struct resource *new)
{
@@
-354,20
+356,21
@@
int insert_resource(struct resource *parent, struct resource *new)
struct resource *first, *next;
write_lock(&resource_lock);
struct resource *first, *next;
write_lock(&resource_lock);
- begin:
- result = 0;
- first = __request_resource(parent, new);
- if (!first)
- goto out;
- result = -EBUSY;
- if (first == parent)
- goto out;
+ for (;; parent = first) {
+ result = 0;
+ first = __request_resource(parent, new);
+ if (!first)
+ goto out;
+
+ result = -EBUSY;
+ if (first == parent)
+ goto out;
- /* Resource fully contained by the clashing resource? Recurse into it */
- if (first->start <= new->start && first->end >= new->end) {
- parent = first;
-
goto begin
;
+ if ((first->start > new->start) || (first->end < new->end))
+ break;
+ if ((first->start == new->start) && (first->end == new->end))
+
break
;
}
for (next = first; ; next = next->sibling) {
}
for (next = first; ; next = next->sibling) {
@@
-404,8
+407,6
@@
int insert_resource(struct resource *parent, struct resource *new)
return result;
}
return result;
}
-EXPORT_SYMBOL(insert_resource);
-
/*
* Given an existing resource, change its start and size to match the
* arguments. Returns -EBUSY if it can't fit. Existing children of
/*
* Given an existing resource, change its start and size to match the
* arguments. Returns -EBUSY if it can't fit. Existing children of