Re: Resend [PATCH] kernel/resource.c: invalidate parent when freed resource has childs

From: Linus Torvalds
Date: Fri Aug 09 2019 - 18:46:21 EST


On Fri, Aug 9, 2019 at 3:38 PM Wei Yang <richard.weiyang@xxxxxxxxx> wrote:
>
> In theory, child may have siblings. Would it be possible to have several
> devices under xhci-hcd?

I'm less interested in the xhci-hcd case - which I certainly *hope* is
fixed already? - than in "if this happens somewhere else".

So if we do want to remove the parent (which may be a good idea with a
warning), and want to make sure that the children are really removed
from the resource hierarchy, we should do somethiing like

static bool detach_children(struct resource *res)
{
res = res->child;
if (!res)
return false;
do {
res->parent = NULL;
res = res->sibling;
} while (res);
return true;
}

and then we could write the __release_region() warning as

/* You should not release a resource that has children */
WARN_ON_ONCE(detach_children(res));

or something?

NOTE! The above is entirely untested, and written purely in my mail
reader. It might be seriously buggy, including not compiling, or doing
odd things. See it more as a "maybe something like this" code snippet
example than any kind of final form.

Linus