From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0075.outbound.protection.outlook.com [104.47.42.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 93E1021DF808E for ; Mon, 28 Aug 2017 04:24:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=4nf9EgSTNhWD2VBcEq0T39BlloRrbo+i/6CpjjDSm+s=; b=dbnTh1/bmfPlB01ngvXFuplj62OJdmE/llM1dlSBKZqlanagSMUUiSJitv2/bRKCSvR/m1CDLpE+xN2m3GxtKROgP5sOcywPxSuK9P92G2r4gaOwp1TuZRPkAIouW6WZcpQKj1s7NVd5da+/jFuRUcNwJ8dbT9a9BCPu2VPHs7U= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from brijesh-build-machine.amd.com (165.204.77.1) by DM2PR12MB0155.namprd12.prod.outlook.com (2a01:111:e400:50ce::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1362.18; Mon, 28 Aug 2017 11:27:02 +0000 From: Brijesh Singh To: edk2-devel@lists.01.org Cc: Brijesh Singh , Ard Biesheuvel , Jordan Justen , Tom Lendacky , Laszlo Ersek Date: Mon, 28 Aug 2017 07:26:48 -0400 Message-Id: <1503919610-26185-2-git-send-email-brijesh.singh@amd.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503919610-26185-1-git-send-email-brijesh.singh@amd.com> References: <1503919610-26185-1-git-send-email-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: DM5PR20CA0011.namprd20.prod.outlook.com (2603:10b6:3:93::21) To DM2PR12MB0155.namprd12.prod.outlook.com (2a01:111:e400:50ce::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 39de1b10-23bb-4350-7d43-08d4ee07b45e X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DM2PR12MB0155; X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0155; 3:LeE7kxcdPv/qCDUNbx9esfMh5R39T2QvFADEeSWFMsaF1uMrNsXJcM7UYX/NVf0lFNqc8V2nimCAATawW5VBbg+gl1KBooWIBQitlD2nXPL4Cp9mJXk7xjt0xDVNFH1GsuBTP1FbR9rIOsgvBE/J2Hc6L+SveQ0TaWz/a/UrfSLpFQTDeglMQIbms+hnDN6JVHlgSFU54kzJaCS+gxSjaannb+9gYIN6coTvWGCeeMYAAS7VH6lf7iMPnDhEXo1t; 25:v4xHBjogND38aMRlhMI+ZGzVdv01prAomEC0UtA9vCcmCJTl6JQYQHQV9S5PO/PDenNWvH9MC/xSJyN8Jj1YLBp65Uaq83w8zCIvTkcnIb472Da9G9XX/tCxs+SNr6qb3wYyKFST0uSB+IRyFv8TCUC7BBUuzE3QQPD5I2zi2gGuA2FyCCj5142ZyjqyouxA82hXb8UVYhuK16TA93oqeOtueuksqngTv/2clxnsRmGHUC2icctfzXYY55IHW8Fe3LaBNEf+catTWx5EzRxs9DbLVm8V/CMwX2vmgJcXjMiItKU0F5GY2oGZlqvW9Yit9hGfPgLwJLnUNz5xfROHlA==; 31:Uv2q65wINvbsBQeHkkE9hxFhJxNB391VEA4uF61p9h0V34rACmUj6vPriz1K1buKvDWnsPaXkjfh8dDk4w1GBUCWoC+m0WiO/Tqay908Ecr1xoM2miq4vYkaMVpt2ghslN0eabf/8hI+QJp2Jcr2+TDz8cxQnGIpdXpvs+I9eM8K39BtmFbTA6/3I9Gk4b4CRic95bLOf/dJYrB7KvS5ZxHiHAnZQGD3Eq3ZX5g8Qts= X-MS-TrafficTypeDiagnostic: DM2PR12MB0155: X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0155; 20:5Kit2HNaZruRA3tXPQb3aY5A+5fiuhiUqm1OGOlxWXKkKeAhoU0cgdBhyh6LpQBrFWv3z6+FSv8ivzojXG4aroX8nElPf/DHGbTL+GVl931w/iVk6U4W3+zBybafCYwQaD0x5+1TXFgkReZ7rVD5FpK3zNKuyapOKrmIYjFOc+5kbQooBS6Oqjs5CyPYBHkYroLFvFMd8pBO3p0ub0D9/POqNyh8Otrm+bDc/R9DbbzpzQ7ZiZCg23JbmvBSuNAS1aCR4lTltz57mltxsQnUA9vOoBp1J7rts5phV2T4LoFwPp3+oK6SmP4QTRN6PGMIiQgzqC0d8WSwAE224aS8FlXm/kKc2ugVuctFml1BH4ubL3Fonz4KR000EaR/FyzWWFdE3aFCcBJXFsIfYmh91zubzZgdaebLbtBi10FU4ucP+09NYWnZia84h7pbm9hYjeHfrdTom9cXeGRxt4bVXTBOdo5Zk53gu20tI7ynvKM8qFJ9myZUOLJ3dmOrbr3t; 4:Clu0E3QYMxt4wfF85Lasn525x16r3+RJ5Vihq1fS7DIkB5MlWJ5CSu/uCvETYbbq2DRUBxDN7hHghI7zSazW0YBG28L99a5NOQ6DCjL7Qmcv1ubN7uLBs8y32ZmiC2SL7XrPXTLoP9qqPe0T/8VouvmUPy5Hmcq/J1qc8ZkezqfDsVapCGfvRkE/kYfwLneiofvhbrS78YD9rgHjYITNlRmOLsrPjShcKlC4Mgjp6l8cKlw1dxiKK/mHJbVPpxM5SKUNaRPnEAO6rT5tn/cDaocrO4gON/vFL51C8iwn1BUwTFGTzLaocFY2eN5ZYpzMi5G96WiJNb5YvP67++AxFw== X-Exchange-Antispam-Report-Test: UriScan:(767451399110)(228905959029699); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(3002001)(6055026)(6041248)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123558100)(20161123562025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM2PR12MB0155; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM2PR12MB0155; X-Forefront-PRVS: 0413C9F1ED X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6009001)(39860400002)(189002)(199003)(51234002)(7350300001)(478600001)(66066001)(6666003)(110136004)(86362001)(101416001)(47776003)(189998001)(54906002)(5003940100001)(305945005)(68736007)(7736002)(3846002)(97736004)(6116002)(106356001)(48376002)(50466002)(36756003)(6486002)(2950100002)(105586002)(2906002)(4326008)(33646002)(50226002)(42186005)(2351001)(6916009)(53416004)(25786009)(76176999)(8676002)(81156014)(2361001)(50986999)(5660300001)(53936002)(81166006); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR12MB0155; H:brijesh-build-machine.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR12MB0155; 23:Ha5kZzno/RULlJ3tgKEFdjrVv15t5vC/PRIYRcrj1?= =?us-ascii?Q?WXfx/ZQlYT9SDjZCGT2YjJIR9PTEdfX45rQsNFjkV60ydL4R0qegLNNk5Jkd?= =?us-ascii?Q?+l4jLQzfbtEBSoeFhp/Je4avLWV7gu6OvFPGqDwY0PhEt5wMDzZKwlyUT6xJ?= =?us-ascii?Q?lbfCVxOGkVP8qd/cNpeyyeMvvQDyNZgDxg5DI7wYwX3jPDHdulNHXBl5DCK2?= =?us-ascii?Q?mbni1mA6A6hFVsNY8RZcLb0S+nFI52AZkJtPjvvYcCE6Obv7lwuEDbMouYBr?= =?us-ascii?Q?8AXYk6iY1oTT77ZBDAQY818VJGc1daEvsBQPklQluRReATnYpcwogljlsVgr?= =?us-ascii?Q?qvf8AxMkGcnb52JYlPEDEEsviAOJDoykLbCOxQvlZMwjpNt7pYWvAOMeXeTE?= =?us-ascii?Q?E4kYB9TPB/qaauKrtbhoAJhH1TOj23euS+p5+VQ3GIHRJOdF301MI4M5cBcF?= =?us-ascii?Q?zpSWKLN/gLZzMEXeoSw8z3dEn5xJKyP/dUqlmvTJznr3HB3kGaAiqLoqnVR0?= =?us-ascii?Q?xo1CSoFDuZihmJ2YyhhV2wOtvTZgBAGlZt491qeSeVvMBSvM4kpJ+NidWUqS?= =?us-ascii?Q?RJ92If1qX0yKpaLKlHjf1fOfYWXEVRqQbMx4yQgl9Ic17XT57O82RMDmjplY?= =?us-ascii?Q?CbjwSEvM014mhayPOahzPfZdwjjA6NV7rprhYsan9uLh65cNiW7+HESP+RS7?= =?us-ascii?Q?aoabP7E5HA0Q8UBbk+EsvcSLoFQ1vt6MXVFEbsjC63BhXTzRpzvUTa+tXI6f?= =?us-ascii?Q?/GB7r2NKq/3oYZqJlWGIrkwxxkj3IYLSJGvaicUTqNAi4ayW4GTtIBZ9mwpg?= =?us-ascii?Q?+kMqcTtsR38nysZYptzhIMNeWXB5xx+o3RKVMUaAk6ejK8AW1JMw1mDwCUkg?= =?us-ascii?Q?FpP+JkdyNKt00ZgaAGAFAxhF+s7mJdBvPy3T2kuhpHuBEbl72zJOYoR3uP5f?= =?us-ascii?Q?3vJjz9TcmouoZxQx/QTH9LWJlgCENeU3Y+vId/5lkST3kxSSv9zU/vCJuMBo?= =?us-ascii?Q?jV59iIjGz1XRfJYTs1MoLKp5L4b4SGkD1kIRYDBRnigZGrxhfNEAfiB/j1ac?= =?us-ascii?Q?2yKuBwv+2GVfswFtI4XSt9ehmWpjTCNutzlt5UtGnU+e18DCul7cZqsGbfpa?= =?us-ascii?Q?nlFB2+HJ5rjP79vR/plLfybJmnkua3eflx++0o08OXthKX5CcGYz/Ysl6sbb?= =?us-ascii?Q?ZXkQ2QEQtK5sZI=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0155; 6:EUKEnFKwW3CTy2xztJNYMuLi/XoP//eumx6w0dCeuI2kjLG0clw/s3ZJ2CcBhjHobN+lruSRw70VP3L5k3XgBD7K9nbTbpWMTstGmLzKDpT2SNlznP7s/XF2efpo6RDcQ6WYo/01Rz1YPxbFSdwRH1o8JVrcVYsMqegtEE23rMarDworfU3EgSNd5wbpYGxGS8c1FNbbSmlHV9wenZMNs6Dw8Yri6+g4U9Wm/73xDfQOnTZGPeEDWhqOocGKDPnHeHOrEnmAORFyW+OQ1E38z/gRfPkFwYgKkPZQtTHH6BCoot8hb7XB5EwK3KRl6Qo3SNrQPGduWGo1c/QUIc3HsA==; 5:EnGHh/eaOEQ5wiCRHqdX40n5WZ2heDf92woekl+hz5ZUe1RNUS2U0y1loyvUM9z3zva0UFo560a4xou5IGtDCzlHYSZJQ9bN8A17Je4O6HbhSrf2B0NSa+dt/SPGcrGK17R0zuQhpvvKUZ3e78cvQA==; 24:J9usNBlsgyv/rJHBAYYVCbFBp2FDIe/q+ul7zilzvT3XWkPAMKhr9CFlaIqiBeOA+CKhY18tPN4YIdoTU4c6cN/330puzITg+erG51jxUWo=; 7:vFFZzUVqA0AVpdfwAHuQADe+b0BauQLsH/Tsd9UuWdMM5NG9wvZdgcz8M85r+KH/lJl1gfX/00TwjO4etKg4nHbEZueKOEvQTuGXKaxGD9lES7+mv4QMmzsvbQUIxTg3NGi3LgNf5cHK7KmAtnMx39tvvwNw2bWULtaSeZP42jclpLRARudOFmhSJXS22Be2TuNrsptjTlXw+nN+c2Jm5Usg0ovSe5tvwVveWnAoX6E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0155; 20:iS9Zh4ZAhTBNIjzbRYfqpq2IHraawhETfXFxVHSVSuJ+KVcfGqVZq+zXB8guaScDE71c8Rz69ZfiyEQFAonJwcwjgav80wBvTWzYhsc0lwwJ4De6xyrv/yun05CMCgzT8iiP/LtOyroFGnEL/9o+oR/AMztBJbAyLR+rc1nBLEQZ66VA3jp3bH5HDbY/YgqOuOwJyDvERDP7Ad8TpfgzPwp1J+kEWvJIY7Ib9jJE6NRFdiT9uA6VWQzwa8Nl+Cts X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2017 11:27:02.2636 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR12MB0155 Subject: [PATCH 1/3] OvmfPkg/VirtioScsiDxe: map VRING using VirtioRingMap() X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Aug 2017 11:24:24 -0000 Content-Type: text/plain When device is behind the IOMMU then driver need to pass the device address when programing the bus master. The patch uses VirtioRingMap() to map the VRING system physical address to device address. Cc: Ard Biesheuvel Cc: Jordan Justen Cc: Tom Lendacky Cc: Laszlo Ersek Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Brijesh Singh --- OvmfPkg/VirtioScsiDxe/VirtioScsi.h | 1 + OvmfPkg/VirtioScsiDxe/VirtioScsi.c | 47 +++++++++++++++----- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/OvmfPkg/VirtioScsiDxe/VirtioScsi.h b/OvmfPkg/VirtioScsiDxe/VirtioScsi.h index 6d00567e8cb8..05a6bf567263 100644 --- a/OvmfPkg/VirtioScsiDxe/VirtioScsi.h +++ b/OvmfPkg/VirtioScsiDxe/VirtioScsi.h @@ -60,6 +60,7 @@ typedef struct { VRING Ring; // VirtioRingInit 2 EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; // VirtioScsiInit 1 EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; // VirtioScsiInit 1 + VOID *RingMap; // VirtioRingMap 2 } VSCSI_DEV; #define VIRTIO_SCSI_FROM_PASS_THRU(PassThruPointer) \ diff --git a/OvmfPkg/VirtioScsiDxe/VirtioScsi.c b/OvmfPkg/VirtioScsiDxe/VirtioScsi.c index a983b3df7b9c..5e72b1a24b59 100644 --- a/OvmfPkg/VirtioScsiDxe/VirtioScsi.c +++ b/OvmfPkg/VirtioScsiDxe/VirtioScsi.c @@ -707,7 +707,7 @@ VirtioScsiInit ( { UINT8 NextDevStat; EFI_STATUS Status; - + UINT64 RingBaseShift; UINT64 Features; UINT16 MaxChannel; // for validation only UINT32 NumQueues; // for validation only @@ -839,25 +839,42 @@ VirtioScsiInit ( } // + // If anything fails from here on, we must release the ring resources + // + Status = VirtioRingMap ( + Dev->VirtIo, + &Dev->Ring, + &RingBaseShift, + &Dev->RingMap + ); + if (EFI_ERROR (Status)) { + goto ReleaseQueue; + } + + // // Additional steps for MMIO: align the queue appropriately, and set the - // size. If anything fails from here on, we must release the ring resources. + // size. If anything fails from here on, we must unmap the ring resources. // Status = Dev->VirtIo->SetQueueNum (Dev->VirtIo, QueueSize); if (EFI_ERROR (Status)) { - goto ReleaseQueue; + goto UnmapQueue; } Status = Dev->VirtIo->SetQueueAlign (Dev->VirtIo, EFI_PAGE_SIZE); if (EFI_ERROR (Status)) { - goto ReleaseQueue; + goto UnmapQueue; } // // step 4c -- Report GPFN (guest-physical frame number) of queue. // - Status = Dev->VirtIo->SetQueueAddress (Dev->VirtIo, &Dev->Ring, 0); + Status = Dev->VirtIo->SetQueueAddress ( + Dev->VirtIo, + &Dev->Ring, + RingBaseShift + ); if (EFI_ERROR (Status)) { - goto ReleaseQueue; + goto UnmapQueue; } // @@ -867,7 +884,7 @@ VirtioScsiInit ( Features &= ~(UINT64)VIRTIO_F_VERSION_1; Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); if (EFI_ERROR (Status)) { - goto ReleaseQueue; + goto UnmapQueue; } } @@ -877,11 +894,11 @@ VirtioScsiInit ( // Status = VIRTIO_CFG_WRITE (Dev, CdbSize, VIRTIO_SCSI_CDB_SIZE); if (EFI_ERROR (Status)) { - goto ReleaseQueue; + goto UnmapQueue; } Status = VIRTIO_CFG_WRITE (Dev, SenseSize, VIRTIO_SCSI_SENSE_SIZE); if (EFI_ERROR (Status)) { - goto ReleaseQueue; + goto UnmapQueue; } // @@ -890,7 +907,7 @@ VirtioScsiInit ( NextDevStat |= VSTAT_DRIVER_OK; Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { - goto ReleaseQueue; + goto UnmapQueue; } // @@ -926,6 +943,9 @@ VirtioScsiInit ( return EFI_SUCCESS; +UnmapQueue: + Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RingMap); + ReleaseQueue: VirtioRingUninit (Dev->VirtIo, &Dev->Ring); @@ -965,6 +985,7 @@ VirtioScsiUninit ( Dev->MaxLun = 0; Dev->MaxSectors = 0; + Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RingMap); VirtioRingUninit (Dev->VirtIo, &Dev->Ring); SetMem (&Dev->PassThru, sizeof Dev->PassThru, 0x00); @@ -995,6 +1016,12 @@ VirtioScsiExitBoot ( // Dev = Context; Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0); + + // + // Unmap the ring buffer so that hypervisor will not be able to get + // readable data after device reset. + // + Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RingMap); } -- 2.7.4