From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757852AbcBIQJy (ORCPT ); Tue, 9 Feb 2016 11:09:54 -0500 Received: from terminus.zytor.com ([198.137.202.10]:38450 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757770AbcBIQJv (ORCPT ); Tue, 9 Feb 2016 11:09:51 -0500 Date: Tue, 9 Feb 2016 08:08:32 -0800 From: tip-bot for Andy Lutomirski Message-ID: Cc: dvlasenk@redhat.com, peterz@infradead.org, luto@amacapital.net, tglx@linutronix.de, luto@kernel.org, brgerst@gmail.com, jdelvare@suse.de, mingo@kernel.org, toshi.kani@hp.com, torvalds@linux-foundation.org, mcgrof@suse.com, hpa@zytor.com, bp@alien8.de, arjan@linux.intel.com, akpm@linux-foundation.org, linux-kernel@vger.kernel.org Reply-To: hpa@zytor.com, torvalds@linux-foundation.org, mcgrof@suse.com, linux-kernel@vger.kernel.org, bp@alien8.de, akpm@linux-foundation.org, arjan@linux.intel.com, peterz@infradead.org, luto@amacapital.net, dvlasenk@redhat.com, toshi.kani@hp.com, mingo@kernel.org, jdelvare@suse.de, tglx@linutronix.de, luto@kernel.org, brgerst@gmail.com In-Reply-To: <3147c38e51f439f3c8911db34c7d4ab22d854915.1453791969.git.luto@kernel.org> References: <3147c38e51f439f3c8911db34c7d4ab22d854915.1453791969.git.luto@kernel.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/mm] x86/dmi: Switch dmi_remap() from ioremap() [uncached ] to ioremap_cache() Git-Commit-ID: ce1143aa60273220a9f89012f2aaaed04f97e9a2 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: ce1143aa60273220a9f89012f2aaaed04f97e9a2 Gitweb: http://git.kernel.org/tip/ce1143aa60273220a9f89012f2aaaed04f97e9a2 Author: Andy Lutomirski AuthorDate: Mon, 25 Jan 2016 23:06:49 -0800 Committer: Ingo Molnar CommitDate: Tue, 9 Feb 2016 14:36:43 +0100 x86/dmi: Switch dmi_remap() from ioremap() [uncached] to ioremap_cache() DMI cacheability is very confused on x86. dmi_early_remap() uses early_ioremap(), which uses FIXMAP_PAGE_IO, which is __PAGE_KERNEL_IO, which is __PAGE_KERNEL, which is cached. Don't ask me why this makes any sense. dmi_remap() uses ioremap(), which requests an uncached mapping. However, on non-EFI systems, the DMI data generally lives between 0xf0000 and 0x100000, which is in the legacy ISA range, which triggers a special case in the PAT code that overrides the cache mode requested by ioremap() and forces a WB mapping. On a UEFI boot, however, the DMI table can live at any physical address. On my laptop, it's around 0x77dd0000. That's nowhere near the legacy ISA range, so the ioremap() implicit uncached type is honored and we end up with a UC- mapping. UC- is a very, very slow way to read from main memory, so dmi_walk() is likely to take much longer than necessary. Given that, even on UEFI, we do early cached DMI reads, it seems safe to just ask for cached access. Switch to ioremap_cache(). I haven't tried to benchmark this, but I'd guess it saves several milliseconds of boot time. Signed-off-by: Andy Lutomirski Cc: Andrew Morton Cc: Andy Lutomirski Cc: Arjan van de Ven Cc: Borislav Petkov Cc: Brian Gerst Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Jean Delvare Cc: Linus Torvalds Cc: Luis R. Rodriguez Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: Toshi Kani Link: http://lkml.kernel.org/r/3147c38e51f439f3c8911db34c7d4ab22d854915.1453791969.git.luto@kernel.org Signed-off-by: Ingo Molnar --- arch/x86/include/asm/dmi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/include/asm/dmi.h b/arch/x86/include/asm/dmi.h index 535192f..3c69fed 100644 --- a/arch/x86/include/asm/dmi.h +++ b/arch/x86/include/asm/dmi.h @@ -15,7 +15,7 @@ static __always_inline __init void *dmi_alloc(unsigned len) /* Use early IO mappings for DMI because it's initialized early */ #define dmi_early_remap early_ioremap #define dmi_early_unmap early_iounmap -#define dmi_remap ioremap +#define dmi_remap ioremap_cache #define dmi_unmap iounmap #endif /* _ASM_X86_DMI_H */