summaryrefslogtreecommitdiffstats
path: root/include/asm-sparc64/pgtable.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1999-06-13 16:29:25 +0000
committerRalf Baechle <ralf@linux-mips.org>1999-06-13 16:29:25 +0000
commitdb7d4daea91e105e3859cf461d7e53b9b77454b2 (patch)
tree9bb65b95440af09e8aca63abe56970dd3360cc57 /include/asm-sparc64/pgtable.h
parent9c1c01ead627bdda9211c9abd5b758d6c687d8ac (diff)
Merge with Linux 2.2.8.
Diffstat (limited to 'include/asm-sparc64/pgtable.h')
-rw-r--r--include/asm-sparc64/pgtable.h26
1 files changed, 16 insertions, 10 deletions
diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h
index c074344a4..b4782e72f 100644
--- a/include/asm-sparc64/pgtable.h
+++ b/include/asm-sparc64/pgtable.h
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.96 1998/10/27 23:28:42 davem Exp $
+/* $Id: pgtable.h,v 1.103 1999/03/28 08:40:04 davem Exp $
* pgtable.h: SpitFire page table operations.
*
* Copyright 1996,1997 David S. Miller (davem@caip.rutgers.edu)
@@ -14,6 +14,7 @@
#ifndef __ASSEMBLY__
#include <linux/mm.h>
+#include <linux/pagemap.h>
#endif
#include <asm/spitfire.h>
#include <asm/asi.h>
@@ -106,8 +107,9 @@
#define PAGE_NONE __pgprot (_PAGE_PRESENT | _PAGE_ACCESSED)
+/* Don't set the TTE _PAGE_W bit here, else the dirty bit never gets set. */
#define PAGE_SHARED __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \
- __ACCESS_BITS | _PAGE_W | _PAGE_WRITE)
+ __ACCESS_BITS | _PAGE_WRITE)
#define PAGE_COPY __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \
__ACCESS_BITS)
@@ -250,11 +252,13 @@ extern __inline__ void flush_tlb_page(struct vm_area_struct *vma, unsigned long
#define mk_pte_phys(physpage, pgprot) (__pte((physpage) | pgprot_val(pgprot)))
#define pte_modify(_pte, newprot) \
(pte_val(_pte) = ((pte_val(_pte) & _PAGE_CHG_MASK) | pgprot_val(newprot)))
-#define pmd_set(pmdp, ptep) (pmd_val(*(pmdp)) = __pa((unsigned long) (ptep)))
-#define pgd_set(pgdp, pmdp) (pgd_val(*(pgdp)) = __pa((unsigned long) (pmdp)))
+#define pmd_set(pmdp, ptep) \
+ (pmd_val(*(pmdp)) = (__pa((unsigned long) (ptep)) >> 11UL))
+#define pgd_set(pgdp, pmdp) \
+ (pgd_val(*(pgdp)) = (__pa((unsigned long) (pmdp)) >> 11UL))
#define pte_page(pte) ((unsigned long) __va(((pte_val(pte)&~PAGE_OFFSET)&~(0xfffUL))))
-#define pmd_page(pmd) ((unsigned long) __va(pmd_val(pmd)))
-#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd)))
+#define pmd_page(pmd) ((unsigned long) __va((pmd_val(pmd)<<11UL)))
+#define pgd_page(pgd) ((unsigned long) __va((pgd_val(pgd)<<11UL)))
#define pte_none(pte) (!pte_val(pte))
#define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT)
#define pte_clear(pte) (pte_val(*(pte)) = 0UL)
@@ -329,8 +333,8 @@ static __inline__ pte_t pte_mkdirty(pte_t _pte)
extern struct pgtable_cache_struct {
unsigned long *pgd_cache;
unsigned long *pte_cache;
- unsigned long pgcache_size;
- unsigned long pgdcache_size;
+ unsigned int pgcache_size;
+ unsigned int pgdcache_size;
} pgt_quicklists;
#endif
#define pgd_quicklist (pgt_quicklists.pgd_cache)
@@ -371,7 +375,7 @@ extern __inline__ pgd_t *get_pgd_fast(void)
(unsigned long)ret->pprev_hash = mask;
if (!mask)
pgd_quicklist = (unsigned long *)ret->next_hash;
- ret = (struct page *) (page_address(ret) + off);
+ ret = (struct page *)(page_address(ret) + off);
pgd_cache_size--;
} else {
ret = (struct page *) __get_free_page(GFP_KERNEL);
@@ -519,7 +523,7 @@ extern pgd_t swapper_pg_dir[1];
extern inline void SET_PAGE_DIR(struct task_struct *tsk, pgd_t *pgdir)
{
- if(pgdir != swapper_pg_dir && tsk->mm == current->mm) {
+ if(pgdir != swapper_pg_dir && tsk == current) {
register unsigned long paddr asm("o5");
paddr = __pa(pgdir);
@@ -642,9 +646,11 @@ __get_iospace (unsigned long addr)
extern void * module_map (unsigned long size);
extern void module_unmap (void *addr);
+extern unsigned long *sparc64_valid_addr_bitmap;
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
#define PageSkip(page) (test_bit(PG_skip, &(page)->flags))
+#define kern_addr_valid(addr) (test_bit(__pa((unsigned long)(addr))>>22, sparc64_valid_addr_bitmap))
extern int io_remap_page_range(unsigned long from, unsigned long offset,
unsigned long size, pgprot_t prot, int space);