From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomasz Nowicki Subject: Re: [PATCH 6/7] acpi, apei, ghes: Make unmapping functionality independent from architecture. Date: Wed, 14 May 2014 14:52:29 +0200 Message-ID: <5373670D.5040603@linaro.org> References: <1397056476-9183-1-git-send-email-tomasz.nowicki@linaro.org> <1397056476-9183-7-git-send-email-tomasz.nowicki@linaro.org> <20140513201118.GF8760@pd.tnic> <5373625B.4050401@linaro.org> <20140514123542.GG10145@arm.com> <20140514124505.GA19866@localhost> <20140514124834.GH10145@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20140514124834.GH10145@arm.com> Sender: linux-kernel-owner@vger.kernel.org To: Will Deacon , Catalin Marinas Cc: Borislav Petkov , Russell King - ARM Linux , "rjw@rjwysocki.net" , "lenb@kernel.org" , "tony.luck@intel.com" , "bp@suse.de" , "m.chehab@samsung.com" , "linux-edac@vger.kernel.org" , "x86@kernel.org" , "linux-acpi@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linaro-acpi@lists.linaro.org" List-Id: linux-acpi@vger.kernel.org On 14.05.2014 14:48, Will Deacon wrote: > On Wed, May 14, 2014 at 01:45:07PM +0100, Catalin Marinas wrote: >> On Wed, May 14, 2014 at 01:35:42PM +0100, Will Deacon wrote: >>> On Wed, May 14, 2014 at 01:32:27PM +0100, Tomasz Nowicki wrote: >>>> On 13.05.2014 22:11, Borislav Petkov wrote: >>>>> On Wed, Apr 09, 2014 at 05:14:34PM +0200, Tomasz Nowicki wrote: >>>>>> Till now __flush_tlb_one was used for unmapping virtual memory which >>>>>> is x86 specific function. Replace it with more generic >>>>>> flush_tlb_kernel_range. >>>>>> >>>>>> Signed-off-by: Tomasz Nowicki >>>>>> --- >>>>>> drivers/acpi/apei/ghes.c | 4 ++-- >>>>>> 1 file changed, 2 insertions(+), 2 deletions(-) >>>>>> >>>>>> diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c >>>>>> index aaf8db3..624878b 100644 >>>>>> --- a/drivers/acpi/apei/ghes.c >>>>>> +++ b/drivers/acpi/apei/ghes.c >>>>>> @@ -185,7 +185,7 @@ static void ghes_iounmap_nmi(void __iomem *vaddr_ptr) >>>>>> >>>>>> BUG_ON(vaddr != (unsigned long)GHES_IOREMAP_NMI_PAGE(base)); >>>>>> unmap_kernel_range_noflush(vaddr, PAGE_SIZE); >>>>>> - __flush_tlb_one(vaddr); >>>>>> + flush_tlb_kernel_range(vaddr, vaddr + PAGE_SIZE); >>>>>> } >>>>>> >>>>>> static void ghes_iounmap_irq(void __iomem *vaddr_ptr) >>>>>> @@ -195,7 +195,7 @@ static void ghes_iounmap_irq(void __iomem *vaddr_ptr) >>>>>> >>>>>> BUG_ON(vaddr != (unsigned long)GHES_IOREMAP_IRQ_PAGE(base)); >>>>>> unmap_kernel_range_noflush(vaddr, PAGE_SIZE); >>>>>> - __flush_tlb_one(vaddr); >>>>>> + flush_tlb_kernel_range(vaddr, vaddr + PAGE_SIZE); >>>>> >>>>> flush_tlb_kernel_range() does send an IPI to every core on x86 which is >>>>> much more expensive than what __flush_tlb_one does. >>>>> >>>>> Fairer it would be if you added a __flush_tlb_one() version for arm >>>>> which does flush_tlb_kernel_range for you. >>>>> >>>> >>>> Thanks for comment. I am not sure if maintainers will allow me to add >>>> sth like __flush_tlb_one() for arm/arm64. Let me ask them directly. >>>> Catalin, Russell what do you think? >>> >>> I don't have the background for this, but if you don't need broadcasting >>> (if this avoids IPIs on x86, I guess you don't) then why not use >>> local_flush_tlb_kernel_range instead? >> >> Is this generic enough (we don't have it on arm64)? > > Well, it's more popular than __flush_tlb_one and the naming is more > descriptive imo. I am aiming ARM64 but ideally it should work for x86, arm64 and arm. Tomasz