From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Lendacky Subject: Re: [PATCH v5 17/32] x86/mm: Add support to access boot related data in the clear Date: Tue, 30 May 2017 11:46:52 -0500 Message-ID: <754886ff-b502-3f68-3c32-5355d4176829@amd.com> References: <20170418211612.10190.82788.stgit@tlendack-t1.amdoffice.net> <20170418211921.10190.1537.stgit@tlendack-t1.amdoffice.net> <20170515183517.mb4k2gp2qobbuvtm@pd.tnic> <4845df29-bae7-9b78-0428-ff96dbef2128@amd.com> <20170518090212.kebstmnjv4h3cjf2@pd.tnic> <20170521071650.pwwmw4agggaazfrh@pd.tnic> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20170521071650.pwwmw4agggaazfrh@pd.tnic> Content-Language: en-US Sender: owner-linux-mm@kvack.org To: Borislav Petkov Cc: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org, Rik van Riel , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Larry Woodman , Brijesh Singh , Ingo Molnar , Andy Lutomirski , "H. Peter Anvin" , Andrey Ryabinin List-Id: linux-efi@vger.kernel.org On 5/21/2017 2:16 AM, Borislav Petkov wrote: > On Fri, May 19, 2017 at 03:50:32PM -0500, Tom Lendacky wrote: >> The "worker" function would be doing the loop through the setup data, >> but since the setup data is mapped inside the loop I can't do the __init >> calling the non-init function and still hope to consolidate the code. >> Maybe I'm missing something here... > > Hmm, I see what you mean. But the below change ontop doesn't fire any > warnings here. Maybe your .config has something set which I don't... Check if you have CONFIG_DEBUG_SECTION_MISMATCH=y Thanks, Tom > > --- > diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c > index 55317ba3b6dc..199c983192ae 100644 > --- a/arch/x86/mm/ioremap.c > +++ b/arch/x86/mm/ioremap.c > @@ -515,71 +515,50 @@ static bool memremap_is_efi_data(resource_size_t phys_addr, > * Examine the physical address to determine if it is boot data by checking > * it against the boot params setup_data chain. > */ > -static bool memremap_is_setup_data(resource_size_t phys_addr, > - unsigned long size) > +static bool > +__memremap_is_setup_data(resource_size_t phys_addr, unsigned long size, bool early) > { > struct setup_data *data; > u64 paddr, paddr_next; > + u32 len; > > paddr = boot_params.hdr.setup_data; > while (paddr) { > - bool is_setup_data = false; > > if (phys_addr == paddr) > return true; > > - data = memremap(paddr, sizeof(*data), > - MEMREMAP_WB | MEMREMAP_DEC); > + if (early) > + data = early_memremap_decrypted(paddr, sizeof(*data)); > + else > + data = memremap(paddr, sizeof(*data), MEMREMAP_WB | MEMREMAP_DEC); > > paddr_next = data->next; > + len = data->len; > > - if ((phys_addr > paddr) && (phys_addr < (paddr + data->len))) > - is_setup_data = true; > + if (early) > + early_memunmap(data, sizeof(*data)); > + else > + memunmap(data); > > - memunmap(data); > > - if (is_setup_data) > + if ((phys_addr > paddr) && (phys_addr < (paddr + data->len))) > return true; > > paddr = paddr_next; > } > - > return false; > } > > -/* > - * Examine the physical address to determine if it is boot data by checking > - * it against the boot params setup_data chain (early boot version). > - */ > static bool __init early_memremap_is_setup_data(resource_size_t phys_addr, > unsigned long size) > { > - struct setup_data *data; > - u64 paddr, paddr_next; > - > - paddr = boot_params.hdr.setup_data; > - while (paddr) { > - bool is_setup_data = false; > - > - if (phys_addr == paddr) > - return true; > - > - data = early_memremap_decrypted(paddr, sizeof(*data)); > - > - paddr_next = data->next; > - > - if ((phys_addr > paddr) && (phys_addr < (paddr + data->len))) > - is_setup_data = true; > - > - early_memunmap(data, sizeof(*data)); > - > - if (is_setup_data) > - return true; > - > - paddr = paddr_next; > - } > + return __memremap_is_setup_data(phys_addr, size, true); > +} > > - return false; > +static bool memremap_is_setup_data(resource_size_t phys_addr, unsigned long size) > +{ > + return __memremap_is_setup_data(phys_addr, size, false); > } > > /* > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org