On 2016/3/31 20:42, Mark Rutland wrote: > On Thu, Mar 31, 2016 at 01:44:08PM +0200, Ard Biesheuvel wrote: >> > The heuristic is there to decide whether some DTB image contains a >> > complete description of the platform, or only some data handed over by >> > the bootloader. Arguably, a DT containing both /chosen and /hypervisor >> > but nothing else can still not describe an actual platform, and >> > whether we execute under Xen or not is completely irrelevant. > I disagree somewhat. > > In general, a /hypervisor node may not be a Xen node, and could > potentially imply some platform description. As /hypervisor is a generic > name up for grabs by any hypervisor, we simply cannot make assumptions > about it. > > As /chosen is a special reserved path that implies a particular binding > and has no compatible string, so checking its path alone is correct. > > While we do check that the /hypervisor node is "xen,xen" compatible > elsewhere, the canonical mechanism of checking for a Xen node (as > opposed to any hypervisor's node) is to check the compatible string. > > If we are going to handle nodes for other hypervisors while treating the > DTB as empty, we need code and discussion regarding said hypervisor. > > Hence, for checking for a Xen /hypervisor node, I would prefer we > checked the compatible string rather than the path. > > An is_xen_node() helper (which could also check that the path is > "/hypervisor") would avoid having redundant, subtly distinct ways of > checking, and would explicitly document precisely what we are checking > for. So if we use is_xen_node(), do we need to call xen_initial_domain() again? I still think here is_xen_node() and xen_initial_domain() have same meaning. Why do we need that? If it really needs is_xen_node(), I will not factor fdt_find_hyper_node() in patch 11 since it uses flat DT while here it's going to use unflatten DT. Thanks, -- Shannon -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html