.. | .. |
---|
279 | 279 | #define pud_bad(pud) (!ia64_phys_addr_valid(pud_val(pud))) |
---|
280 | 280 | #define pud_present(pud) (pud_val(pud) != 0UL) |
---|
281 | 281 | #define pud_clear(pudp) (pud_val(*(pudp)) = 0UL) |
---|
282 | | -#define pud_page_vaddr(pud) ((unsigned long) __va(pud_val(pud) & _PFN_MASK)) |
---|
| 282 | +#define pud_pgtable(pud) ((pmd_t *) __va(pud_val(pud) & _PFN_MASK)) |
---|
283 | 283 | #define pud_page(pud) virt_to_page((pud_val(pud) + PAGE_OFFSET)) |
---|
284 | 284 | |
---|
285 | 285 | #if CONFIG_PGTABLE_LEVELS == 4 |
---|
286 | | -#define pgd_none(pgd) (!pgd_val(pgd)) |
---|
287 | | -#define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd))) |
---|
288 | | -#define pgd_present(pgd) (pgd_val(pgd) != 0UL) |
---|
289 | | -#define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) |
---|
290 | | -#define pgd_page_vaddr(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK)) |
---|
291 | | -#define pgd_page(pgd) virt_to_page((pgd_val(pgd) + PAGE_OFFSET)) |
---|
| 286 | +#define p4d_none(p4d) (!p4d_val(p4d)) |
---|
| 287 | +#define p4d_bad(p4d) (!ia64_phys_addr_valid(p4d_val(p4d))) |
---|
| 288 | +#define p4d_present(p4d) (p4d_val(p4d) != 0UL) |
---|
| 289 | +#define p4d_clear(p4dp) (p4d_val(*(p4dp)) = 0UL) |
---|
| 290 | +#define p4d_pgtable(p4d) ((pud_t *) __va(p4d_val(p4d) & _PFN_MASK)) |
---|
| 291 | +#define p4d_page(p4d) virt_to_page((p4d_val(p4d) + PAGE_OFFSET)) |
---|
292 | 292 | #endif |
---|
293 | 293 | |
---|
294 | 294 | /* |
---|
.. | .. |
---|
298 | 298 | #define pte_exec(pte) ((pte_val(pte) & _PAGE_AR_RX) != 0) |
---|
299 | 299 | #define pte_dirty(pte) ((pte_val(pte) & _PAGE_D) != 0) |
---|
300 | 300 | #define pte_young(pte) ((pte_val(pte) & _PAGE_A) != 0) |
---|
301 | | -#define pte_special(pte) 0 |
---|
302 | 301 | |
---|
303 | 302 | /* |
---|
304 | 303 | * Note: we convert AR_RWX to AR_RX and AR_RW to AR_R by clearing the 2nd bit in the |
---|
.. | .. |
---|
311 | 310 | #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) |
---|
312 | 311 | #define pte_mkdirty(pte) (__pte(pte_val(pte) | _PAGE_D)) |
---|
313 | 312 | #define pte_mkhuge(pte) (__pte(pte_val(pte))) |
---|
314 | | -#define pte_mkspecial(pte) (pte) |
---|
315 | 313 | |
---|
316 | 314 | /* |
---|
317 | 315 | * Because ia64's Icache and Dcache is not coherent (on a cpu), we need to |
---|
.. | .. |
---|
366 | 364 | |
---|
367 | 365 | return (region << (PAGE_SHIFT - 6)) | l1index; |
---|
368 | 366 | } |
---|
| 367 | +#define pgd_index pgd_index |
---|
369 | 368 | |
---|
370 | | -/* The offset in the 1-level directory is given by the 3 region bits |
---|
371 | | - (61..63) and the level-1 bits. */ |
---|
372 | | -static inline pgd_t* |
---|
373 | | -pgd_offset (const struct mm_struct *mm, unsigned long address) |
---|
374 | | -{ |
---|
375 | | - return mm->pgd + pgd_index(address); |
---|
376 | | -} |
---|
377 | | - |
---|
378 | | -/* In the kernel's mapped region we completely ignore the region number |
---|
379 | | - (since we know it's in region number 5). */ |
---|
| 369 | +/* |
---|
| 370 | + * In the kernel's mapped region we know everything is in region number 5, so |
---|
| 371 | + * as an optimisation its PGD already points to the area for that region. |
---|
| 372 | + * However, this also means that we cannot use pgd_index() and we must |
---|
| 373 | + * never add the region here. |
---|
| 374 | + */ |
---|
380 | 375 | #define pgd_offset_k(addr) \ |
---|
381 | 376 | (init_mm.pgd + (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))) |
---|
382 | 377 | |
---|
.. | .. |
---|
384 | 379 | resides in the kernel-mapped segment, hence we use pgd_offset_k() |
---|
385 | 380 | here. */ |
---|
386 | 381 | #define pgd_offset_gate(mm, addr) pgd_offset_k(addr) |
---|
387 | | - |
---|
388 | | -#if CONFIG_PGTABLE_LEVELS == 4 |
---|
389 | | -/* Find an entry in the second-level page table.. */ |
---|
390 | | -#define pud_offset(dir,addr) \ |
---|
391 | | - ((pud_t *) pgd_page_vaddr(*(dir)) + (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))) |
---|
392 | | -#endif |
---|
393 | | - |
---|
394 | | -/* Find an entry in the third-level page table.. */ |
---|
395 | | -#define pmd_offset(dir,addr) \ |
---|
396 | | - ((pmd_t *) pud_page_vaddr(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) |
---|
397 | | - |
---|
398 | | -/* |
---|
399 | | - * Find an entry in the third-level page table. This looks more complicated than it |
---|
400 | | - * should be because some platforms place page tables in high memory. |
---|
401 | | - */ |
---|
402 | | -#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
---|
403 | | -#define pte_offset_kernel(dir,addr) ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr)) |
---|
404 | | -#define pte_offset_map(dir,addr) pte_offset_kernel(dir, addr) |
---|
405 | | -#define pte_unmap(pte) do { } while (0) |
---|
406 | 382 | |
---|
407 | 383 | /* atomic versions of the some PTE manipulations: */ |
---|
408 | 384 | |
---|
.. | .. |
---|
544 | 520 | |
---|
545 | 521 | # ifdef CONFIG_VIRTUAL_MEM_MAP |
---|
546 | 522 | /* arch mem_map init routine is needed due to holes in a virtual mem_map */ |
---|
547 | | -# define __HAVE_ARCH_MEMMAP_INIT |
---|
548 | | - extern void memmap_init (unsigned long size, int nid, unsigned long zone, |
---|
549 | | - unsigned long start_pfn); |
---|
| 523 | +void memmap_init(void); |
---|
| 524 | +void arch_memmap_init(unsigned long size, int nid, unsigned long zone, |
---|
| 525 | + unsigned long start_pfn); |
---|
550 | 526 | # endif /* CONFIG_VIRTUAL_MEM_MAP */ |
---|
551 | 527 | # endif /* !__ASSEMBLY__ */ |
---|
552 | 528 | |
---|
.. | .. |
---|
567 | 543 | #define KERNEL_TR_PAGE_SHIFT _PAGE_SIZE_64M |
---|
568 | 544 | #define KERNEL_TR_PAGE_SIZE (1 << KERNEL_TR_PAGE_SHIFT) |
---|
569 | 545 | |
---|
570 | | -/* |
---|
571 | | - * No page table caches to initialise |
---|
572 | | - */ |
---|
573 | | -#define pgtable_cache_init() do { } while (0) |
---|
574 | | - |
---|
575 | 546 | /* These tell get_user_pages() that the first gate page is accessible from user-level. */ |
---|
576 | 547 | #define FIXADDR_USER_START GATE_ADDR |
---|
577 | 548 | #ifdef HAVE_BUGGY_SEGREL |
---|
.. | .. |
---|
588 | 559 | |
---|
589 | 560 | |
---|
590 | 561 | #if CONFIG_PGTABLE_LEVELS == 3 |
---|
591 | | -#define __ARCH_USE_5LEVEL_HACK |
---|
592 | 562 | #include <asm-generic/pgtable-nopud.h> |
---|
593 | 563 | #endif |
---|
594 | | -#include <asm-generic/5level-fixup.h> |
---|
595 | | -#include <asm-generic/pgtable.h> |
---|
| 564 | +#include <asm-generic/pgtable-nop4d.h> |
---|
596 | 565 | |
---|
597 | 566 | #endif /* _ASM_IA64_PGTABLE_H */ |
---|