From nobody Tue Feb 10 01:32:56 2026 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.zohomail.com; dkim=fail; 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; dmarc=fail(p=none dis=none) header.from=oracle.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1533816828544844.3196334077767; Thu, 9 Aug 2018 05:13:48 -0700 (PDT) Received: from localhost ([::1]:50156 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fnjp1-0003o8-84 for importer@patchew.org; Thu, 09 Aug 2018 08:13:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56579) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fnjQM-0005WQ-ID for qemu-devel@nongnu.org; Thu, 09 Aug 2018 07:48:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fnjQJ-0007eC-US for qemu-devel@nongnu.org; Thu, 09 Aug 2018 07:48:14 -0400 Received: from aserp2130.oracle.com ([141.146.126.79]:48576) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fnjQJ-0007dq-L6 for qemu-devel@nongnu.org; Thu, 09 Aug 2018 07:48:11 -0400 Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w79Biv9l163162; Thu, 9 Aug 2018 11:48:10 GMT Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp2130.oracle.com with ESMTP id 2kn1nday1m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 09 Aug 2018 11:48:10 +0000 Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id w79Bm9gp022548 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 9 Aug 2018 11:48:10 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id w79Bm95l001195; Thu, 9 Aug 2018 11:48:09 GMT Received: from liran-pc.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 09 Aug 2018 04:48:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2018-07-02; bh=EIXa/1M66APKSIH1eo+CKnk6DpKuZxE7qHNb4sdoNbA=; b=AL41zACKnGDB3Zj2d6I5YrWQ6Hc1AFdvJylhRMHUxEfJHFGocU0DbKKfLJDmi0uWkdV2 2X7xjj5Xa9BTV5X+4E+FTxkwQ27nPh8pLL77HezY1Xy6gidcCTvRM6KwBIlTx3uaRlUO EQMcAoFB6BU91l7hNEyMf4qHYslHQwp6EDZxjVmugfmYCAyxSzegrC/Dd1Zwz7cQtbDr ZVgsFLuzHtn8n/0zXO0zQIKCUEFZddaAIh9u8SnRxlraHG4nixhEWRWrGdU7el0nFrb4 qiadJ2urhnbZK5W7FEUEL8WIAe28PdaDTrpRmHvYKiHlsNbYUtkZg5w6fZ6iiXBJEtdt +w== From: Liran Alon To: qemu-devel@nongnu.org Date: Thu, 9 Aug 2018 14:46:38 +0300 Message-Id: <1533815202-11967-26-git-send-email-liran.alon@oracle.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1533815202-11967-1-git-send-email-liran.alon@oracle.com> References: <1533815202-11967-1-git-send-email-liran.alon@oracle.com> X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8979 signatures=668707 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=1 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=953 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1807170000 definitions=main-1808090123 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 141.146.126.79 Subject: [Qemu-devel] [PATCH 25/29] vmsvga: Add basic support for GMR registers and FIFO commands 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: habkost@redhat.com, mtosatti@redhat.com, Liran Alon , kraxel@redhat.com, pbonzini@redhat.com, rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDMRC_1 RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We don't support GMR regions while reporting caps, but some guests may try to send us some GMR queries and we do our best to ignore them while avoiding FIFO command crash. Reported-by: Leonid Shatz Reviewed-by: Darren Kenny Signed-off-by: Liran Alon --- hw/display/vmware_vga.c | 55 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 55 insertions(+) diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c index 1db8f92f053b..b2f3456357bd 100644 --- a/hw/display/vmware_vga.c +++ b/hw/display/vmware_vga.c @@ -164,6 +164,12 @@ enum { SVGA_REG_PITCHLOCK =3D 32, /* Fixed pitch for all modes */ SVGA_REG_IRQMASK =3D 33, /* Interrupt mask */ =20 + /* Guest memory regions */ + SVGA_REG_GMR_ID =3D 41, + SVGA_REG_GMR_DESCRIPTOR =3D 42, + SVGA_REG_GMR_MAX_IDS =3D 43, + SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH =3D 44, + SVGA_PALETTE_BASE =3D 1024, /* Base of SVGA color map */ SVGA_PALETTE_END =3D SVGA_PALETTE_BASE + 767, SVGA_SCRATCH_BASE =3D SVGA_PALETTE_BASE + 768, @@ -409,6 +415,8 @@ enum { SVGA_CMD_SURFACE_ALPHA_BLEND =3D 28, /* deprecated */ SVGA_CMD_FRONT_ROP_FILL =3D 29, SVGA_CMD_FENCE =3D 30, + SVGA_CMD_DEFINE_GMR2 =3D 41, + SVGA_CMD_REMAP_GMR2 =3D 42, }; =20 /* Legal values for the SVGA_REG_CURSOR_ON register in cursor bypass mode = */ @@ -419,6 +427,13 @@ enum { SVGA_CURSOR_ON_RESTORE_TO_FB =3D 3, }; =20 +enum { + SVGA_REMAP_GMR2_PPN32 =3D 0, + SVGA_REMAP_GMR2_VIA_GMR =3D (1 << 0), + SVGA_REMAP_GMR2_PPN64 =3D (1 << 1), + SVGA_REMAP_GMR2_SINGLE_PPN =3D (1 << 2), +}; + /* Update cursor position from SVGA_FIFO_CURSOR registers */ static void cursor_update_from_fifo(struct vmsvga_state_s *s) { @@ -795,6 +810,7 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s) struct vmsvga_cursor_definition_s cursor; uint32_t cmd_start; uint32_t fence_arg; + uint32_t flags, num_pages; bool cmd_ignored; bool irq_pending =3D false; bool fifo_progress =3D false; @@ -961,6 +977,36 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s) =20 break; =20 + case SVGA_CMD_DEFINE_GMR2: + len -=3D 1; + if (len < 0) { + goto rewind; + } + args =3D 2; + goto badcmd; + + case SVGA_CMD_REMAP_GMR2: + len -=3D 5; + if (len < 0) { + goto rewind; + } + + vmsvga_fifo_read(s); /* gmrId */ + flags =3D vmsvga_fifo_read(s); + vmsvga_fifo_read(s); /* offsetPages */ + num_pages =3D vmsvga_fifo_read(s); + + if (flags & SVGA_REMAP_GMR2_VIA_GMR) { + /* Read single struct SVGAGuestPtr */ + args =3D 2; + } else { + args =3D (flags & SVGA_REMAP_GMR2_SINGLE_PPN) ? 1 : num_pa= ges; + if (flags & SVGA_REMAP_GMR2_PPN64) + args *=3D 2; + } + + goto badcmd; + /* * Deprecated commands are neither documented in VMware SVGA devel= opment kit * nor in Linux kernel vmware-svga driver source code. @@ -1242,6 +1288,15 @@ static uint32_t vmsvga_value_read(void *opaque, uint= 32_t address) ret =3D s->irq_mask; break; =20 + /* Guest memory regions */ + case SVGA_REG_GMR_ID: + case SVGA_REG_GMR_DESCRIPTOR: + case SVGA_REG_GMR_MAX_IDS: + case SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH: + /* We don't support GMRs */ + ret =3D 0; + break; + default: if (s->index >=3D SVGA_SCRATCH_BASE && s->index < SVGA_SCRATCH_BASE + s->scratch_size) { --=20 1.9.1