From 47b10421a6f90df256e77ae8086e4dc3760313a3 Mon Sep 17 00:00:00 2001 From: sborrill Date: Tue, 6 May 2014 09:01:26 +0000 Subject: [PATCH] Force pci_mode 1 when running as Xen HVM domU to allow cd* to be detected correctly. Fixes kern/48770. Thanks to cube@ --- sys/arch/x86/pci/pci_machdep.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sys/arch/x86/pci/pci_machdep.c b/sys/arch/x86/pci/pci_machdep.c index 856dad66a3c7..5648f9dd47b2 100644 --- a/sys/arch/x86/pci/pci_machdep.c +++ b/sys/arch/x86/pci/pci_machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: pci_machdep.c,v 1.65 2014/01/27 23:11:50 jakllsch Exp $ */ +/* $NetBSD: pci_machdep.c,v 1.66 2014/05/06 09:01:26 sborrill Exp $ */ /*- * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. @@ -73,7 +73,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.65 2014/01/27 23:11:50 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.66 2014/05/06 09:01:26 sborrill Exp $"); #include #include @@ -526,6 +526,7 @@ pci_mode_detect(void) int i; pcireg_t idreg; extern char cpu_brand_string[]; + const char *system_vendor, *system_product; if (pci_mode != -1) return pci_mode; @@ -555,7 +556,13 @@ pci_mode_detect(void) return (pci_mode); } } - if (memcmp(cpu_brand_string, "QEMU", 4) == 0) { + + system_vendor = pmf_get_platform("system-vendor"); + system_product = pmf_get_platform("system-product"); + if (memcmp(cpu_brand_string, "QEMU", 4) == 0 || + (system_vendor != NULL && system_product != NULL && + !strcmp(system_vendor, "Xen") && + !strcmp(system_product, "HVM domU"))) { /* PR 45671, https://bugs.launchpad.net/qemu/+bug/897771 */ #ifdef DEBUG printf("forcing PCI mode 1 for QEMU\n");