|
@@ -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;
|
|
|
}
|
|
|
|