Ok, this looks mostly right. I do worry about the alignment information: you lose that thing for any resource that had IORESOURCE_STARTALIGN set when you do this thing. That's pretty fundamental to the whole resource code, I suspect we should just finally add a 'alignment' field to the resource struct, so that alignment doesn't get lost when a resource is allocated.

(Do a "git grep IORESOURCE_.*ALIGN" to see the kind of stuff I'm talking about, and look at he PCI 'setup-bus.c' code that sets that STARTALIGN thing).

So a preliminary ack on the resource.c parts. The rest I'm still a bit dubious about, and the whole "we've lost alignment on the resources" is probably indicative of how none of the resource code has ever really been designed for this kind of "tear down and build back up again" behavior.