From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x22a.google.com (mail-wm0-x22a.google.com [IPv6:2a00:1450:400c:c09::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 9ABA182170 for ; Thu, 23 Feb 2017 09:49:06 -0800 (PST) Received: by mail-wm0-x22a.google.com with SMTP id v77so36519035wmv.1 for ; Thu, 23 Feb 2017 09:49:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=JUKok2faHYNKdmKOmb4KtKRhqRZxSLyzBreX6RNFFi4=; b=WlmkpWI4UJqTXDriB9Vlyk4Y5FrNCp02Ey/4BUe0dU8atm5Gm36RLpcuqlQCkgJ7ml taBBA7vQ13fZPaZkNcRvF5Ih9OS1bMPLUK+BytBhTER7cEpus5I2P+oK6bpfghZAj7WY UJteYNYiLpe/Al21bP85spPjaHJrTR62iTOg8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=JUKok2faHYNKdmKOmb4KtKRhqRZxSLyzBreX6RNFFi4=; b=gDvunXrXQVKYTO4dI/aiybPEtnfkcLjDK0nHb7ibuXOzCjpyrL+82Hy9eX1sT4hF0l +qfnvBjSmApSaU9wM1ykztdy1Jp/gLRO79PkL11N/63Y7e7ot7XAmEC+Bkh5JMEENpSz 9uzUoAS+dnObynliDEBC3dlUdVbNp3/8pp1u+ZO/E0DJUFN9AE61rxSYllCYOTBlWa0q sMV4KDzir3KZt5tEZdgbvivvTAnYnVYnl/vElEh/lSJxwz4OpU30q31j9UExWwrJFrLu mo6QTP47jqg35DoPbQEAHBIwfuk1dO7359Tt8v69nSRSwuNovOD7Ua8z8f+7ttGUhyp5 YgvA== X-Gm-Message-State: AMke39nPnuH3YAf1Ff78l52ga3+gv4rDnXRoa0dpU2coAPSO6gttggLgxFMoPbO4EkjI8zj9 X-Received: by 10.28.143.5 with SMTP id r5mr5967694wmd.141.1487872144799; Thu, 23 Feb 2017 09:49:04 -0800 (PST) Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id i29sm6912014wrc.64.2017.02.23.09.49.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 23 Feb 2017 09:49:04 -0800 (PST) Date: Thu, 23 Feb 2017 17:49:02 +0000 From: Leif Lindholm To: Ard Biesheuvel Cc: edk2-devel@lists.01.org, lersek@redhat.com, ryan.harkin@linaro.org Message-ID: <20170223174902.GX16034@bivouac.eciton.net> References: <1487864885-13485-1-git-send-email-ard.biesheuvel@linaro.org> MIME-Version: 1.0 In-Reply-To: <1487864885-13485-1-git-send-email-ard.biesheuvel@linaro.org> User-Agent: Mutt/1.5.23 (2014-03-12) Subject: Re: [PATCH 1/2] ArmPkg: remove DebugUncachedMemoryAllocationLib X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Feb 2017 17:49:07 -0000 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Feb 23, 2017 at 03:48:04PM +0000, Ard Biesheuvel wrote: > The debug implementation of the UncachedMemoryAllocationLib library > class relies on the creation of an uncached alias of a memory range, > while keeping the original cached mapping, but with read-only attributes > to trap inadvertent write accesses. > > This is not a terribly good idea, given that the ARM architecture does > not allow mismatched attributes, and so creating them deliberately is > not something we should encourage by doing it in reference code. Agreed. One comment near the end: > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel > --- > ArmPkg/ArmPkg.dsc | 1 - > ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.c | 656 -------------------- > ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf | 47 -- > ArmVirtPkg/ArmVirt.dsc.inc | 2 - > BeagleBoardPkg/BeagleBoardPkg.dsc | 1 - > Omap35xxPkg/Omap35xxPkg.dsc | 3 +- > 6 files changed, 1 insertion(+), 709 deletions(-) > > diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc > index 0db33eb865b1..1a490d23f7b5 100644 > --- a/ArmPkg/ArmPkg.dsc > +++ b/ArmPkg/ArmPkg.dsc > @@ -112,7 +112,6 @@ [Components.common] > ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf > ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf > ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf > - ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf > ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf > ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf > ArmPkg/Library/SemiHostingDebugLib/SemiHostingDebugLib.inf > diff --git a/ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.c b/ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.c > deleted file mode 100644 > index 00e01a905c85..000000000000 > --- a/ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.c > +++ /dev/null > @@ -1,656 +0,0 @@ > -/** @file > - Debug version of the UncachedMemoryAllocation lib that uses the VirtualUncachedPages > - protocol, produced by the DXE CPU driver, to produce debuggable uncached memory buffers. > - > - The DMA rules for EFI contain the concept of a PCI (DMA master) address for memory and > - a CPU (C code) address for the memory buffer that don't have to be the same. There seem to > - be common errors out there with folks mixing up the two addresses. This library causes > - the PCI (DMA master) address to not be mapped into system memory so if the CPU (C code) > - uses the wrong pointer it will generate a page fault. The CPU (C code) version of the buffer > - has a virtual address that does not match the physical address. The virtual address has > - PcdArmUncachedMemoryMask ored into the physical address. > - > - Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.
> - > - This program and the accompanying materials > - are licensed and made available under the terms and conditions of the BSD License > - which accompanies this distribution. The full text of the license may be found at > - http://opensource.org/licenses/bsd-license.php > - > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > - > -**/ > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > -#include > -#include > - > -VOID * > -UncachedInternalAllocatePages ( > - IN EFI_MEMORY_TYPE MemoryType, > - IN UINTN Pages > - ); > - > -VOID * > -UncachedInternalAllocateAlignedPages ( > - IN EFI_MEMORY_TYPE MemoryType, > - IN UINTN Pages, > - IN UINTN Alignment > - ); > - > - > - > -EFI_CPU_ARCH_PROTOCOL *gDebugUncachedCpu; > -VIRTUAL_UNCACHED_PAGES_PROTOCOL *gVirtualUncachedPages; > - > -// > -// Assume all of memory has the same cache attributes, unless we do our magic > -// > -UINT64 gAttributes; > - > -typedef struct { > - VOID *Buffer; > - VOID *Allocation; > - UINTN Pages; > - LIST_ENTRY Link; > -} FREE_PAGE_NODE; > - > -LIST_ENTRY mPageList = INITIALIZE_LIST_HEAD_VARIABLE (mPageList); > - > -VOID > -AddPagesToList ( > - IN VOID *Buffer, > - IN VOID *Allocation, > - UINTN Pages > - ) > -{ > - FREE_PAGE_NODE *NewNode; > - > - NewNode = AllocatePool (sizeof (LIST_ENTRY)); > - if (NewNode == NULL) { > - ASSERT (FALSE); > - return; > - } > - > - NewNode->Buffer = Buffer; > - NewNode->Allocation = Allocation; > - NewNode->Pages = Pages; > - > - InsertTailList (&mPageList, &NewNode->Link); > -} > - > - > -VOID > -RemovePagesFromList ( > - IN VOID *Buffer, > - OUT VOID **Allocation, > - OUT UINTN *Pages > - ) > -{ > - LIST_ENTRY *Link; > - FREE_PAGE_NODE *OldNode; > - > - *Allocation = NULL; > - *Pages = 0; > - > - for (Link = mPageList.ForwardLink; Link != &mPageList; Link = Link->ForwardLink) { > - OldNode = BASE_CR (Link, FREE_PAGE_NODE, Link); > - if (OldNode->Buffer == Buffer) { > - *Allocation = OldNode->Allocation; > - *Pages = OldNode->Pages; > - > - RemoveEntryList (&OldNode->Link); > - FreePool (OldNode); > - return; > - } > - } > - > - return; > -} > - > - > - > -EFI_PHYSICAL_ADDRESS > -ConvertToPhysicalAddress ( > - IN VOID *VirtualAddress > - ) > -{ > - UINTN UncachedMemoryMask = (UINTN)PcdGet64 (PcdArmUncachedMemoryMask); > - UINTN PhysicalAddress; > - > - PhysicalAddress = (UINTN)VirtualAddress & ~UncachedMemoryMask; > - > - return (EFI_PHYSICAL_ADDRESS)PhysicalAddress; > -} > - > - > -VOID * > -ConvertToUncachedAddress ( > - IN VOID *Address > - ) > -{ > - UINTN UncachedMemoryMask = (UINTN)PcdGet64 (PcdArmUncachedMemoryMask); > - UINTN UncachedAddress; > - > - UncachedAddress = (UINTN)Address | UncachedMemoryMask; > - > - return (VOID *)UncachedAddress; > -} > - > - > - > -VOID * > -UncachedInternalAllocatePages ( > - IN EFI_MEMORY_TYPE MemoryType, > - IN UINTN Pages > - ) > -{ > - return UncachedInternalAllocateAlignedPages (MemoryType, Pages, EFI_PAGE_SIZE); > -} > - > - > -VOID * > -EFIAPI > -UncachedAllocatePages ( > - IN UINTN Pages > - ) > -{ > - return UncachedInternalAllocatePages (EfiBootServicesData, Pages); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateRuntimePages ( > - IN UINTN Pages > - ) > -{ > - return UncachedInternalAllocatePages (EfiRuntimeServicesData, Pages); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateReservedPages ( > - IN UINTN Pages > - ) > -{ > - return UncachedInternalAllocatePages (EfiReservedMemoryType, Pages); > -} > - > - > - > -VOID > -EFIAPI > -UncachedFreePages ( > - IN VOID *Buffer, > - IN UINTN Pages > - ) > -{ > - UncachedFreeAlignedPages (Buffer, Pages); > - return; > -} > - > - > -VOID * > -UncachedInternalAllocateAlignedPages ( > - IN EFI_MEMORY_TYPE MemoryType, > - IN UINTN Pages, > - IN UINTN Alignment > - ) > -{ > - EFI_STATUS Status; > - EFI_PHYSICAL_ADDRESS Memory; > - EFI_PHYSICAL_ADDRESS AlignedMemory; > - UINTN AlignmentMask; > - UINTN UnalignedPages; > - UINTN RealPages; > - > - // > - // Alignment must be a power of two or zero. > - // > - ASSERT ((Alignment & (Alignment - 1)) == 0); > - > - if (Pages == 0) { > - return NULL; > - } > - if (Alignment > EFI_PAGE_SIZE) { > - // > - // Caculate the total number of pages since alignment is larger than page size. > - // > - AlignmentMask = Alignment - 1; > - RealPages = Pages + EFI_SIZE_TO_PAGES (Alignment); > - // > - // Make sure that Pages plus EFI_SIZE_TO_PAGES (Alignment) does not overflow. > - // > - ASSERT (RealPages > Pages); > - > - Status = gBS->AllocatePages (AllocateAnyPages, MemoryType, RealPages, &Memory); > - if (EFI_ERROR (Status)) { > - return NULL; > - } > - AlignedMemory = ((UINTN) Memory + AlignmentMask) & ~AlignmentMask; > - UnalignedPages = EFI_SIZE_TO_PAGES (AlignedMemory - (UINTN) Memory); > - if (UnalignedPages > 0) { > - // > - // Free first unaligned page(s). > - // > - Status = gBS->FreePages (Memory, UnalignedPages); > - ASSERT_EFI_ERROR (Status); > - } > - Memory = (EFI_PHYSICAL_ADDRESS) (AlignedMemory + EFI_PAGES_TO_SIZE (Pages)); > - UnalignedPages = RealPages - Pages - UnalignedPages; > - if (UnalignedPages > 0) { > - // > - // Free last unaligned page(s). > - // > - Status = gBS->FreePages (Memory, UnalignedPages); > - ASSERT_EFI_ERROR (Status); > - } > - } else { > - // > - // Do not over-allocate pages in this case. > - // > - Status = gBS->AllocatePages (AllocateAnyPages, MemoryType, Pages, &Memory); > - if (EFI_ERROR (Status)) { > - return NULL; > - } > - AlignedMemory = (UINTN) Memory; > - } > - > - Status = gVirtualUncachedPages->ConvertPages (gVirtualUncachedPages, AlignedMemory, Pages * EFI_PAGE_SIZE, PcdGet64 (PcdArmUncachedMemoryMask), &gAttributes); > - if (EFI_ERROR (Status)) { > - return NULL; > - } > - > - AlignedMemory = (EFI_PHYSICAL_ADDRESS)(UINTN)ConvertToUncachedAddress ((VOID *)(UINTN)AlignedMemory); > - > - return (VOID *)(UINTN)AlignedMemory; > -} > - > - > -VOID > -EFIAPI > -UncachedFreeAlignedPages ( > - IN VOID *Buffer, > - IN UINTN Pages > - ) > -{ > - EFI_STATUS Status; > - EFI_PHYSICAL_ADDRESS Memory; > - > - ASSERT (Pages != 0); > - > - Memory = ConvertToPhysicalAddress (Buffer); > - > - Status = gVirtualUncachedPages->RevertPages (gVirtualUncachedPages, Memory, Pages * EFI_PAGE_SIZE, PcdGet64 (PcdArmUncachedMemoryMask), gAttributes); > - > - > - Status = gBS->FreePages ((EFI_PHYSICAL_ADDRESS) (UINTN) Memory, Pages); > - ASSERT_EFI_ERROR (Status); > -} > - > - > - > - > -VOID * > -UncachedInternalAllocateAlignedPool ( > - IN EFI_MEMORY_TYPE PoolType, > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - VOID *AlignedAddress; > - > - // > - // Alignment must be a power of two or zero. > - // > - ASSERT ((Alignment & (Alignment - 1)) == 0); > - > - if (Alignment < EFI_PAGE_SIZE) { > - Alignment = EFI_PAGE_SIZE; > - } > - > - AlignedAddress = UncachedInternalAllocateAlignedPages (PoolType, EFI_SIZE_TO_PAGES (AllocationSize), Alignment); > - if (AlignedAddress == NULL) { > - return NULL; > - } > - > - AddPagesToList ((VOID *)(UINTN)ConvertToPhysicalAddress (AlignedAddress), (VOID *)(UINTN)AlignedAddress, EFI_SIZE_TO_PAGES (AllocationSize)); > - > - return (VOID *) AlignedAddress; > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedPool ( > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedPool (EfiBootServicesData, AllocationSize, Alignment); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedRuntimePool ( > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedPool (EfiRuntimeServicesData, AllocationSize, Alignment); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedReservedPool ( > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedPool (EfiReservedMemoryType, AllocationSize, Alignment); > -} > - > -VOID * > -UncachedInternalAllocateAlignedZeroPool ( > - IN EFI_MEMORY_TYPE PoolType, > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - VOID *Memory; > - Memory = UncachedInternalAllocateAlignedPool (PoolType, AllocationSize, Alignment); > - if (Memory != NULL) { > - Memory = ZeroMem (Memory, AllocationSize); > - } > - return Memory; > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedZeroPool ( > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedZeroPool (EfiBootServicesData, AllocationSize, Alignment); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedRuntimeZeroPool ( > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedZeroPool (EfiRuntimeServicesData, AllocationSize, Alignment); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedReservedZeroPool ( > - IN UINTN AllocationSize, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedZeroPool (EfiReservedMemoryType, AllocationSize, Alignment); > -} > - > -VOID * > -UncachedInternalAllocateAlignedCopyPool ( > - IN EFI_MEMORY_TYPE PoolType, > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer, > - IN UINTN Alignment > - ) > -{ > - VOID *Memory; > - > - ASSERT (Buffer != NULL); > - ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN) Buffer + 1)); > - > - Memory = UncachedInternalAllocateAlignedPool (PoolType, AllocationSize, Alignment); > - if (Memory != NULL) { > - Memory = CopyMem (Memory, Buffer, AllocationSize); > - } > - return Memory; > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedCopyPool ( > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedCopyPool (EfiBootServicesData, AllocationSize, Buffer, Alignment); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedRuntimeCopyPool ( > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer, Alignment); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateAlignedReservedCopyPool ( > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer, > - IN UINTN Alignment > - ) > -{ > - return UncachedInternalAllocateAlignedCopyPool (EfiReservedMemoryType, AllocationSize, Buffer, Alignment); > -} > - > -VOID > -EFIAPI > -UncachedFreeAlignedPool ( > - IN VOID *Buffer > - ) > -{ > - VOID *Allocation; > - UINTN Pages; > - > - RemovePagesFromList (Buffer, &Allocation, &Pages); > - > - UncachedFreePages (Allocation, Pages); > -} > - > -VOID * > -UncachedInternalAllocatePool ( > - IN EFI_MEMORY_TYPE MemoryType, > - IN UINTN AllocationSize > - ) > -{ > - UINTN CacheLineLength = ArmDataCacheLineLength (); > - return UncachedInternalAllocateAlignedPool (MemoryType, AllocationSize, CacheLineLength); > -} > - > -VOID * > -EFIAPI > -UncachedAllocatePool ( > - IN UINTN AllocationSize > - ) > -{ > - return UncachedInternalAllocatePool (EfiBootServicesData, AllocationSize); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateRuntimePool ( > - IN UINTN AllocationSize > - ) > -{ > - return UncachedInternalAllocatePool (EfiRuntimeServicesData, AllocationSize); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateReservedPool ( > - IN UINTN AllocationSize > - ) > -{ > - return UncachedInternalAllocatePool (EfiReservedMemoryType, AllocationSize); > -} > - > -VOID * > -UncachedInternalAllocateZeroPool ( > - IN EFI_MEMORY_TYPE PoolType, > - IN UINTN AllocationSize > - ) > -{ > - VOID *Memory; > - > - Memory = UncachedInternalAllocatePool (PoolType, AllocationSize); > - if (Memory != NULL) { > - Memory = ZeroMem (Memory, AllocationSize); > - } > - return Memory; > -} > - > -VOID * > -EFIAPI > -UncachedAllocateZeroPool ( > - IN UINTN AllocationSize > - ) > -{ > - return UncachedInternalAllocateZeroPool (EfiBootServicesData, AllocationSize); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateRuntimeZeroPool ( > - IN UINTN AllocationSize > - ) > -{ > - return UncachedInternalAllocateZeroPool (EfiRuntimeServicesData, AllocationSize); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateReservedZeroPool ( > - IN UINTN AllocationSize > - ) > -{ > - return UncachedInternalAllocateZeroPool (EfiReservedMemoryType, AllocationSize); > -} > - > -VOID * > -UncachedInternalAllocateCopyPool ( > - IN EFI_MEMORY_TYPE PoolType, > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer > - ) > -{ > - VOID *Memory; > - > - ASSERT (Buffer != NULL); > - ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN) Buffer + 1)); > - > - Memory = UncachedInternalAllocatePool (PoolType, AllocationSize); > - if (Memory != NULL) { > - Memory = CopyMem (Memory, Buffer, AllocationSize); > - } > - return Memory; > -} > - > -VOID * > -EFIAPI > -UncachedAllocateCopyPool ( > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer > - ) > -{ > - return UncachedInternalAllocateCopyPool (EfiBootServicesData, AllocationSize, Buffer); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateRuntimeCopyPool ( > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer > - ) > -{ > - return UncachedInternalAllocateCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer); > -} > - > -VOID * > -EFIAPI > -UncachedAllocateReservedCopyPool ( > - IN UINTN AllocationSize, > - IN CONST VOID *Buffer > - ) > -{ > - return UncachedInternalAllocateCopyPool (EfiReservedMemoryType, AllocationSize, Buffer); > -} > - > -VOID > -EFIAPI > -UncachedFreePool ( > - IN VOID *Buffer > - ) > -{ > - UncachedFreeAlignedPool (Buffer); > -} > - > -VOID > -EFIAPI > -UncachedSafeFreePool ( > - IN VOID *Buffer > - ) > -{ > - if (Buffer != NULL) { > - UncachedFreePool (Buffer); > - Buffer = NULL; > - } > -} > - > -/** > - The constructor function caches the pointer of DXE Services Table. > - > - The constructor function caches the pointer of DXE Services Table. > - It will ASSERT() if that operation fails. > - It will ASSERT() if the pointer of DXE Services Table is NULL. > - It will always return EFI_SUCCESS. > - > - @param ImageHandle The firmware allocated handle for the EFI image. > - @param SystemTable A pointer to the EFI System Table. > - > - @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. > - > -**/ > -EFI_STATUS > -EFIAPI > -DebugUncachedMemoryAllocationLibConstructor ( > - IN EFI_HANDLE ImageHandle, > - IN EFI_SYSTEM_TABLE *SystemTable > - ) > -{ > - EFI_STATUS Status; > - > - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&gDebugUncachedCpu); > - ASSERT_EFI_ERROR(Status); > - > - Status = gBS->LocateProtocol (&gVirtualUncachedPagesProtocolGuid, NULL, (VOID **)&gVirtualUncachedPages); > - ASSERT_EFI_ERROR(Status); > - > - return Status; > -} > - > - > - > diff --git a/ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf b/ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf > deleted file mode 100644 > index 213188ac2c39..000000000000 > --- a/ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf > +++ /dev/null > @@ -1,47 +0,0 @@ > -#/** @file > -# > -# > -# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.
> -# > -# This program and the accompanying materials > -# are licensed and made available under the terms and conditions of the BSD License > -# which accompanies this distribution. The full text of the license may be found at > -# http://opensource.org/licenses/bsd-license.php > -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > -# > -# > -#**/ > - > -[Defines] > - INF_VERSION = 0x00010005 > - BASE_NAME = UncachedMemoryAllocationLib > - FILE_GUID = 3C1EA826-696A-4E8A-B89D-3C5369B84F2A > - MODULE_TYPE = DXE_DRIVER > - VERSION_STRING = 1.0 > - LIBRARY_CLASS = UncachedMemoryAllocationLib > - CONSTRUCTOR = DebugUncachedMemoryAllocationLibConstructor > - > -[Sources.common] > - DebugUncachedMemoryAllocationLib.c > - > -[Packages] > - MdePkg/MdePkg.dec > - ArmPkg/ArmPkg.dec > - > - > -[LibraryClasses] > - BaseLib > - MemoryAllocationLib > - ArmLib > - > -[Protocols] > - gEfiCpuArchProtocolGuid > - gVirtualUncachedPagesProtocolGuid > - > -[FixedPcd] > - gArmTokenSpaceGuid.PcdArmUncachedMemoryMask > - > - > -[Depex] > - gEfiCpuArchProtocolGuid AND gVirtualUncachedPagesProtocolGuid > diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc > index c0d5e7c6aa6d..61d4a6642eb7 100644 > --- a/ArmVirtPkg/ArmVirt.dsc.inc > +++ b/ArmVirtPkg/ArmVirt.dsc.inc > @@ -28,10 +28,8 @@ [BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER] > [LibraryClasses.common] > !if $(TARGET) == RELEASE > DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf > - UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf This deletion is of a (not needed) non-Debug version (which is not described in the commit message). Could you add a note to that effect in there? With that: Reviewed-by: Leif Lindholm > !else > DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf > - UncachedMemoryAllocationLib|ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf > !endif > DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf > > diff --git a/BeagleBoardPkg/BeagleBoardPkg.dsc b/BeagleBoardPkg/BeagleBoardPkg.dsc > index b24db6cbfb04..a71a01ac7723 100644 > --- a/BeagleBoardPkg/BeagleBoardPkg.dsc > +++ b/BeagleBoardPkg/BeagleBoardPkg.dsc > @@ -49,7 +49,6 @@ [LibraryClasses.common] > !else > DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf > UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf > -# UncachedMemoryAllocationLib|ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf > !endif > DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf > > diff --git a/Omap35xxPkg/Omap35xxPkg.dsc b/Omap35xxPkg/Omap35xxPkg.dsc > index 9395570ccaa3..ad7d9898c330 100644 > --- a/Omap35xxPkg/Omap35xxPkg.dsc > +++ b/Omap35xxPkg/Omap35xxPkg.dsc > @@ -72,8 +72,7 @@ [LibraryClasses.common] > > UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf > > - # UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf > - UncachedMemoryAllocationLib|ArmPkg/Library/DebugUncachedMemoryAllocationLib/DebugUncachedMemoryAllocationLib.inf > + UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf > > CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf > > -- > 2.7.4 >