--- kernel/resource.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) Index: linux-2.6/kernel/resource.c =================================================================== --- linux-2.6.orig/kernel/resource.c +++ linux-2.6/kernel/resource.c @@ -201,6 +201,7 @@ int request_resource(struct resource *ro write_lock(&resource_lock); conflict = __request_resource(root, new); write_unlock(&resource_lock); + printk(KERN_DEBUG "request_resource: root: (%s) [%llx, %llx], new: (%s) [%llx, %llx] conflict %d\n", root->name, root->start, root->end, new->name, new->start, new->end, !!conflict); return conflict ? -EBUSY : 0; } @@ -372,12 +373,16 @@ static struct resource * __insert_resour for (;; parent = first) { first = __request_resource(parent, new); - if (!first) + if (!first) { + printk(KERN_DEBUG " insert_resource: good with request direct parent: (%s) [%llx, %llx], new: (%s) [%llx, %llx]\n", parent->name, parent->start, parent->end, new->name, new->start, new->end); + return first; + } if (first == parent) return first; + printk(KERN_DEBUG " insert_resource: first: (%s) [%llx, %llx], new: (%s) [%llx, %llx]\n", first->name, first->start, first->end, new->name, new->start, new->end); if ((first->start > new->start) || (first->end < new->end)) break; if ((first->start == new->start) && (first->end == new->end)) @@ -397,10 +402,13 @@ static struct resource * __insert_resour new->parent = parent; new->sibling = next->sibling; new->child = first; + printk(KERN_DEBUG " insert_resource: direct parent: (%s) [%llx, %llx], new: (%s) [%llx, %llx]\n", parent->name, parent->start, parent->end, new->name, new->start, new->end); next->sibling = NULL; - for (next = first; next; next = next->sibling) + for (next = first; next; next = next->sibling) { next->parent = new; + printk(KERN_DEBUG " insert_resource: child: (%s) [%llx, %llx], new: (%s) [%llx, %llx]\n", next->name, next->start, next->end, new->name, new->start, new->end); + } if (parent->child == first) { parent->child = new; @@ -533,8 +541,13 @@ static void __init __reserve_region_with for (;;) { conflict = __request_resource(parent, res); - if (!conflict) + if (!conflict) { + printk(KERN_DEBUG " __reserve_region_with_split: good with request direct parent: (%s) [%llx, %llx], res: (%s) [%llx, %llx]\n", + parent->name, parent->start, parent->end, + name, start, end); + break; + } if (conflict != parent) { parent = conflict; if (!(conflict->flags & IORESOURCE_BUSY)) @@ -548,7 +561,7 @@ static void __init __reserve_region_with } if (!res) { - printk(KERN_DEBUG " __reserve_region_with_split: (%s) [%llx, %llx], res: (%s) [%llx, %llx]\n", + printk(KERN_DEBUG " __reserve_region_with_split: conflict: (%s) [%llx, %llx], res: (%s) [%llx, %llx]\n", conflict->name, conflict->start, conflict->end, name, start, end); @@ -641,12 +654,16 @@ struct resource * __request_region(struc struct resource *conflict; conflict = __request_resource(parent, res); - if (!conflict) + if (!conflict) { + printk(KERN_DEBUG " __request_region: good with request direct parent: (%s) [%llx, %llx], res: (%s) [%llx, %llx]\n", parent->name, parent->start, parent->end, res->name, res->start, res->end); break; + } if (conflict != parent) { + printk(KERN_DEBUG " __request_region: conflict: (%s) [%llx, %llx], res: (%s) [%llx, %llx]\n", conflict->name, conflict->start, conflict->end, res->name, res->start, res->end); parent = conflict; if (!(conflict->flags & IORESOURCE_BUSY)) continue; + printk(KERN_DEBUG "busy flag\n"); } /* Uhhuh, that didn't work out.. */