Index: sys/dev/hyperv/vmbus/vmbus.c =================================================================== --- sys/dev/hyperv/vmbus/vmbus.c +++ sys/dev/hyperv/vmbus/vmbus.c @@ -1216,8 +1216,9 @@ static void vmbus_get_mmio_res_pass(device_t dev, enum parse_pass pass) { - device_t acpi0, pcib0 = NULL; + device_t acpi0; device_t *children; + const char *child_name; int i, count; /* Try to find _CRS on VMBus device */ @@ -1227,7 +1228,7 @@ acpi0 = device_get_parent(dev); vmbus_get_crs(acpi0, dev, pass); - /* Try to locate pcib0 and find _CRS on it */ + /* Try to locate pcib0 and acpi_syscontainer0, and use the _CRS */ if (device_get_children(acpi0, &children, &count) != 0) return; @@ -1235,16 +1236,13 @@ if (!device_is_attached(children[i])) continue; - if (strcmp("pcib0", device_get_nameunit(children[i]))) - continue; - - pcib0 = children[i]; - break; + child_name = device_get_nameunit(children[i]); + if (!strcmp("pcib0", child_name) || + !strcmp("acpi_syscontainer0", child_name)) { + vmbus_get_crs(children[i], dev, pass); + } } - if (pcib0) - vmbus_get_crs(pcib0, dev, pass); - free(children, M_TEMP); }