From: Toshi Kani <toshi.kani@hp.com> To: hpa@zytor.com, tglx@linutronix.de, mingo@redhat.com, akpm@linux-foundation.org, arnd@arndb.de Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, x86@kernel.org, linux-nvdimm@lists.01.org, jgross@suse.com, stefan.bader@canonical.com, luto@amacapital.net, hmh@hmh.eng.br, yigal@plexistor.com, konrad.wilk@oracle.com, Elliott@hp.com, mcgrof@suse.com, hch@lst.de, Toshi Kani <toshi.kani@hp.com> Subject: [PATCH v10 2/12] x86, mm, pat: Change reserve_memtype() for WT Date: Wed, 27 May 2015 09:18:54 -0600 [thread overview] Message-ID: <1432739944-22633-3-git-send-email-toshi.kani@hp.com> (raw) In-Reply-To: <1432739944-22633-1-git-send-email-toshi.kani@hp.com> This patch changes reserve_memtype() to support the WT cache mode with PAT. When PAT is not enabled, WB and UC- are the only types supported. When a target range is in RAM, reserve_ram_pages_type() verifies the requested type. reserve_ram_pages_type() is changed to fail WT and WP requests with -EINVAL since set_page_memtype() is limited to handle three types, WB, WC and UC-. Signed-off-by: Toshi Kani <toshi.kani@hp.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> --- Patch 8/12 enhances set_page_memtype() to support WT. --- arch/x86/mm/pat.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 1baa60d..d932b43 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -365,6 +365,8 @@ static int pat_pagerange_is_ram(resource_size_t start, resource_size_t end) /* * For RAM pages, we use page flags to mark the pages with appropriate type. + * The page flags are limited to three types, WB, WC and UC-. + * WT and WP requests fail with -EINVAL, and UC gets redirected to UC-. * Here we do two pass: * - Find the memtype of all the pages in the range, look for any conflicts * - In case of no conflicts, set the new memtype for pages in the range @@ -376,6 +378,13 @@ static int reserve_ram_pages_type(u64 start, u64 end, struct page *page; u64 pfn; + if ((req_type == _PAGE_CACHE_MODE_WT) || + (req_type == _PAGE_CACHE_MODE_WP)) { + if (new_type) + *new_type = _PAGE_CACHE_MODE_UC_MINUS; + return -EINVAL; + } + if (req_type == _PAGE_CACHE_MODE_UC) { /* We do not support strong UC */ WARN_ON_ONCE(1); @@ -425,6 +434,7 @@ static int free_ram_pages_type(u64 start, u64 end) * - _PAGE_CACHE_MODE_WC * - _PAGE_CACHE_MODE_UC_MINUS * - _PAGE_CACHE_MODE_UC + * - _PAGE_CACHE_MODE_WT * * If new_type is NULL, function will return an error if it cannot reserve the * region with req_type. If new_type is non-NULL, function will return @@ -442,12 +452,12 @@ int reserve_memtype(u64 start, u64 end, enum page_cache_mode req_type, BUG_ON(start >= end); /* end is exclusive */ if (!pat_enabled) { - /* This is identical to page table setting without PAT */ + /* WB and UC- are the only types supported without PAT */ if (new_type) { - if (req_type == _PAGE_CACHE_MODE_WC) - *new_type = _PAGE_CACHE_MODE_UC_MINUS; + if (req_type == _PAGE_CACHE_MODE_WB) + *new_type = _PAGE_CACHE_MODE_WB; else - *new_type = req_type; + *new_type = _PAGE_CACHE_MODE_UC_MINUS; } return 0; } -- 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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Toshi Kani <toshi.kani@hp.com> To: hpa@zytor.com, tglx@linutronix.de, mingo@redhat.com, akpm@linux-foundation.org, arnd@arndb.de Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, x86@kernel.org, linux-nvdimm@ml01.01.org, jgross@suse.com, stefan.bader@canonical.com, luto@amacapital.net, hmh@hmh.eng.br, yigal@plexistor.com, konrad.wilk@oracle.com, Elliott@hp.com, mcgrof@suse.com, hch@lst.de, Toshi Kani <toshi.kani@hp.com> Subject: [PATCH v10 2/12] x86, mm, pat: Change reserve_memtype() for WT Date: Wed, 27 May 2015 09:18:54 -0600 [thread overview] Message-ID: <1432739944-22633-3-git-send-email-toshi.kani@hp.com> (raw) In-Reply-To: <1432739944-22633-1-git-send-email-toshi.kani@hp.com> This patch changes reserve_memtype() to support the WT cache mode with PAT. When PAT is not enabled, WB and UC- are the only types supported. When a target range is in RAM, reserve_ram_pages_type() verifies the requested type. reserve_ram_pages_type() is changed to fail WT and WP requests with -EINVAL since set_page_memtype() is limited to handle three types, WB, WC and UC-. Signed-off-by: Toshi Kani <toshi.kani@hp.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> --- Patch 8/12 enhances set_page_memtype() to support WT. --- arch/x86/mm/pat.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 1baa60d..d932b43 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -365,6 +365,8 @@ static int pat_pagerange_is_ram(resource_size_t start, resource_size_t end) /* * For RAM pages, we use page flags to mark the pages with appropriate type. + * The page flags are limited to three types, WB, WC and UC-. + * WT and WP requests fail with -EINVAL, and UC gets redirected to UC-. * Here we do two pass: * - Find the memtype of all the pages in the range, look for any conflicts * - In case of no conflicts, set the new memtype for pages in the range @@ -376,6 +378,13 @@ static int reserve_ram_pages_type(u64 start, u64 end, struct page *page; u64 pfn; + if ((req_type == _PAGE_CACHE_MODE_WT) || + (req_type == _PAGE_CACHE_MODE_WP)) { + if (new_type) + *new_type = _PAGE_CACHE_MODE_UC_MINUS; + return -EINVAL; + } + if (req_type == _PAGE_CACHE_MODE_UC) { /* We do not support strong UC */ WARN_ON_ONCE(1); @@ -425,6 +434,7 @@ static int free_ram_pages_type(u64 start, u64 end) * - _PAGE_CACHE_MODE_WC * - _PAGE_CACHE_MODE_UC_MINUS * - _PAGE_CACHE_MODE_UC + * - _PAGE_CACHE_MODE_WT * * If new_type is NULL, function will return an error if it cannot reserve the * region with req_type. If new_type is non-NULL, function will return @@ -442,12 +452,12 @@ int reserve_memtype(u64 start, u64 end, enum page_cache_mode req_type, BUG_ON(start >= end); /* end is exclusive */ if (!pat_enabled) { - /* This is identical to page table setting without PAT */ + /* WB and UC- are the only types supported without PAT */ if (new_type) { - if (req_type == _PAGE_CACHE_MODE_WC) - *new_type = _PAGE_CACHE_MODE_UC_MINUS; + if (req_type == _PAGE_CACHE_MODE_WB) + *new_type = _PAGE_CACHE_MODE_WB; else - *new_type = req_type; + *new_type = _PAGE_CACHE_MODE_UC_MINUS; } return 0; }
next prev parent reply other threads:[~2015-05-27 15:18 UTC|newest] Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-05-27 15:18 [PATCH v10 0/12] Support Write-Through mapping on x86 Toshi Kani 2015-05-27 15:18 ` Toshi Kani 2015-05-27 15:18 ` [PATCH v10 1/12] x86, mm, pat: Set WT to PA7 slot of PAT MSR Toshi Kani 2015-05-27 15:18 ` Toshi Kani 2015-05-27 15:18 ` Toshi Kani [this message] 2015-05-27 15:18 ` [PATCH v10 2/12] x86, mm, pat: Change reserve_memtype() for WT Toshi Kani 2015-05-27 15:18 ` [PATCH v10 3/12] x86, asm: Change is_new_memtype_allowed() " Toshi Kani 2015-05-27 15:18 ` Toshi Kani 2015-05-27 15:18 ` [PATCH v10 4/12] x86, mm, asm-gen: Add ioremap_wt() " Toshi Kani 2015-05-27 15:18 ` Toshi Kani 2015-05-27 15:18 ` [PATCH v10 5/12] arch/*/asm/io.h: Add ioremap_wt() to all architectures Toshi Kani 2015-05-27 15:18 ` Toshi Kani 2015-05-27 15:18 ` [PATCH v10 6/12] video/fbdev, asm/io.h: Remove ioremap_writethrough() Toshi Kani 2015-05-27 15:18 ` Toshi Kani 2015-05-27 15:18 ` [PATCH v10 7/12] x86, mm, pat: Add pgprot_writethrough() for WT Toshi Kani 2015-05-27 15:18 ` Toshi Kani 2015-05-27 15:19 ` [PATCH v10 8/12] x86, mm, asm: Add WT support to set_page_memtype() Toshi Kani 2015-05-27 15:19 ` Toshi Kani 2015-05-27 15:19 ` [PATCH v10 9/12] x86, mm: Add set_memory_wt() for WT Toshi Kani 2015-05-27 15:19 ` Toshi Kani 2015-05-27 15:19 ` [PATCH v10 10/12] x86, mm, pat: Cleanup init flags in pat_init() Toshi Kani 2015-05-27 15:19 ` Toshi Kani 2015-05-29 8:59 ` Borislav Petkov 2015-05-29 8:59 ` Borislav Petkov 2015-05-27 15:19 ` [PATCH v10 11/12] x86, mm, pat: Refactor !pat_enabled handling Toshi Kani 2015-05-27 15:19 ` Toshi Kani 2015-05-29 8:58 ` Borislav Petkov 2015-05-29 8:58 ` Borislav Petkov 2015-05-29 14:27 ` Toshi Kani 2015-05-29 14:27 ` Toshi Kani 2015-05-29 15:13 ` Borislav Petkov 2015-05-29 15:13 ` Borislav Petkov 2015-05-29 15:17 ` Toshi Kani 2015-05-29 15:17 ` Toshi Kani 2015-05-27 15:19 ` [PATCH v10 12/12] drivers/block/pmem: Map NVDIMM with ioremap_wt() Toshi Kani 2015-05-27 15:19 ` Toshi Kani 2015-05-29 9:11 ` Borislav Petkov 2015-05-29 9:11 ` Borislav Petkov 2015-05-29 14:43 ` Dan Williams 2015-05-29 14:43 ` Dan Williams 2015-05-29 15:03 ` Toshi Kani 2015-05-29 15:03 ` Toshi Kani 2015-05-29 15:03 ` Toshi Kani 2015-05-29 18:19 ` Dan Williams 2015-05-29 18:19 ` Dan Williams 2015-05-29 18:32 ` Toshi Kani 2015-05-29 18:32 ` Toshi Kani 2015-05-29 18:32 ` Toshi Kani 2015-05-29 19:34 ` Dan Williams 2015-05-29 19:34 ` Dan Williams 2015-05-29 20:10 ` Toshi Kani 2015-05-29 20:10 ` Toshi Kani 2015-05-29 18:34 ` Andy Lutomirski 2015-05-29 18:34 ` Andy Lutomirski 2015-05-29 19:32 ` Dan Williams 2015-05-29 19:32 ` Dan Williams 2015-05-29 21:29 ` Elliott, Robert (Server Storage) 2015-05-29 21:29 ` Elliott, Robert (Server Storage) 2015-05-29 21:29 ` Elliott, Robert (Server Storage) 2015-05-29 21:46 ` Andy Lutomirski 2015-05-29 21:46 ` Andy Lutomirski 2015-05-29 22:24 ` Elliott, Robert (Server Storage) 2015-05-29 22:24 ` Elliott, Robert (Server Storage) 2015-05-29 22:24 ` Elliott, Robert (Server Storage) 2015-05-29 22:32 ` H. Peter Anvin 2015-05-29 22:32 ` H. Peter Anvin 2015-06-01 8:58 ` Ingo Molnar 2015-06-01 8:58 ` Ingo Molnar 2015-06-01 17:10 ` Andy Lutomirski 2015-06-01 17:10 ` Andy Lutomirski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1432739944-22633-3-git-send-email-toshi.kani@hp.com \ --to=toshi.kani@hp.com \ --cc=Elliott@hp.com \ --cc=akpm@linux-foundation.org \ --cc=arnd@arndb.de \ --cc=hch@lst.de \ --cc=hmh@hmh.eng.br \ --cc=hpa@zytor.com \ --cc=jgross@suse.com \ --cc=konrad.wilk@oracle.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-nvdimm@lists.01.org \ --cc=luto@amacapital.net \ --cc=mcgrof@suse.com \ --cc=mingo@redhat.com \ --cc=stefan.bader@canonical.com \ --cc=tglx@linutronix.de \ --cc=x86@kernel.org \ --cc=yigal@plexistor.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.