diff options
| author | Peter Zijlstra <peterz@infradead.org> | 2018-12-03 12:03:48 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2018-12-17 12:54:25 -0500 |
| commit | 5fe26b7a8f4693d532c7a3c3632e47e7d7016238 (patch) | |
| tree | 42b84cd93f6a5297c38aeaddbde6c5b48a4c3ffe | |
| parent | 98bfc9b038cde1ce108f69a50720e394fe774cb7 (diff) | |
x86/mm/cpa: Simplify the code after making cpa->vaddr invariant
Since cpa->vaddr is invariant, this means we can remove all
workarounds that deal with it changing.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tom.StDenis@amd.com
Cc: dave.hansen@intel.com
Link: http://lkml.kernel.org/r/20181203171043.366619025@infradead.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
| -rw-r--r-- | arch/x86/mm/pageattr-test.c | 7 | ||||
| -rw-r--r-- | arch/x86/mm/pageattr.c | 13 |
2 files changed, 6 insertions, 14 deletions
diff --git a/arch/x86/mm/pageattr-test.c b/arch/x86/mm/pageattr-test.c index b6b6468530f1..facce271e8b9 100644 --- a/arch/x86/mm/pageattr-test.c +++ b/arch/x86/mm/pageattr-test.c | |||
| @@ -124,7 +124,6 @@ static int pageattr_test(void) | |||
| 124 | unsigned int level; | 124 | unsigned int level; |
| 125 | int i, k; | 125 | int i, k; |
| 126 | int err; | 126 | int err; |
| 127 | unsigned long test_addr; | ||
| 128 | 127 | ||
| 129 | if (print) | 128 | if (print) |
| 130 | printk(KERN_INFO "CPA self-test:\n"); | 129 | printk(KERN_INFO "CPA self-test:\n"); |
| @@ -181,8 +180,7 @@ static int pageattr_test(void) | |||
| 181 | 180 | ||
| 182 | switch (i % 3) { | 181 | switch (i % 3) { |
| 183 | case 0: | 182 | case 0: |
| 184 | test_addr = addr[i]; | 183 | err = change_page_attr_set(&addr[i], len[i], PAGE_CPA_TEST, 0); |
| 185 | err = change_page_attr_set(&test_addr, len[i], PAGE_CPA_TEST, 0); | ||
| 186 | break; | 184 | break; |
| 187 | 185 | ||
| 188 | case 1: | 186 | case 1: |
| @@ -226,8 +224,7 @@ static int pageattr_test(void) | |||
| 226 | failed++; | 224 | failed++; |
| 227 | continue; | 225 | continue; |
| 228 | } | 226 | } |
| 229 | test_addr = addr[i]; | 227 | err = change_page_attr_clear(&addr[i], len[i], PAGE_CPA_TEST, 0); |
| 230 | err = change_page_attr_clear(&test_addr, len[i], PAGE_CPA_TEST, 0); | ||
| 231 | if (err < 0) { | 228 | if (err < 0) { |
| 232 | printk(KERN_ERR "CPA reverting failed: %d\n", err); | 229 | printk(KERN_ERR "CPA reverting failed: %d\n", err); |
| 233 | failed++; | 230 | failed++; |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index ce8af3f08628..afa98b7b6050 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
| @@ -1908,15 +1908,13 @@ EXPORT_SYMBOL_GPL(set_memory_array_wt); | |||
| 1908 | int _set_memory_wc(unsigned long addr, int numpages) | 1908 | int _set_memory_wc(unsigned long addr, int numpages) |
| 1909 | { | 1909 | { |
| 1910 | int ret; | 1910 | int ret; |
| 1911 | unsigned long addr_copy = addr; | ||
| 1912 | 1911 | ||
| 1913 | ret = change_page_attr_set(&addr, numpages, | 1912 | ret = change_page_attr_set(&addr, numpages, |
| 1914 | cachemode2pgprot(_PAGE_CACHE_MODE_UC_MINUS), | 1913 | cachemode2pgprot(_PAGE_CACHE_MODE_UC_MINUS), |
| 1915 | 0); | 1914 | 0); |
| 1916 | if (!ret) { | 1915 | if (!ret) { |
| 1917 | ret = change_page_attr_set_clr(&addr_copy, numpages, | 1916 | ret = change_page_attr_set_clr(&addr, numpages, |
| 1918 | cachemode2pgprot( | 1917 | cachemode2pgprot(_PAGE_CACHE_MODE_WC), |
| 1919 | _PAGE_CACHE_MODE_WC), | ||
| 1920 | __pgprot(_PAGE_CACHE_MASK), | 1918 | __pgprot(_PAGE_CACHE_MASK), |
| 1921 | 0, 0, NULL); | 1919 | 0, 0, NULL); |
| 1922 | } | 1920 | } |
| @@ -2064,7 +2062,6 @@ int set_memory_global(unsigned long addr, int numpages) | |||
| 2064 | static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) | 2062 | static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) |
| 2065 | { | 2063 | { |
| 2066 | struct cpa_data cpa; | 2064 | struct cpa_data cpa; |
| 2067 | unsigned long start; | ||
| 2068 | int ret; | 2065 | int ret; |
| 2069 | 2066 | ||
| 2070 | /* Nothing to do if memory encryption is not active */ | 2067 | /* Nothing to do if memory encryption is not active */ |
| @@ -2075,8 +2072,6 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) | |||
| 2075 | if (WARN_ONCE(addr & ~PAGE_MASK, "misaligned address: %#lx\n", addr)) | 2072 | if (WARN_ONCE(addr & ~PAGE_MASK, "misaligned address: %#lx\n", addr)) |
| 2076 | addr &= PAGE_MASK; | 2073 | addr &= PAGE_MASK; |
| 2077 | 2074 | ||
| 2078 | start = addr; | ||
| 2079 | |||
| 2080 | memset(&cpa, 0, sizeof(cpa)); | 2075 | memset(&cpa, 0, sizeof(cpa)); |
| 2081 | cpa.vaddr = &addr; | 2076 | cpa.vaddr = &addr; |
| 2082 | cpa.numpages = numpages; | 2077 | cpa.numpages = numpages; |
| @@ -2091,7 +2086,7 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) | |||
| 2091 | /* | 2086 | /* |
| 2092 | * Before changing the encryption attribute, we need to flush caches. | 2087 | * Before changing the encryption attribute, we need to flush caches. |
| 2093 | */ | 2088 | */ |
| 2094 | cpa_flush_range(start, numpages, 1); | 2089 | cpa_flush_range(addr, numpages, 1); |
| 2095 | 2090 | ||
| 2096 | ret = __change_page_attr_set_clr(&cpa, 1); | 2091 | ret = __change_page_attr_set_clr(&cpa, 1); |
| 2097 | 2092 | ||
| @@ -2102,7 +2097,7 @@ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) | |||
| 2102 | * in case TLB flushing gets optimized in the cpa_flush_range() | 2097 | * in case TLB flushing gets optimized in the cpa_flush_range() |
| 2103 | * path use the same logic as above. | 2098 | * path use the same logic as above. |
| 2104 | */ | 2099 | */ |
| 2105 | cpa_flush_range(start, numpages, 0); | 2100 | cpa_flush_range(addr, numpages, 0); |
| 2106 | 2101 | ||
| 2107 | return ret; | 2102 | return ret; |
| 2108 | } | 2103 | } |
