aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2018-12-03 12:03:48 -0500
committerIngo Molnar <mingo@kernel.org>2018-12-17 12:54:25 -0500
commit5fe26b7a8f4693d532c7a3c3632e47e7d7016238 (patch)
tree42b84cd93f6a5297c38aeaddbde6c5b48a4c3ffe
parent98bfc9b038cde1ce108f69a50720e394fe774cb7 (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.c7
-rw-r--r--arch/x86/mm/pageattr.c13
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);
1908int _set_memory_wc(unsigned long addr, int numpages) 1908int _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)
2064static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) 2062static 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}