From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web09.9044.1644994352432905236 for ; Tue, 15 Feb 2022 22:52:32 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=ey/AUUPD; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644994352; x=1676530352; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=+YD5l1pwYUSmNYlj2gca0i+sD1LVsxD9kP4qNVdkS2E=; b=ey/AUUPDTf+QdUIqeuMu/Trjpd+8M5oOWN2QKZdE8+J6ANl2ogf1mJzP 8v2Nkw0iYrRaJoYvMt9r9PKliLcwbNLJEAypqhdwkx0R/SKc6kjtGg0uL TsurvNzu/0AzBHqYSQRSu8jNSMl2FiGORrmM1/zqepwopD1g42B0FVLJy j7evloEfw187rko1mPJkTzuAiI85bLyrDZs+Jkktz3hZNm1hwiOLW3ls7 27dWDjLYn4+YGRARWxCMQ0uKG3YjCQTMDMMTW15YfYVH7InOCAw+kEXXz C4K8HHQ3xErsqFbV2QwmfEllr6qBBYCv+BjECywfl+bM7NAN99ikba9L/ A==; X-IronPort-AV: E=McAfee;i="6200,9189,10259"; a="231163805" X-IronPort-AV: E=Sophos;i="5.88,373,1635231600"; d="scan'208";a="231163805" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Feb 2022 22:52:31 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,373,1635231600"; d="scan'208";a="776258073" Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19]) by fmsmga005.fm.intel.com with ESMTP; 15 Feb 2022 22:52:31 -0800 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 15 Feb 2022 22:52:31 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Tue, 15 Feb 2022 22:52:31 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.172) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Tue, 15 Feb 2022 22:52:30 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gxUaIZfNsFK9Qg6nWjuXA9zWqsOV9GM0rwJ1q6QJ6QhTxTiJ7sjjyfYrTSq3w1xNLjHXTiMC1InL70Udtc7XVf4bUEY3aX8Fvv/KPynQ9DH42kcpQDTG12KnHXMqfo/ur/Ay+CZp12CmEQ1D1azrJSs2RN5QEc2Zc4NeuBhrhfIDy1I34ktFI+0Ge0WGz4vUN8lkaaQq+321ijP9R3VE9w0MQviB/M1K8SXKV4WwM2HpUslmxkW9z7wFPG9PqgXqVBzhX1Uc+eSt+RNeuSSopL00GRAfwLVheFW0rX6npLWYDP2vjAet094XEk7Rrh6166GUYDbjwaG1rV6zEafy+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Y2CUgXkSgZZWvyAAy60/fwhk8yWCU6P6IjWctIX9VCs=; b=m3+JrRwC1cgSbx/ZLeKrxYHB4XjRN8XzTXBQpg35E4D/ZrMoelTYM1EU+SoFLnfe9HF88zx920HMYmud4ltXzS+V42BTS3zpTMgMkhzlcNxLIMQjHoomOTyh8Xa0+DPdYqHc80icrb8RFCkPj7nB5QjjRvBbQLr1Nf488sNnA1e8wJTXdRP1estNyX9TVuDGoh6iRoV2JU1mObFT0wEGWE0pq7D5ZIBbaEmboV9zdQzmaD6Yp9jP2UqAb72m+Ap31R+0hKX8SaHcSjpAh8dFywV8GgSW8olj0bQOAANDgUo2Le2P+B6hsDowGyvpHEtaEf6W4kBAAqFhIxlTslacSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from MWHPR11MB1631.namprd11.prod.outlook.com (2603:10b6:301:10::10) by SN6PR11MB3199.namprd11.prod.outlook.com (2603:10b6:805:be::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4975.14; Wed, 16 Feb 2022 06:52:29 +0000 Received: from MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::e0fb:ec1d:4e67:375f]) by MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::e0fb:ec1d:4e67:375f%8]) with mapi id 15.20.4975.019; Wed, 16 Feb 2022 06:52:28 +0000 From: "Ni, Ray" To: "Sindhu, Deepthi" CC: "Wu, Hao A" , "jbrasen@nvidia.com" , "devel@edk2.groups.io" Subject: Re: [edk2-devel] [PATCH v2] MdeModulePkg/NonDiscoverablePciDeviceDxe: Allow partial FreeBuffer Thread-Topic: [edk2-devel] [PATCH v2] MdeModulePkg/NonDiscoverablePciDeviceDxe: Allow partial FreeBuffer Thread-Index: AQHYIdMdfklgORu4lkK8kq5bxG93qKyVvshw Date: Wed, 16 Feb 2022 06:52:28 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5b38b992-fb89-416b-2f59-08d9f118e5bc x-ms-traffictypediagnostic: SN6PR11MB3199:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2733; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DPejWfj4/3NV8hARSG3bap7kw5pcmPRrQ9caxTEtBjJ3lqqVMEoTLAVzcayxRUF2f4l/1ZZDuA9Hs7R97Tmjiz3nQGtwbAq0OlzTnAwe7sN9xnMPPmYy6TFg1yFn1HxkDL77zZb4xHJigjh9qrGmI87LPfPfCYWeLtoMrSvjlJH9KnE2XTbJe7zKcE7BWA1FcPKJxS/MtwO7QVP3vtOQMZGFt8uOzZj3Qzghx/4YCP3CFVtqrotHudpE25UF4j/zrlztyayL5L/pxr+5WeLJaLTDZWKbXwqiwdw20SN5IPEoiFZ3jeS/qeS1pyitxLNvLt6K1qPe1V+YNRAY6/1tBiIKOhiJhZEDNyczz0JuhX4qXOdDEuyMOj/8T9Zb0IfUVx/+vooOS3JbZSZJBv0+qhEx+AUyxLn445lGeYmRFLHzcOKZXuPAuxBKtwXWFoNQs1FWSHW+yIg8IEMRwZEjS7aVKoUGl/g2ZYaYFmNeDg85/Rcl7YfxZHXTNcB3MaQ4N1b0wGArQDZwvRzpmHOTDUvRe93HT/x9l2at6OzvDKXql9MNqrDzShVCSsyGtxutXGnlfw5BUlQBNgQKMWeE0w11lF+EAmYVthWalbMTdIMGW/Za8o8s9D7vxSz8+IfgVHpQjce6BILarmSh7rSCf977PB+AH337SlH2yn6b+ByztyntDkKGRRvkAMPkpBSJdNrVmfjU0MXF+EbCICTQeu3J6/shP01EDqd3htaIgWv9exziKsjb2v0YPAJRzHL7nF1G7Wq4v22YCwdPupm6f1m6TqjdiLBhYhv+ByBn/kzSZA0R+2KgNkCmwyU5xR8TI0AUm2w7r7g271x2/JIOv6PMF7Inea4/pkL9piTTq/Y= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1631.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(76116006)(26005)(66556008)(66476007)(66446008)(71200400001)(53546011)(83380400001)(5660300002)(7696005)(66946007)(4326008)(9686003)(54906003)(86362001)(38070700005)(6506007)(316002)(64756008)(55016003)(33656002)(6636002)(186003)(82960400001)(8936002)(38100700002)(508600001)(122000001)(2906002)(966005)(52536014)(8676002)(6862004)(213903007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?GQQQuw5KOi8/mMvHSaduI++XgJDww/kjfco73aI1cOihni05iz11hTrG3PKh?= =?us-ascii?Q?z6DJgT8Ck/s29BBNJ0iUcr9LNX9tmTow0MK8UJGSAzgvjPNe04sBdKvsLR6n?= =?us-ascii?Q?04rvVjongcTYl2/d4imx+On3yULBNK1qWyuazuRyte6ue8HwunCMzbzO8Vw3?= =?us-ascii?Q?B4lg92on1J/21lGho5DeZwod2icMTIYsWO653GSubg2XUAAS00FjSa5DiD0o?= =?us-ascii?Q?xgy6r6FfwBVP8O3rrkckxfaockvwffBf9fU1F0qRguQpKiPNuqxfqOpBNlRO?= =?us-ascii?Q?Su1fxVWnaYpxKrg0an8RPxc9sCJpd5drgxpxRaAeDfu4jjZFx8XofJDHNv67?= =?us-ascii?Q?0VDc+gLbMAt+YiKoEpDV5LKw3g/An9X3gGR7RMVs/5PrvMfwY5bjq2d6OyOS?= =?us-ascii?Q?PTdVDqJ+r4mUY7oYaXISDL8ZiErh4xNvuZcm3nTPcPY+eMKRJoPL2Aoz1jiJ?= =?us-ascii?Q?+3IJYBlNpX/G8A799qoTHOxvQbAvZHU9jYW9scW7DEIZuVF1+2Nk7fPMwnHF?= =?us-ascii?Q?BrvfOlbGkx//J9y/TXjWkd7Sl/pRdxKLFjFnL1zP2IbmB8E3b5Ge0+dIDtJv?= =?us-ascii?Q?JRpUiwA8YNF4Qold1WWkQ9L5nd9PqrvFd1uuOOXzu+IuweTmVeDqKUij3MBy?= =?us-ascii?Q?Rf+h/7EYtqCS42yQ48mGEnc/raQDin0YntHl7kwgWsdoLP7nt5Vuf6JWoF5Q?= =?us-ascii?Q?5nL5NdfIol3L1BWiouZ3enTdCeRwRpQ4jRiO7HCioIeaxJL6pAoxyx7FpmbZ?= =?us-ascii?Q?eITJJ1RWXIxb6PEw6/1YS8yody47VnZYtyWaGAjbuCR8F1m0AYp6LdgwS2Hj?= =?us-ascii?Q?Jwm8/tnfkPjtPd3DX4TqM3AdfPUxw+NjCz8xAwj7HwZnJX4KkkOqsSI8dMeQ?= =?us-ascii?Q?/MHBtsVRf1u6/0wczKKUBkoflZiBQftHvZJ5bqMLd1b+A4MSdZudyxZkISZN?= =?us-ascii?Q?+PW4rVv8q6e4JxxDzR3cbZb5GHXcAXnCs8A/WRukGsu19MPyZiEeo7E8pNH6?= =?us-ascii?Q?9YvIzAE7kUYztq/bkLTLXPvLmThBCqEPZBDl7A1S/7IE14VrfMjn2X5sgPnE?= =?us-ascii?Q?eDg/gHm7V9nxMU8FFLQfIQ/GO4b2ebyfkNKYVR2/GllGkcP9zy5RfYlrjye3?= =?us-ascii?Q?iHv1LcKjh+z7HCtqpWltSf4HiALmUbda8VY9reGe1EQCJXaqDMqFmpPquOgI?= =?us-ascii?Q?2OJvv10WpO33R4/MqmRD7jXtwa4X3GbJ8Z74gr0J8l5SIv7kVX/tnm4fFWW4?= =?us-ascii?Q?+4QcfrbZ6GwY4ZgBhV0DyAjM7xJyY7FBZCuevyw5V3pKBEP0LcBcs4PJESVD?= =?us-ascii?Q?+YduRVjce59n3YqTLD7aGFG42IijtP92Z/d1wXV93rRGVlptbVjjSiCea3Z2?= =?us-ascii?Q?Kkt2d7fLpVbY7ArS8Uau5mK8aBQCwZ1zL9ZDz+a/7gYgWTkbxhhtc0hvCJ3k?= =?us-ascii?Q?IDbCRmcgqG8Gc60jd8qDeSi0nHulgYOu4t7KcHnLTYyfchlWxUxzmo9Vixxh?= =?us-ascii?Q?iyBeqZVoNw3losKg4hK/dk81SGB/5FlQD3+Y1nFcpZi0ceqkqkFgkLxWGmar?= =?us-ascii?Q?YD4/01Mil1muUv8ybPfZFltESaCmQ9KvG5zM19fqMGaew3YyyZcWs82R8wT7?= =?us-ascii?Q?VjcfUW7g6+SusKl6HfVXmPc=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1631.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b38b992-fb89-416b-2f59-08d9f118e5bc X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Feb 2022 06:52:28.4522 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: o3BfPnC0TWrIy3Y8JoIGetzn/w0hvT6CaVDKEaB6imKjtMYzetezUtfger6RISm0xV0ONtYoWL2JRqxJ2BHRnA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3199 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Deepthi, Can you please help to review the changes and provide comments? Thanks, Ray -----Original Message----- From: devel@edk2.groups.io On Behalf Of Jeff Brasen = via groups.io Sent: Tuesday, February 15, 2022 2:46 AM To: devel@edk2.groups.io Cc: Wu, Hao A ; Ni, Ray ; Jeff Brasen= Subject: [edk2-devel] [PATCH v2] MdeModulePkg/NonDiscoverablePciDeviceDxe: = Allow partial FreeBuffer Add support for partial free of non cached buffers. If a request for less than the full size is requested new allocations for t= he remaining head and tail of the buffer are added to the list. Added verification that Buffer is EFI_PAGE_SIZE aligned. The XHCI driver does this if the page size for the controller is >4KB. Signed-off-by: Jeff Brasen --- .../NonDiscoverablePciDeviceIo.c | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverab= lePciDeviceIo.c b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDisco= verablePciDeviceIo.c index c1c5c6267c..77809cfedf 100644 --- a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDe= viceIo.c +++ b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePc +++ iDeviceIo.c @@ -960,12 +960,23 @@ NonCoherentPciIoFreeBuffer ( LIST_ENTRY *Entry; EFI_STATUS Status; NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *Alloc; + NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *AllocHead; =20 + NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *AllocTail; BOOLEAN Found; + UINTN StartPages; + UINTN EndPages; + + if (HostAddress !=3D ALIGN_POINTER (HostAddress, EFI_PAGE_SIZE)) { + ASSERT_EFI_ERROR (EFI_INVALID_PARAMETER); + return EFI_INVALID_PARAMETER; + } =20 Dev =3D NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This); =20 Found =3D FALSE; Alloc =3D NULL; + AllocHead =3D NULL; + AllocTail =3D NULL; =20 // // Find the uncached allocation list entry associated @@ -976,9 +987,13 = @@ NonCoherentPciIoFreeBuffer ( Entry =3D Entry->ForwardLink) { Alloc =3D BASE_CR (Entry, NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION,= List); - if ((Alloc->HostAddress =3D=3D HostAddress) && (Alloc->NumPages =3D=3D= Pages)) { + StartPages =3D 0; + if (Alloc->HostAddress < HostAddress) { + StartPages =3D (HostAddress - Alloc->HostAddress) / EFI_PAGE_SIZE; + } + if ((Alloc->HostAddress <=3D HostAddress) && (Alloc->NumPages >=3D=20 + (Pages + StartPages))) { // - // We are freeing the exact allocation we were given + // We are freeing at least part of what we were given // before by AllocateBuffer() // Found =3D TRUE; @@ -991,7 +1006,41 @@ NonCoherentPciIoFreeBuffer ( return EFI_NOT_FOUND; } =20 + EndPages =3D Alloc->NumPages - (Pages + StartPages); + + if (StartPages !=3D 0) { + AllocHead =3D AllocatePool (sizeof *AllocHead); + if (AllocHead =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + AllocHead->HostAddress =3D Alloc->HostAddress; + AllocHead->NumPages =3D StartPages; + AllocHead->Attributes =3D Alloc->Attributes; } + + if (EndPages !=3D 0) { + AllocTail =3D AllocatePool (sizeof *AllocTail); + if (AllocTail =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + AllocTail->HostAddress =3D Alloc->HostAddress + ((Pages + StartPages) = * EFI_PAGE_SIZE); + AllocTail->NumPages =3D EndPages; + AllocTail->Attributes =3D Alloc->Attributes; } + RemoveEntryList (&Alloc->List); + // + // Record this new sub allocations in the linked list, so we // can=20 + restore the memory space attributes later // if (AllocHead !=3D NULL)= =20 + { + InsertHeadList (&Dev->UncachedAllocationList, &AllocHead->List); } = =20 + if (AllocTail !=3D NULL) { + InsertHeadList (&Dev->UncachedAllocationList, &AllocTail->List); } =20 Status =3D gDS->SetMemorySpaceAttributes ( (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress, -- 2.17.1