aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/include/asm/pgalloc_32.h
diff options
context:
space:
mode:
authorSam Ravnborg <sam@ravnborg.org>2012-05-13 02:40:27 -0400
committerDavid S. Miller <davem@davemloft.net>2012-05-13 15:51:52 -0400
commit642ea3ed9c652bb9e105e55afcb9ad15b040f71f (patch)
treef4cf27f0f16277a03f997be6dc2b61e7e8980f82 /arch/sparc/include/asm/pgalloc_32.h
parent5471fa6265a1facadcd593d995a76804fc641106 (diff)
sparc32: drop btfixup in pgalloc_32.h
Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/include/asm/pgalloc_32.h')
-rw-r--r--arch/sparc/include/asm/pgalloc_32.h73
1 files changed, 49 insertions, 24 deletions
diff --git a/arch/sparc/include/asm/pgalloc_32.h b/arch/sparc/include/asm/pgalloc_32.h
index d7ec897eae5b..47bf660ca2e3 100644
--- a/arch/sparc/include/asm/pgalloc_32.h
+++ b/arch/sparc/include/asm/pgalloc_32.h
@@ -4,8 +4,11 @@
4#include <linux/kernel.h> 4#include <linux/kernel.h>
5#include <linux/sched.h> 5#include <linux/sched.h>
6 6
7#include <asm/page.h> 7#include <asm/pgtsrmmu.h>
8#include <asm/btfixup.h> 8#include <asm/btfixup.h>
9#include <asm/pgtable.h>
10#include <asm/vaddrs.h>
11#include <asm/page.h>
9 12
10struct page; 13struct page;
11 14
@@ -15,6 +18,10 @@ extern struct pgtable_cache_struct {
15 unsigned long pgtable_cache_sz; 18 unsigned long pgtable_cache_sz;
16 unsigned long pgd_cache_sz; 19 unsigned long pgd_cache_sz;
17} pgt_quicklists; 20} pgt_quicklists;
21
22unsigned long srmmu_get_nocache(int size, int align);
23void srmmu_free_nocache(unsigned long vaddr, int size);
24
18#define pgd_quicklist (pgt_quicklists.pgd_cache) 25#define pgd_quicklist (pgt_quicklists.pgd_cache)
19#define pmd_quicklist ((unsigned long *)0) 26#define pmd_quicklist ((unsigned long *)0)
20#define pte_quicklist (pgt_quicklists.pte_cache) 27#define pte_quicklist (pgt_quicklists.pte_cache)
@@ -23,44 +30,62 @@ extern struct pgtable_cache_struct {
23 30
24#define check_pgt_cache() do { } while (0) 31#define check_pgt_cache() do { } while (0)
25 32
26BTFIXUPDEF_CALL(pgd_t *, get_pgd_fast, void) 33pgd_t *get_pgd_fast(void);
27#define get_pgd_fast() BTFIXUP_CALL(get_pgd_fast)() 34static inline void free_pgd_fast(pgd_t *pgd)
28 35{
29BTFIXUPDEF_CALL(void, free_pgd_fast, pgd_t *) 36 srmmu_free_nocache((unsigned long)pgd, SRMMU_PGD_TABLE_SIZE);
30#define free_pgd_fast(pgd) BTFIXUP_CALL(free_pgd_fast)(pgd) 37}
31 38
32#define pgd_free(mm, pgd) free_pgd_fast(pgd) 39#define pgd_free(mm, pgd) free_pgd_fast(pgd)
33#define pgd_alloc(mm) get_pgd_fast() 40#define pgd_alloc(mm) get_pgd_fast()
34 41
35BTFIXUPDEF_CALL(void, pgd_set, pgd_t *, pmd_t *) 42static inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp)
36#define pgd_set(pgdp,pmdp) BTFIXUP_CALL(pgd_set)(pgdp,pmdp) 43{
44 unsigned long pa = __nocache_pa((unsigned long)pmdp);
45
46 set_pte((pte_t *)pgdp, (SRMMU_ET_PTD | (pa >> 4)));
47}
48
37#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD) 49#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD)
38 50
39BTFIXUPDEF_CALL(pmd_t *, pmd_alloc_one, struct mm_struct *, unsigned long) 51static inline pmd_t *pmd_alloc_one(struct mm_struct *mm,
40#define pmd_alloc_one(mm, address) BTFIXUP_CALL(pmd_alloc_one)(mm, address) 52 unsigned long address)
53{
54 return (pmd_t *)srmmu_get_nocache(SRMMU_PMD_TABLE_SIZE,
55 SRMMU_PMD_TABLE_SIZE);
56}
41 57
42BTFIXUPDEF_CALL(void, free_pmd_fast, pmd_t *) 58static inline void free_pmd_fast(pmd_t * pmd)
43#define free_pmd_fast(pmd) BTFIXUP_CALL(free_pmd_fast)(pmd) 59{
60 srmmu_free_nocache((unsigned long)pmd, SRMMU_PMD_TABLE_SIZE);
61}
44 62
45#define pmd_free(mm, pmd) free_pmd_fast(pmd) 63#define pmd_free(mm, pmd) free_pmd_fast(pmd)
46#define __pmd_free_tlb(tlb, pmd, addr) pmd_free((tlb)->mm, pmd) 64#define __pmd_free_tlb(tlb, pmd, addr) pmd_free((tlb)->mm, pmd)
47 65
48BTFIXUPDEF_CALL(void, pmd_populate, pmd_t *, struct page *) 66void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *ptep);
49#define pmd_populate(MM, PMD, PTE) BTFIXUP_CALL(pmd_populate)(PMD, PTE)
50#define pmd_pgtable(pmd) pmd_page(pmd) 67#define pmd_pgtable(pmd) pmd_page(pmd)
51BTFIXUPDEF_CALL(void, pmd_set, pmd_t *, pte_t *)
52#define pmd_populate_kernel(MM, PMD, PTE) BTFIXUP_CALL(pmd_set)(PMD, PTE)
53 68
54BTFIXUPDEF_CALL(pgtable_t , pte_alloc_one, struct mm_struct *, unsigned long) 69void pmd_set(pmd_t *pmdp, pte_t *ptep);
55#define pte_alloc_one(mm, address) BTFIXUP_CALL(pte_alloc_one)(mm, address) 70#define pmd_populate_kernel(MM, PMD, PTE) pmd_set(PMD, PTE)
56BTFIXUPDEF_CALL(pte_t *, pte_alloc_one_kernel, struct mm_struct *, unsigned long) 71
57#define pte_alloc_one_kernel(mm, addr) BTFIXUP_CALL(pte_alloc_one_kernel)(mm, addr) 72pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address);
73
74static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
75 unsigned long address)
76{
77 return (pte_t *)srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
78}
79
80
81static inline void free_pte_fast(pte_t *pte)
82{
83 srmmu_free_nocache((unsigned long)pte, PTE_SIZE);
84}
58 85
59BTFIXUPDEF_CALL(void, free_pte_fast, pte_t *) 86#define pte_free_kernel(mm, pte) free_pte_fast(pte)
60#define pte_free_kernel(mm, pte) BTFIXUP_CALL(free_pte_fast)(pte)
61 87
62BTFIXUPDEF_CALL(void, pte_free, pgtable_t ) 88void pte_free(struct mm_struct * mm, pgtable_t pte);
63#define pte_free(mm, pte) BTFIXUP_CALL(pte_free)(pte)
64#define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte) 89#define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte)
65 90
66#endif /* _SPARC_PGALLOC_H */ 91#endif /* _SPARC_PGALLOC_H */