Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
a7595fe7
Commit
a7595fe7
authored
Jan 05, 2010
by
Paul Mundt
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'sh/pgtable' of
git://github.com/mfleming/linux-2.6
parents
921a2208
2a5eacca
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
73 additions
and
103 deletions
+73
-103
arch/sh/include/asm/pgalloc.h
arch/sh/include/asm/pgalloc.h
+6
-4
arch/sh/include/asm/pgalloc_nopmd.h
arch/sh/include/asm/pgalloc_nopmd.h
+0
-30
arch/sh/include/asm/pgalloc_pmd.h
arch/sh/include/asm/pgalloc_pmd.h
+0
-41
arch/sh/include/asm/pgtable.h
arch/sh/include/asm/pgtable.h
+2
-2
arch/sh/include/asm/pgtable_64.h
arch/sh/include/asm/pgtable_64.h
+0
-11
arch/sh/include/asm/pgtable_pmd.h
arch/sh/include/asm/pgtable_pmd.h
+2
-2
arch/sh/mm/Kconfig
arch/sh/mm/Kconfig
+2
-2
arch/sh/mm/Makefile
arch/sh/mm/Makefile
+1
-1
arch/sh/mm/cache-sh4.c
arch/sh/mm/cache-sh4.c
+3
-10
arch/sh/mm/pgtable.c
arch/sh/mm/pgtable.c
+57
-0
No files found.
arch/sh/include/asm/pgalloc.h
View file @
a7595fe7
...
@@ -6,10 +6,13 @@
...
@@ -6,10 +6,13 @@
#define QUICK_PT 1
/* Other page table pages that are zero on free */
#define QUICK_PT 1
/* Other page table pages that are zero on free */
extern
pgd_t
*
pgd_alloc
(
struct
mm_struct
*
);
extern
void
pgd_free
(
struct
mm_struct
*
mm
,
pgd_t
*
pgd
);
#ifdef CONFIG_PGTABLE_LEVELS_3
#ifdef CONFIG_PGTABLE_LEVELS_3
#include <asm/pgalloc_pmd.h>
extern
void
pud_populate
(
struct
mm_struct
*
mm
,
pud_t
*
pudp
,
pmd_t
*
pmd
);
#else
extern
pmd_t
*
pmd_alloc_one
(
struct
mm_struct
*
mm
,
unsigned
long
address
);
#include <asm/pgalloc_nopmd.h>
extern
void
pmd_free
(
struct
mm_struct
*
mm
,
pmd_t
*
pmd
);
#endif
#endif
static
inline
void
pmd_populate_kernel
(
struct
mm_struct
*
mm
,
pmd_t
*
pmd
,
static
inline
void
pmd_populate_kernel
(
struct
mm_struct
*
mm
,
pmd_t
*
pmd
,
...
@@ -67,7 +70,6 @@ do { \
...
@@ -67,7 +70,6 @@ do { \
static
inline
void
check_pgt_cache
(
void
)
static
inline
void
check_pgt_cache
(
void
)
{
{
__check_pgt_cache
();
quicklist_trim
(
QUICK_PT
,
NULL
,
25
,
16
);
quicklist_trim
(
QUICK_PT
,
NULL
,
25
,
16
);
}
}
...
...
arch/sh/include/asm/pgalloc_nopmd.h
deleted
100644 → 0
View file @
921a2208
#ifndef __ASM_SH_PGALLOC_NOPMD_H
#define __ASM_SH_PGALLOC_NOPMD_H
#define QUICK_PGD 0
/* We preserve special mappings over free */
static
inline
void
pgd_ctor
(
void
*
x
)
{
pgd_t
*
pgd
=
x
;
memcpy
(
pgd
+
USER_PTRS_PER_PGD
,
swapper_pg_dir
+
USER_PTRS_PER_PGD
,
(
PTRS_PER_PGD
-
USER_PTRS_PER_PGD
)
*
sizeof
(
pgd_t
));
}
static
inline
pgd_t
*
pgd_alloc
(
struct
mm_struct
*
mm
)
{
return
quicklist_alloc
(
QUICK_PGD
,
GFP_KERNEL
|
__GFP_REPEAT
,
pgd_ctor
);
}
static
inline
void
pgd_free
(
struct
mm_struct
*
mm
,
pgd_t
*
pgd
)
{
quicklist_free
(
QUICK_PGD
,
NULL
,
pgd
);
}
static
inline
void
__check_pgt_cache
(
void
)
{
quicklist_trim
(
QUICK_PGD
,
NULL
,
25
,
16
);
}
#endif
/* __ASM_SH_PGALLOC_NOPMD_H */
arch/sh/include/asm/pgalloc_pmd.h
deleted
100644 → 0
View file @
921a2208
#ifndef __ASM_SH_PGALLOC_PMD_H
#define __ASM_SH_PGALLOC_PMD_H
static
inline
pgd_t
*
pgd_alloc
(
struct
mm_struct
*
mm
)
{
pgd_t
*
pgd
;
int
i
;
pgd
=
kzalloc
(
sizeof
(
*
pgd
)
*
PTRS_PER_PGD
,
GFP_KERNEL
|
__GFP_REPEAT
);
for
(
i
=
USER_PTRS_PER_PGD
;
i
<
PTRS_PER_PGD
;
i
++
)
pgd
[
i
]
=
swapper_pg_dir
[
i
];
return
pgd
;
}
static
inline
void
pgd_free
(
struct
mm_struct
*
mm
,
pgd_t
*
pgd
)
{
kfree
(
pgd
);
}
static
inline
void
__check_pgt_cache
(
void
)
{
}
static
inline
void
pud_populate
(
struct
mm_struct
*
mm
,
pud_t
*
pud
,
pmd_t
*
pmd
)
{
set_pud
(
pud
,
__pud
((
unsigned
long
)
pmd
));
}
static
inline
pmd_t
*
pmd_alloc_one
(
struct
mm_struct
*
mm
,
unsigned
long
address
)
{
return
quicklist_alloc
(
QUICK_PT
,
GFP_KERNEL
|
__GFP_REPEAT
,
NULL
);
}
static
inline
void
pmd_free
(
struct
mm_struct
*
mm
,
pmd_t
*
pmd
)
{
quicklist_free
(
QUICK_PT
,
NULL
,
pmd
);
}
#endif
/* __ASM_SH_PGALLOC_PMD_H */
arch/sh/include/asm/pgtable.h
View file @
a7595fe7
...
@@ -141,9 +141,9 @@ typedef pte_t *pte_addr_t;
...
@@ -141,9 +141,9 @@ typedef pte_t *pte_addr_t;
#define pte_pfn(x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
#define pte_pfn(x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
/*
/*
*
No page table caches to initialise
*
Initialise the page table caches
*/
*/
#define pgtable_cache_init() do { } while (0)
extern
void
pgtable_cache_init
(
void
);
struct
vm_area_struct
;
struct
vm_area_struct
;
...
...
arch/sh/include/asm/pgtable_64.h
View file @
a7595fe7
...
@@ -43,11 +43,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)
...
@@ -43,11 +43,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)
}
}
#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
static
__inline__
void
pmd_set
(
pmd_t
*
pmdp
,
pte_t
*
ptep
)
{
pmd_val
(
*
pmdp
)
=
(
unsigned
long
)
ptep
;
}
/*
/*
* PGD defines. Top level.
* PGD defines. Top level.
*/
*/
...
@@ -202,12 +197,6 @@ static __inline__ void pmd_set(pmd_t *pmdp,pte_t *ptep)
...
@@ -202,12 +197,6 @@ static __inline__ void pmd_set(pmd_t *pmdp,pte_t *ptep)
#define pgprot_noncached(x) __pgprot(((x).pgprot & ~(_PAGE_CACHABLE)) | _PAGE_DEVICE)
#define pgprot_noncached(x) __pgprot(((x).pgprot & ~(_PAGE_CACHABLE)) | _PAGE_DEVICE)
#define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~_PAGE_CACHABLE)
#define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~_PAGE_CACHABLE)
/*
* Handling allocation failures during page table setup.
*/
extern
void
__handle_bad_pmd_kernel
(
pmd_t
*
pmd
);
#define __handle_bad_pmd(x) __handle_bad_pmd_kernel(x)
/*
/*
* PTE level access routines.
* PTE level access routines.
*
*
...
...
arch/sh/include/asm/pgtable_pmd.h
View file @
a7595fe7
...
@@ -17,11 +17,11 @@
...
@@ -17,11 +17,11 @@
#define USER_PTRS_PER_PGD 2
#define USER_PTRS_PER_PGD 2
/* PMD bits */
/* PMD bits */
#define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT -
3
))
#define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT -
PTE_MAGNITUDE
))
#define PMD_SIZE (1UL << PMD_SHIFT)
#define PMD_SIZE (1UL << PMD_SHIFT)
#define PMD_MASK (~(PMD_SIZE-1))
#define PMD_MASK (~(PMD_SIZE-1))
#define PTRS_PER_PMD (
PAGE_SIZE / sizeof(pmd_t)
)
#define PTRS_PER_PMD (
(1 << PGDIR_SHIFT) / PMD_SIZE
)
#define pmd_ERROR(e) \
#define pmd_ERROR(e) \
printk("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e))
printk("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e))
...
...
arch/sh/mm/Kconfig
View file @
a7595fe7
...
@@ -219,7 +219,7 @@ config PAGE_SIZE_4KB
...
@@ -219,7 +219,7 @@ config PAGE_SIZE_4KB
config PAGE_SIZE_8KB
config PAGE_SIZE_8KB
bool "8kB"
bool "8kB"
depends on !MMU || X2TLB
&& !PGTABLE_LEVELS_3
depends on !MMU || X2TLB
help
help
This enables 8kB pages as supported by SH-X2 and later MMUs.
This enables 8kB pages as supported by SH-X2 and later MMUs.
...
@@ -231,7 +231,7 @@ config PAGE_SIZE_16KB
...
@@ -231,7 +231,7 @@ config PAGE_SIZE_16KB
config PAGE_SIZE_64KB
config PAGE_SIZE_64KB
bool "64kB"
bool "64kB"
depends on !MMU || CPU_SH4
&& !PGTABLE_LEVELS_3
|| CPU_SH5
depends on !MMU || CPU_SH4 || CPU_SH5
help
help
This enables support for 64kB pages, possible on all SH-4
This enables support for 64kB pages, possible on all SH-4
CPUs and later.
CPUs and later.
...
...
arch/sh/mm/Makefile
View file @
a7595fe7
...
@@ -15,7 +15,7 @@ obj-y += $(cacheops-y)
...
@@ -15,7 +15,7 @@ obj-y += $(cacheops-y)
mmu-y
:=
nommu.o extable_32.o
mmu-y
:=
nommu.o extable_32.o
mmu-$(CONFIG_MMU)
:=
extable_
$(BITS)
.o fault_
$(BITS)
.o
\
mmu-$(CONFIG_MMU)
:=
extable_
$(BITS)
.o fault_
$(BITS)
.o
\
ioremap_
$(BITS)
.o kmap.o tlbflush_
$(BITS)
.o
ioremap_
$(BITS)
.o kmap.o
pgtable.o
tlbflush_
$(BITS)
.o
obj-y
+=
$
(
mmu-y
)
obj-y
+=
$
(
mmu-y
)
obj-$(CONFIG_DEBUG_FS)
+=
asids-debugfs.o
obj-$(CONFIG_DEBUG_FS)
+=
asids-debugfs.o
...
...
arch/sh/mm/cache-sh4.c
View file @
a7595fe7
...
@@ -109,6 +109,7 @@ static inline void flush_cache_one(unsigned long start, unsigned long phys)
...
@@ -109,6 +109,7 @@ static inline void flush_cache_one(unsigned long start, unsigned long phys)
static
void
sh4_flush_dcache_page
(
void
*
arg
)
static
void
sh4_flush_dcache_page
(
void
*
arg
)
{
{
struct
page
*
page
=
arg
;
struct
page
*
page
=
arg
;
unsigned
long
addr
=
(
unsigned
long
)
page_address
(
page
);
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
struct
address_space
*
mapping
=
page_mapping
(
page
);
struct
address_space
*
mapping
=
page_mapping
(
page
);
...
@@ -116,16 +117,8 @@ static void sh4_flush_dcache_page(void *arg)
...
@@ -116,16 +117,8 @@ static void sh4_flush_dcache_page(void *arg)
set_bit
(
PG_dcache_dirty
,
&
page
->
flags
);
set_bit
(
PG_dcache_dirty
,
&
page
->
flags
);
else
else
#endif
#endif
{
flush_cache_one
(
CACHE_OC_ADDRESS_ARRAY
|
unsigned
long
phys
=
page_to_phys
(
page
);
(
addr
&
shm_align_mask
),
page_to_phys
(
page
));
unsigned
long
addr
=
CACHE_OC_ADDRESS_ARRAY
;
int
i
,
n
;
/* Loop all the D-cache */
n
=
boot_cpu_data
.
dcache
.
n_aliases
;
for
(
i
=
0
;
i
<
n
;
i
++
,
addr
+=
PAGE_SIZE
)
flush_cache_one
(
addr
,
phys
);
}
wmb
();
wmb
();
}
}
...
...
arch/sh/mm/pgtable.c
0 → 100644
View file @
a7595fe7
#include <linux/mm.h>
#define PGALLOC_GFP GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO
static
struct
kmem_cache
*
pgd_cachep
;
#ifdef CONFIG_PGTABLE_LEVELS_3
static
struct
kmem_cache
*
pmd_cachep
;
#endif
void
pgd_ctor
(
void
*
x
)
{
pgd_t
*
pgd
=
x
;
memcpy
(
pgd
+
USER_PTRS_PER_PGD
,
swapper_pg_dir
+
USER_PTRS_PER_PGD
,
(
PTRS_PER_PGD
-
USER_PTRS_PER_PGD
)
*
sizeof
(
pgd_t
));
}
void
pgtable_cache_init
(
void
)
{
pgd_cachep
=
kmem_cache_create
(
"pgd_cache"
,
PTRS_PER_PGD
*
(
1
<<
PTE_MAGNITUDE
),
PAGE_SIZE
,
SLAB_PANIC
,
pgd_ctor
);
#ifdef CONFIG_PGTABLE_LEVELS_3
pmd_cachep
=
kmem_cache_create
(
"pmd_cache"
,
PTRS_PER_PMD
*
(
1
<<
PTE_MAGNITUDE
),
PAGE_SIZE
,
SLAB_PANIC
,
NULL
);
#endif
}
pgd_t
*
pgd_alloc
(
struct
mm_struct
*
mm
)
{
return
kmem_cache_alloc
(
pgd_cachep
,
PGALLOC_GFP
);
}
void
pgd_free
(
struct
mm_struct
*
mm
,
pgd_t
*
pgd
)
{
kmem_cache_free
(
pgd_cachep
,
pgd
);
}
#ifdef CONFIG_PGTABLE_LEVELS_3
void
pud_populate
(
struct
mm_struct
*
mm
,
pud_t
*
pud
,
pmd_t
*
pmd
)
{
set_pud
(
pud
,
__pud
((
unsigned
long
)
pmd
));
}
pmd_t
*
pmd_alloc_one
(
struct
mm_struct
*
mm
,
unsigned
long
address
)
{
return
kmem_cache_alloc
(
pmd_cachep
,
PGALLOC_GFP
);
}
void
pmd_free
(
struct
mm_struct
*
mm
,
pmd_t
*
pmd
)
{
kmem_cache_free
(
pmd_cachep
,
pmd
);
}
#endif
/* CONFIG_PGTABLE_LEVELS_3 */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment