Skip to content

Commit 16ebf03

Browse files
Peter ZijlstraIngo Molnar
authored andcommitted
x86/mm/cpa: Add __cpa_addr() helper
The code to compute the virtual address of a cpa_data is duplicated; introduce a helper before more copies happen. 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.229119497@infradead.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent ecc729f commit 16ebf03

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

arch/x86/mm/pageattr.c

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,23 @@ static bool __cpa_pfn_in_highmap(unsigned long pfn)
228228

229229
#endif
230230

231+
static unsigned long __cpa_addr(struct cpa_data *cpa, int idx)
232+
{
233+
if (cpa->flags & CPA_PAGES_ARRAY) {
234+
struct page *page = cpa->pages[idx];
235+
236+
if (unlikely(PageHighMem(page)))
237+
return 0;
238+
239+
return (unsigned long)page_address(page);
240+
}
241+
242+
if (cpa->flags & CPA_ARRAY)
243+
return cpa->vaddr[idx];
244+
245+
return *cpa->vaddr;
246+
}
247+
231248
/*
232249
* Flushing functions
233250
*/
@@ -1476,15 +1493,7 @@ static int __change_page_attr(struct cpa_data *cpa, int primary)
14761493
unsigned int level;
14771494
pte_t *kpte, old_pte;
14781495

1479-
if (cpa->flags & CPA_PAGES_ARRAY) {
1480-
struct page *page = cpa->pages[cpa->curpage];
1481-
if (unlikely(PageHighMem(page)))
1482-
return 0;
1483-
address = (unsigned long)page_address(page);
1484-
} else if (cpa->flags & CPA_ARRAY)
1485-
address = cpa->vaddr[cpa->curpage];
1486-
else
1487-
address = *cpa->vaddr;
1496+
address = __cpa_addr(cpa, cpa->curpage);
14881497
repeat:
14891498
kpte = _lookup_address_cpa(cpa, address, &level);
14901499
if (!kpte)
@@ -1565,16 +1574,7 @@ static int cpa_process_alias(struct cpa_data *cpa)
15651574
* No need to redo, when the primary call touched the direct
15661575
* mapping already:
15671576
*/
1568-
if (cpa->flags & CPA_PAGES_ARRAY) {
1569-
struct page *page = cpa->pages[cpa->curpage];
1570-
if (unlikely(PageHighMem(page)))
1571-
return 0;
1572-
vaddr = (unsigned long)page_address(page);
1573-
} else if (cpa->flags & CPA_ARRAY)
1574-
vaddr = cpa->vaddr[cpa->curpage];
1575-
else
1576-
vaddr = *cpa->vaddr;
1577-
1577+
vaddr = __cpa_addr(cpa, cpa->curpage);
15781578
if (!(within(vaddr, PAGE_OFFSET,
15791579
PAGE_OFFSET + (max_pfn_mapped << PAGE_SHIFT)))) {
15801580

0 commit comments

Comments
 (0)