Message ID | CAKv+Gu-wPq_FzO3sm7bhSFuu7EVxHWB_v6HOn1GqNbdaE-iBoQ@mail.gmail.com |
---|---|
State | New |
Headers | show |
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. Thanks, Mark. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c index d1ce8e2f98b9..d6d61e2e4d49 100644 --- a/arch/arm64/kernel/acpi.c +++ b/arch/arm64/kernel/acpi.c @@ -67,9 +67,10 @@ static int __init dt_scan_depth1_nodes(unsigned long node, { /* * Return 1 as soon as we encounter a node at depth 1 that is - * not the /chosen node. + * not the /chosen node or the /hypervisor node. */ - if (depth == 1 && (strcmp(uname, "chosen") != 0)) + if (depth == 1 && strcmp(uname, "chosen") != 0 && + strcmp(uname, "hypervisor") != 0) return 1; return 0; }