diff options
| -rw-r--r-- | arch/powerpc/kernel/eeh.c | 15 |
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 | /* |
