diff options
Diffstat (limited to 'arch/s390/mm/pgtable.c')
| -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 be99357d238c..3cf8cc03fff6 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,  static unsigned long __gmap_segment_gaddr(unsigned long *entry)  {  	struct page *page; -	unsigned long offset; +	unsigned long offset, mask;  	offset = (unsigned long) entry / sizeof(unsigned long);  	offset = (offset & (PTRS_PER_PMD - 1)) * PMD_SIZE; -	page = pmd_to_page((pmd_t *) entry); +	mask = ~(PTRS_PER_PMD * sizeof(pmd_t) - 1); +	page = virt_to_page((void *)((unsigned long) entry & mask));  	return page->index + offset;  } | 
