Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
a7595fe7
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a7595fe7
编写于
1月 05, 2010
作者:
P
Paul Mundt
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'sh/pgtable' of
git://github.com/mfleming/linux-2.6
上级
921a2208
2a5eacca
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
73 addition
and
103 deletion
+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
未找到文件。
arch/sh/include/asm/pgalloc.h
浏览文件 @
a7595fe7
...
...
@@ -6,10 +6,13 @@
#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
#include <asm/pgalloc_pmd.h>
#else
#include <asm/pgalloc_nopmd.h>
extern
void
pud_populate
(
struct
mm_struct
*
mm
,
pud_t
*
pudp
,
pmd_t
*
pmd
);
extern
pmd_t
*
pmd_alloc_one
(
struct
mm_struct
*
mm
,
unsigned
long
address
);
extern
void
pmd_free
(
struct
mm_struct
*
mm
,
pmd_t
*
pmd
);
#endif
static
inline
void
pmd_populate_kernel
(
struct
mm_struct
*
mm
,
pmd_t
*
pmd
,
...
...
@@ -67,7 +70,6 @@ do { \
static
inline
void
check_pgt_cache
(
void
)
{
__check_pgt_cache
();
quicklist_trim
(
QUICK_PT
,
NULL
,
25
,
16
);
}
...
...
arch/sh/include/asm/pgalloc_nopmd.h
已删除
100644 → 0
浏览文件 @
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
已删除
100644 → 0
浏览文件 @
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
浏览文件 @
a7595fe7
...
...
@@ -141,9 +141,9 @@ typedef pte_t *pte_addr_t;
#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
;
...
...
arch/sh/include/asm/pgtable_64.h
浏览文件 @
a7595fe7
...
...
@@ -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)
static
__inline__
void
pmd_set
(
pmd_t
*
pmdp
,
pte_t
*
ptep
)
{
pmd_val
(
*
pmdp
)
=
(
unsigned
long
)
ptep
;
}
/*
* PGD defines. Top level.
*/
...
...
@@ -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_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.
*
...
...
arch/sh/include/asm/pgtable_pmd.h
浏览文件 @
a7595fe7
...
...
@@ -17,11 +17,11 @@
#define USER_PTRS_PER_PGD 2
/* 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_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) \
printk("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e))
...
...
arch/sh/mm/Kconfig
浏览文件 @
a7595fe7
...
...
@@ -219,7 +219,7 @@ config PAGE_SIZE_4KB
config PAGE_SIZE_8KB
bool "8kB"
depends on !MMU || X2TLB
&& !PGTABLE_LEVELS_3
depends on !MMU || X2TLB
help
This enables 8kB pages as supported by SH-X2 and later MMUs.
...
...
@@ -231,7 +231,7 @@ config PAGE_SIZE_16KB
config PAGE_SIZE_64KB
bool "64kB"
depends on !MMU || CPU_SH4
&& !PGTABLE_LEVELS_3
|| CPU_SH5
depends on !MMU || CPU_SH4 || CPU_SH5
help
This enables support for 64kB pages, possible on all SH-4
CPUs and later.
...
...
arch/sh/mm/Makefile
浏览文件 @
a7595fe7
...
...
@@ -15,7 +15,7 @@ obj-y += $(cacheops-y)
mmu-y
:=
nommu.o extable_32.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-$(CONFIG_DEBUG_FS)
+=
asids-debugfs.o
...
...
arch/sh/mm/cache-sh4.c
浏览文件 @
a7595fe7
...
...
@@ -109,6 +109,7 @@ static inline void flush_cache_one(unsigned long start, unsigned long phys)
static
void
sh4_flush_dcache_page
(
void
*
arg
)
{
struct
page
*
page
=
arg
;
unsigned
long
addr
=
(
unsigned
long
)
page_address
(
page
);
#ifndef CONFIG_SMP
struct
address_space
*
mapping
=
page_mapping
(
page
);
...
...
@@ -116,16 +117,8 @@ static void sh4_flush_dcache_page(void *arg)
set_bit
(
PG_dcache_dirty
,
&
page
->
flags
);
else
#endif
{
unsigned
long
phys
=
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
);
}
flush_cache_one
(
CACHE_OC_ADDRESS_ARRAY
|
(
addr
&
shm_align_mask
),
page_to_phys
(
page
));
wmb
();
}
...
...
arch/sh/mm/pgtable.c
0 → 100644
浏览文件 @
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 */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录