diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2015-01-07 05:00:02 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2015-01-08 04:02:18 -0500 |
commit | fbc89c952f004fb9191c23605a1428df6dd39a90 (patch) | |
tree | d9d0e6b79fdce720e1ad908bd6911bc7a0d805ea | |
parent | e38f97813302065fbc9c9eab5c1a94dc021d71e2 (diff) |
s390/mm: avoid using pmd_to_page for !USE_SPLIT_PMD_PTLOCKS
pmd_to_page() is only available if USE_SPLIT_PMD_PTLOCKS is defined.
The use of pmd_to_page in the gmap code can cause compile errors if
NR_CPUS is smaller than SPLIT_PTLOCK_CPUS. Do not use pmd_to_page
outside of USE_SPLIT_PMD_PTLOCKS sections.
Reported-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | arch/s390/mm/pgtable.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index 71c7eff2c89f..601deb85d2a0 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c | |||
@@ -322,11 +322,12 @@ static int gmap_alloc_table(struct gmap *gmap, unsigned long *table, | |||
322 | static unsigned long __gmap_segment_gaddr(unsigned long *entry) | 322 | static unsigned long __gmap_segment_gaddr(unsigned long *entry) |
323 | { | 323 | { |
324 | struct page *page; | 324 | struct page *page; |
325 | unsigned long offset; | 325 | unsigned long offset, mask; |
326 | 326 | ||
327 | offset = (unsigned long) entry / sizeof(unsigned long); | 327 | offset = (unsigned long) entry / sizeof(unsigned long); |
328 | offset = (offset & (PTRS_PER_PMD - 1)) * PMD_SIZE; | 328 | offset = (offset & (PTRS_PER_PMD - 1)) * PMD_SIZE; |
329 | page = pmd_to_page((pmd_t *) entry); | 329 | mask = ~(PTRS_PER_PMD * sizeof(pmd_t) - 1); |
330 | page = virt_to_page((void *)((unsigned long) entry & mask)); | ||
330 | return page->index + offset; | 331 | return page->index + offset; |
331 | } | 332 | } |
332 | 333 | ||