From 95c92af30e114a8ac6a4f673b64c8720f05c8ff6 Mon Sep 17 00:00:00 2001 From: gson Date: Sat, 5 Oct 2013 11:20:34 +0000 Subject: [PATCH] Force PCI mode 1 when running under QEMU, to work around QEMU bug 897771. This should also make it possible to boot NetBSD under versions of KVM that have inherited said QEMU bug. Fixes PR kern/45671. --- sys/arch/x86/pci/pci_machdep.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sys/arch/x86/pci/pci_machdep.c b/sys/arch/x86/pci/pci_machdep.c index 6429e974de64..0742edd06c15 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.60 2013/07/31 19:27:51 macallan Exp $ */ +/* $NetBSD: pci_machdep.c,v 1.61 2013/10/05 11:20:34 gson Exp $ */ /*- * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. @@ -73,7 +73,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.60 2013/07/31 19:27:51 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.61 2013/10/05 11:20:34 gson Exp $"); #include #include @@ -526,6 +526,7 @@ pci_mode_detect(void) uint32_t sav, val; int i; pcireg_t idreg; + extern char cpu_brand_string[]; if (pci_mode != -1) return pci_mode; @@ -555,6 +556,13 @@ pci_mode_detect(void) return (pci_mode); } } + if (memcmp(cpu_brand_string, "QEMU", 4) == 0) { + /* PR 45671, https://bugs.launchpad.net/qemu/+bug/897771 */ +#ifdef DEBUG + printf("forcing PCI mode 1 for QEMU\n"); +#endif + return (pci_mode); + } /* * Strong check for standard compliant mode 1: