aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/eeh.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c
index 289c0b37d845..0dc1865c84ce 100644
--- a/arch/powerpc/kernel/eeh.c
+++ b/arch/powerpc/kernel/eeh.c
@@ -367,10 +367,19 @@ static inline unsigned long eeh_token_to_phys(unsigned long token)
367 ptep = find_init_mm_pte(token, &hugepage_shift); 367 ptep = find_init_mm_pte(token, &hugepage_shift);
368 if (!ptep) 368 if (!ptep)
369 return token; 369 return token;
370 WARN_ON(hugepage_shift);
371 pa = pte_pfn(*ptep) << PAGE_SHIFT;
372 370
373 return pa | (token & (PAGE_SIZE-1)); 371 pa = pte_pfn(*ptep);
372
373 /* On radix we can do hugepage mappings for io, so handle that */
374 if (hugepage_shift) {
375 pa <<= hugepage_shift;
376 pa |= token & ((1ul << hugepage_shift) - 1);
377 } else {
378 pa <<= PAGE_SHIFT;
379 pa |= token & (PAGE_SIZE - 1);
380 }
381
382 return pa;
374} 383}
375 384
376/* 385/*