From nobody Thu May 2 02:43:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1490979794516659.4455363364904; Fri, 31 Mar 2017 10:03:14 -0700 (PDT) Received: from localhost ([::1]:42044 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ctzxA-0001JL-TX for importer@patchew.org; Fri, 31 Mar 2017 13:03:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33923) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ctzw1-0000eg-Kj for qemu-devel@nongnu.org; Fri, 31 Mar 2017 13:02:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ctzvx-0001qa-PC for qemu-devel@nongnu.org; Fri, 31 Mar 2017 13:02:01 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34177) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ctzvx-0001pd-Fq for qemu-devel@nongnu.org; Fri, 31 Mar 2017 13:01:57 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 691FE22BA12; Fri, 31 Mar 2017 17:01:56 +0000 (UTC) Received: from gimli.home (ovpn-117-7.phx2.redhat.com [10.3.117.7]) by smtp.corp.redhat.com (Postfix) with ESMTP id CF3D618EDD; Fri, 31 Mar 2017 17:01:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 691FE22BA12 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=alex.williamson@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 691FE22BA12 From: Alex Williamson To: qemu-devel@nongnu.org Date: Fri, 31 Mar 2017 11:01:52 -0600 Message-ID: <20170331170118.11643.44585.stgit@gimli.home> In-Reply-To: <20170331170018.11643.80499.stgit@gimli.home> References: <20170331170018.11643.80499.stgit@gimli.home> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 31 Mar 2017 17:01:56 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 1/1] Revert "vfio/pci-quirks.c: Disable stolen memory for igd VFIO" X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Xiong Zhang Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 From: Xiong Zhang This reverts commit c2b2e158cc7b1cb431bd6039824ec13c3184a775. The original patch intend to prevent linux i915 driver from using stolen meory. But this patch breaks windows IGD driver loading on Gen9+, as IGD HW will use stolen memory on Gen9+, once windows IGD driver see zero size stolen memory, it will unload. Meanwhile stolen memory will be disabled in 915 when i915 run as a guest. Signed-off-by: Xiong Zhang [aw: Gen9+ is SkyLake and newer] Signed-off-by: Alex Williamson --- hw/vfio/pci-quirks.c | 65 +++++++++++++++++++++-------------------------= ---- 1 file changed, 27 insertions(+), 38 deletions(-) diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c index e995e32deedf..e9b493b939db 100644 --- a/hw/vfio/pci-quirks.c +++ b/hw/vfio/pci-quirks.c @@ -1367,45 +1367,14 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice= *vdev, int nr) uint16_t cmd_orig, cmd; Error *err =3D NULL; =20 - /* This must be an Intel VGA device. */ - if (!vfio_pci_is(vdev, PCI_VENDOR_ID_INTEL, PCI_ANY_ID) || - !vfio_is_vga(vdev) || nr !=3D 4) { - return; - } - - /* - * IGD is not a standard, they like to change their specs often. We - * only attempt to support back to SandBridge and we hope that newer - * devices maintain compatibility with generation 8. - */ - gen =3D igd_gen(vdev); - if (gen !=3D 6 && gen !=3D 8) { - error_report("IGD device %s is unsupported by IGD quirks, " - "try SandyBridge or newer", vdev->vbasedev.name); - return; - } - - /* - * Regardless of running in UPT or legacy mode, the guest graphics - * driver may attempt to use stolen memory, however only legacy mode - * has BIOS support for reserving stolen memory in the guest VM. - * Emulate the GMCH register in all cases and zero out the stolen - * memory size here. Legacy mode may request allocation and re-write - * this below. - */ - gmch =3D vfio_pci_read_config(&vdev->pdev, IGD_GMCH, 4); - gmch &=3D ~((gen < 8 ? 0x1f : 0xff) << (gen < 8 ? 3 : 8)); - - /* GMCH is read-only, emulated */ - pci_set_long(vdev->pdev.config + IGD_GMCH, gmch); - pci_set_long(vdev->pdev.wmask + IGD_GMCH, 0); - pci_set_long(vdev->emulated_config_bits + IGD_GMCH, ~0); - /* - * This must be at address 00:02.0 for us to even onsider enabling - * legacy mode. The vBIOS has dependencies on the PCI bus address. + * This must be an Intel VGA device at address 00:02.0 for us to even + * consider enabling legacy mode. The vBIOS has dependencies on the + * PCI bus address. */ - if (&vdev->pdev !=3D pci_find_device(pci_device_root_bus(&vdev->pdev), + if (!vfio_pci_is(vdev, PCI_VENDOR_ID_INTEL, PCI_ANY_ID) || + !vfio_is_vga(vdev) || nr !=3D 4 || + &vdev->pdev !=3D pci_find_device(pci_device_root_bus(&vdev->pdev), 0, PCI_DEVFN(0x2, 0))) { return; } @@ -1425,6 +1394,18 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice = *vdev, int nr) } =20 /* + * IGD is not a standard, they like to change their specs often. We + * only attempt to support back to SandBridge and we hope that newer + * devices maintain compatibility with generation 8. + */ + gen =3D igd_gen(vdev); + if (gen !=3D 6 && gen !=3D 8) { + error_report("IGD device %s is unsupported in legacy mode, " + "try SandyBridge or newer", vdev->vbasedev.name); + return; + } + + /* * Most of what we're doing here is to enable the ROM to run, so if * there's no ROM, there's no point in setting up this quirk. * NB. We only seem to get BIOS ROMs, so a UEFI VM would need CSM supp= ort. @@ -1479,6 +1460,8 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *= vdev, int nr) goto out; } =20 + gmch =3D vfio_pci_read_config(&vdev->pdev, IGD_GMCH, 4); + /* * If IGD VGA Disable is clear (expected) and VGA is not already enabl= ed, * try to enable it. Probably shouldn't be using legacy mode without = VGA, @@ -1549,11 +1532,12 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice= *vdev, int nr) * when IVD (IGD VGA Disable) is clear, but the claim is that it's unu= sed, * so let's not waste VM memory for it. */ + gmch &=3D ~((gen < 8 ? 0x1f : 0xff) << (gen < 8 ? 3 : 8)); + if (vdev->igd_gms) { if (vdev->igd_gms <=3D 0x10) { gms_mb =3D vdev->igd_gms * 32; gmch |=3D vdev->igd_gms << (gen < 8 ? 3 : 8); - pci_set_long(vdev->pdev.config + IGD_GMCH, gmch); } else { error_report("Unsupported IGD GMS value 0x%x", vdev->igd_gms); vdev->igd_gms =3D 0; @@ -1573,6 +1557,11 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice = *vdev, int nr) fw_cfg_add_file(fw_cfg_find(), "etc/igd-bdsm-size", bdsm_size, sizeof(*bdsm_size)); =20 + /* GMCH is read-only, emulated */ + pci_set_long(vdev->pdev.config + IGD_GMCH, gmch); + pci_set_long(vdev->pdev.wmask + IGD_GMCH, 0); + pci_set_long(vdev->emulated_config_bits + IGD_GMCH, ~0); + /* BDSM is read-write, emulated. The BIOS needs to be able to write i= t */ pci_set_long(vdev->pdev.config + IGD_BDSM, 0); pci_set_long(vdev->pdev.wmask + IGD_BDSM, ~0);