rem: TRACE(("Deleting colliding node %p\n", owner));
add: TRACE(("Deleting colliding device node %p\n", owner));
context: unregister_colliding_node_range(io_resource_info *list, io_resource_info *resource){	io_resource_info *cur;	uint32 base = resource->resource.base;	uint32 length = resource->resource.length;	do {		for (cur = list; cur != NULL; cur = cur->next) {			// ignore ourself			if (cur == resource)				continue;			// we need the "base + length - 1" trick to avoid wrap around at 4 GB			if (cur->resource.base >= base				&& cur->resource.base + length - 1 <= base + length - 1) {				device_node_handle owner = cur->owner;				if (owner == NULL)					panic("Transfer of I/O resources from temporary to device node collided with other temporary allocation");				TRACE(("Deleting colliding node %p\n", owner));				// make sure node still exists after we'll have released lock				++owner->ref_count;				// we have to release lock during unregistration				benaphore_unlock(&gNodeLock);				// unregister device node - we own its resources now				// (its resources are freed by the next remove_node_ref call)				dm_unregister_node(owner);				benaphore_lock(&gNodeLock);				dm_put_node_nolock(owner);				// restart loop as resource list may have changed meanwhile				break;			}		}	} while (cur != NULL);}