Michael Bringmann <m...@linux.vnet.ibm.com> writes: > During LPAR migration, the content of the device tree/sysfs may > be updated including deletion and replacement of nodes in the > tree. When nodes are added to the internal node structures, they > are appended in FIFO order to a list of nodes maintained by the > OF code APIs.
That hasn't been true for several years. The data structure is an n-ary tree. What kernel version are you working on? > When nodes are removed from the device tree, they > are marked OF_DETACHED, but not actually deleted from the system > to allow for pointers cached elsewhere in the kernel. The order > and content of the entries in the list of nodes is not altered, > though. Something is going wrong if this is actually happening. When the node is detached it should be *detached* from the tree of all nodes, so it should not be discoverable other than by having an existing pointer to it. That's what __of_detach_node() does: parent = np->parent; if (WARN_ON(!parent)) return; if (parent->child == np) parent->child = np->sibling; else { struct device_node *prevsib; for (prevsib = np->parent->child; prevsib->sibling != np; prevsib = prevsib->sibling) ; prevsib->sibling = np->sibling; } ie. the node must already have a NULL parent, and then it is spliced out of its parent's child list. Please give us more info so we can work out what's actually happening. cheers