Commit 55121b43 authored by Suresh Siddha's avatar Suresh Siddha Committed by Ingo Molnar

x86, cpa: no need to check alias for __set_pages_p/__set_pages_np

No alias checking needed for setting present/not-present mapping. Otherwise,
we may need to break large pages for 64-bit kernel text mappings (this adds to
complexity if we want to do this from atomic context especially, for ex:
with CONFIG_DEBUG_PAGEALLOC). Let's keep it simple!
Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: arjan@linux.intel.com
Cc: venkatesh.pallipadi@intel.com
Cc: jeremy@goop.org
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 0b8fdcbc
...@@ -1121,7 +1121,13 @@ static int __set_pages_p(struct page *page, int numpages) ...@@ -1121,7 +1121,13 @@ static int __set_pages_p(struct page *page, int numpages)
.mask_clr = __pgprot(0), .mask_clr = __pgprot(0),
.flags = 0}; .flags = 0};
return __change_page_attr_set_clr(&cpa, 1); /*
* No alias checking needed for setting present flag. otherwise,
* we may need to break large pages for 64-bit kernel text
* mappings (this adds to complexity if we want to do this from
* atomic context especially). Let's keep it simple!
*/
return __change_page_attr_set_clr(&cpa, 0);
} }
static int __set_pages_np(struct page *page, int numpages) static int __set_pages_np(struct page *page, int numpages)
...@@ -1133,7 +1139,13 @@ static int __set_pages_np(struct page *page, int numpages) ...@@ -1133,7 +1139,13 @@ static int __set_pages_np(struct page *page, int numpages)
.mask_clr = __pgprot(_PAGE_PRESENT | _PAGE_RW), .mask_clr = __pgprot(_PAGE_PRESENT | _PAGE_RW),
.flags = 0}; .flags = 0};
return __change_page_attr_set_clr(&cpa, 1); /*
* No alias checking needed for setting not present flag. otherwise,
* we may need to break large pages for 64-bit kernel text
* mappings (this adds to complexity if we want to do this from
* atomic context especially). Let's keep it simple!
*/
return __change_page_attr_set_clr(&cpa, 0);
} }
void kernel_map_pages(struct page *page, int numpages, int enable) void kernel_map_pages(struct page *page, int numpages, int enable)
...@@ -1153,11 +1165,8 @@ void kernel_map_pages(struct page *page, int numpages, int enable) ...@@ -1153,11 +1165,8 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
/* /*
* The return value is ignored as the calls cannot fail. * The return value is ignored as the calls cannot fail.
* Large pages are kept enabled at boot time, and are * Large pages for identity mappings are not used at boot time
* split up quickly with DEBUG_PAGEALLOC. If a splitup * and hence no memory allocations during large page split.
* fails here (due to temporary memory shortage) no damage
* is done because we just keep the largepage intact up
* to the next attempt when it will likely be split up:
*/ */
if (enable) if (enable)
__set_pages_p(page, numpages); __set_pages_p(page, numpages);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment