Commit 127c1fef authored by Martin Schwidefsky's avatar Martin Schwidefsky

s390/mm: do not initialize storage keys

With dirty and referenced bits implemented in software it is unnecessary
to initialize the storage key for every page. With this patch not a single
storage key operation is done for a system that does not use KVM.
For KVM set_pte_at/pgste_set_key will do the initialization for the guest
view of the storage key when the mapping for the page is established in
the host.
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 6cef3003
...@@ -30,7 +30,12 @@ ...@@ -30,7 +30,12 @@
#include <asm/setup.h> #include <asm/setup.h>
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
void storage_key_init_range(unsigned long start, unsigned long end); static inline void storage_key_init_range(unsigned long start, unsigned long end)
{
#if PAGE_DEFAULT_KEY
__storage_key_init_range(start, end);
#endif
}
static inline void clear_page(void *page) static inline void clear_page(void *page)
{ {
......
...@@ -206,6 +206,7 @@ static noinline __init void clear_bss_section(void) ...@@ -206,6 +206,7 @@ static noinline __init void clear_bss_section(void)
*/ */
static noinline __init void init_kernel_storage_key(void) static noinline __init void init_kernel_storage_key(void)
{ {
#if PAGE_DEFAULT_KEY
unsigned long end_pfn, init_pfn; unsigned long end_pfn, init_pfn;
end_pfn = PFN_UP(__pa(&_end)); end_pfn = PFN_UP(__pa(&_end));
...@@ -213,6 +214,7 @@ static noinline __init void init_kernel_storage_key(void) ...@@ -213,6 +214,7 @@ static noinline __init void init_kernel_storage_key(void)
for (init_pfn = 0 ; init_pfn < end_pfn; init_pfn++) for (init_pfn = 0 ; init_pfn < end_pfn; init_pfn++)
page_set_storage_key(init_pfn << PAGE_SHIFT, page_set_storage_key(init_pfn << PAGE_SHIFT,
PAGE_DEFAULT_KEY, 0); PAGE_DEFAULT_KEY, 0);
#endif
} }
static __initdata char sysinfo_page[PAGE_SIZE] __aligned(PAGE_SIZE); static __initdata char sysinfo_page[PAGE_SIZE] __aligned(PAGE_SIZE);
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/page.h> #include <asm/page.h>
#if PAGE_DEFAULT_KEY
static inline unsigned long sske_frame(unsigned long addr, unsigned char skey) static inline unsigned long sske_frame(unsigned long addr, unsigned char skey)
{ {
asm volatile(".insn rrf,0xb22b0000,%[skey],%[addr],9,0" asm volatile(".insn rrf,0xb22b0000,%[skey],%[addr],9,0"
...@@ -16,7 +17,7 @@ static inline unsigned long sske_frame(unsigned long addr, unsigned char skey) ...@@ -16,7 +17,7 @@ static inline unsigned long sske_frame(unsigned long addr, unsigned char skey)
return addr; return addr;
} }
void storage_key_init_range(unsigned long start, unsigned long end) void __storage_key_init_range(unsigned long start, unsigned long end)
{ {
unsigned long boundary, size; unsigned long boundary, size;
...@@ -36,6 +37,7 @@ void storage_key_init_range(unsigned long start, unsigned long end) ...@@ -36,6 +37,7 @@ void storage_key_init_range(unsigned long start, unsigned long end)
start += PAGE_SIZE; start += PAGE_SIZE;
} }
} }
#endif
static pte_t *walk_page_table(unsigned long addr) static pte_t *walk_page_table(unsigned long addr)
{ {
......
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