Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
a4936044
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a4936044
编写于
6月 22, 2005
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/home/rmk/linux-2.6-arm
上级
9092131f
92a8cbed
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
86 addition
and
72 deletion
+86
-72
arch/arm/common/dmabounce.c
arch/arm/common/dmabounce.c
+5
-13
arch/arm/common/sa1111.c
arch/arm/common/sa1111.c
+7
-6
arch/arm/kernel/setup.c
arch/arm/kernel/setup.c
+16
-9
arch/arm/kernel/signal.c
arch/arm/kernel/signal.c
+19
-10
arch/arm/kernel/signal.h
arch/arm/kernel/signal.h
+12
-0
arch/arm/kernel/traps.c
arch/arm/kernel/traps.c
+9
-0
arch/arm/mach-clps7500/core.c
arch/arm/mach-clps7500/core.c
+2
-0
arch/arm/mach-rpc/riscpc.c
arch/arm/mach-rpc/riscpc.c
+1
-6
arch/arm/mm/init.c
arch/arm/mm/init.c
+6
-13
include/asm-arm/pgalloc.h
include/asm-arm/pgalloc.h
+9
-15
未找到文件。
arch/arm/common/dmabounce.c
浏览文件 @
a4936044
...
...
@@ -93,15 +93,12 @@ static void print_alloc_stats(struct dmabounce_device_info *device_info)
static
inline
struct
dmabounce_device_info
*
find_dmabounce_dev
(
struct
device
*
dev
)
{
struct
list_head
*
entry
;
list_for_each
(
entry
,
&
dmabounce_devs
)
{
struct
dmabounce_device_info
*
d
=
list_entry
(
entry
,
struct
dmabounce_device_info
,
node
);
struct
dmabounce_device_info
*
d
;
list_for_each_entry
(
d
,
&
dmabounce_devs
,
node
)
if
(
d
->
dev
==
dev
)
return
d
;
}
return
NULL
;
}
...
...
@@ -172,15 +169,11 @@ alloc_safe_buffer(struct dmabounce_device_info *device_info, void *ptr,
static
inline
struct
safe_buffer
*
find_safe_buffer
(
struct
dmabounce_device_info
*
device_info
,
dma_addr_t
safe_dma_addr
)
{
struct
list_head
*
entry
;
list_for_each
(
entry
,
&
device_info
->
safe_buffers
)
{
struct
safe_buffer
*
b
=
list_entry
(
entry
,
struct
safe_buffer
,
node
);
struct
safe_buffer
*
b
;
list_for_each_entry
(
b
,
&
device_info
->
safe_buffers
,
node
)
if
(
b
->
safe_dma_addr
==
safe_dma_addr
)
return
b
;
}
return
NULL
;
}
...
...
@@ -301,7 +294,6 @@ unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
__func__
,
buf
->
ptr
,
(
void
*
)
virt_to_dma
(
dev
,
buf
->
ptr
),
buf
->
safe
,
(
void
*
)
buf
->
safe_dma_addr
);
DO_STATS
(
device_info
->
bounce_count
++
);
if
(
dir
==
DMA_FROM_DEVICE
||
dir
==
DMA_BIDIRECTIONAL
)
{
...
...
arch/arm/common/sa1111.c
浏览文件 @
a4936044
...
...
@@ -721,16 +721,17 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq)
return
ret
;
}
static
int
sa1111_remove_one
(
struct
device
*
dev
,
void
*
data
)
{
device_unregister
(
dev
);
return
0
;
}
static
void
__sa1111_remove
(
struct
sa1111
*
sachip
)
{
struct
list_head
*
l
,
*
n
;
void
__iomem
*
irqbase
=
sachip
->
base
+
SA1111_INTC
;
list_for_each_safe
(
l
,
n
,
&
sachip
->
dev
->
children
)
{
struct
device
*
d
=
list_to_dev
(
l
);
device_unregister
(
d
);
}
device_for_each_child
(
sachip
->
dev
,
NULL
,
sa1111_remove_one
);
/* disable all IRQs */
sa1111_writel
(
0
,
irqbase
+
SA1111_INTEN0
);
...
...
arch/arm/kernel/setup.c
浏览文件 @
a4936044
...
...
@@ -395,6 +395,20 @@ static void __init early_initrd(char **p)
}
__early_param
(
"initrd="
,
early_initrd
);
static
void
__init
add_memory
(
unsigned
long
start
,
unsigned
long
size
)
{
/*
* Ensure that start/size are aligned to a page boundary.
* Size is appropriately rounded down, start is rounded up.
*/
size
-=
start
&
~
PAGE_MASK
;
meminfo
.
bank
[
meminfo
.
nr_banks
].
start
=
PAGE_ALIGN
(
start
);
meminfo
.
bank
[
meminfo
.
nr_banks
].
size
=
size
&
PAGE_MASK
;
meminfo
.
bank
[
meminfo
.
nr_banks
].
node
=
PHYS_TO_NID
(
start
);
meminfo
.
nr_banks
+=
1
;
}
/*
* Pick out the memory size. We look for mem=size@start,
* where start and size are "size[KkMm]"
...
...
@@ -419,10 +433,7 @@ static void __init early_mem(char **p)
if
(
**
p
==
'@'
)
start
=
memparse
(
*
p
+
1
,
p
);
meminfo
.
bank
[
meminfo
.
nr_banks
].
start
=
start
;
meminfo
.
bank
[
meminfo
.
nr_banks
].
size
=
size
;
meminfo
.
bank
[
meminfo
.
nr_banks
].
node
=
PHYS_TO_NID
(
start
);
meminfo
.
nr_banks
+=
1
;
add_memory
(
start
,
size
);
}
__early_param
(
"mem="
,
early_mem
);
...
...
@@ -564,11 +575,7 @@ static int __init parse_tag_mem32(const struct tag *tag)
tag
->
u
.
mem
.
start
,
tag
->
u
.
mem
.
size
/
1024
);
return
-
EINVAL
;
}
meminfo
.
bank
[
meminfo
.
nr_banks
].
start
=
tag
->
u
.
mem
.
start
;
meminfo
.
bank
[
meminfo
.
nr_banks
].
size
=
tag
->
u
.
mem
.
size
;
meminfo
.
bank
[
meminfo
.
nr_banks
].
node
=
PHYS_TO_NID
(
tag
->
u
.
mem
.
start
);
meminfo
.
nr_banks
+=
1
;
add_memory
(
tag
->
u
.
mem
.
start
,
tag
->
u
.
mem
.
size
);
return
0
;
}
...
...
arch/arm/kernel/signal.c
浏览文件 @
a4936044
...
...
@@ -19,6 +19,7 @@
#include <asm/unistd.h>
#include "ptrace.h"
#include "signal.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
...
...
@@ -35,7 +36,7 @@
#define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE))
#define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE))
static
const
unsigned
long
ret
codes
[
4
]
=
{
const
unsigned
long
sigreturn_
codes
[
4
]
=
{
SWI_SYS_SIGRETURN
,
SWI_THUMB_SIGRETURN
,
SWI_SYS_RT_SIGRETURN
,
SWI_THUMB_RT_SIGRETURN
};
...
...
@@ -500,17 +501,25 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka,
if
(
ka
->
sa
.
sa_flags
&
SA_SIGINFO
)
idx
+=
2
;
if
(
__put_user
(
ret
codes
[
idx
],
rc
))
if
(
__put_user
(
sigreturn_
codes
[
idx
],
rc
))
return
1
;
/*
* Ensure that the instruction cache sees
* the return code written onto the stack.
*/
flush_icache_range
((
unsigned
long
)
rc
,
(
unsigned
long
)(
rc
+
1
));
retcode
=
((
unsigned
long
)
rc
)
+
thumb
;
if
(
cpsr
&
MODE32_BIT
)
{
/*
* 32-bit code can use the new high-page
* signal return code support.
*/
retcode
=
KERN_SIGRETURN_CODE
+
(
idx
<<
2
)
+
thumb
;
}
else
{
/*
* Ensure that the instruction cache sees
* the return code written onto the stack.
*/
flush_icache_range
((
unsigned
long
)
rc
,
(
unsigned
long
)(
rc
+
1
));
retcode
=
((
unsigned
long
)
rc
)
+
thumb
;
}
}
regs
->
ARM_r0
=
usig
;
...
...
arch/arm/kernel/signal.h
0 → 100644
浏览文件 @
a4936044
/*
* linux/arch/arm/kernel/signal.h
*
* Copyright (C) 2005 Russell King.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#define KERN_SIGRETURN_CODE 0xffff0500
extern
const
unsigned
long
sigreturn_codes
[
4
];
arch/arm/kernel/traps.c
浏览文件 @
a4936044
...
...
@@ -30,6 +30,7 @@
#include <asm/traps.h>
#include "ptrace.h"
#include "signal.h"
const
char
*
processor_modes
[]
=
{
"USER_26"
,
"FIQ_26"
,
"IRQ_26"
,
"SVC_26"
,
"UK4_26"
,
"UK5_26"
,
"UK6_26"
,
"UK7_26"
,
...
...
@@ -683,6 +684,14 @@ void __init trap_init(void)
memcpy
((
void
*
)
0xffff0000
,
__vectors_start
,
__vectors_end
-
__vectors_start
);
memcpy
((
void
*
)
0xffff0200
,
__stubs_start
,
__stubs_end
-
__stubs_start
);
memcpy
((
void
*
)
0xffff1000
-
kuser_sz
,
__kuser_helper_start
,
kuser_sz
);
/*
* Copy signal return handlers into the vector page, and
* set sigreturn to be a pointer to these.
*/
memcpy
((
void
*
)
KERN_SIGRETURN_CODE
,
sigreturn_codes
,
sizeof
(
sigreturn_codes
));
flush_icache_range
(
0xffff0000
,
0xffff0000
+
PAGE_SIZE
);
modify_domain
(
DOMAIN_USER
,
DOMAIN_CLIENT
);
}
arch/arm/mach-clps7500/core.c
浏览文件 @
a4936044
...
...
@@ -26,6 +26,8 @@
#include <asm/irq.h>
#include <asm/mach-types.h>
unsigned
int
vram_size
;
static
void
cl7500_ack_irq_a
(
unsigned
int
irq
)
{
unsigned
int
val
,
mask
;
...
...
arch/arm/mach-rpc/riscpc.c
浏览文件 @
a4936044
...
...
@@ -32,10 +32,7 @@
extern
void
rpc_init_irq
(
void
);
extern
unsigned
int
vram_size
;
#if 0
unsigned
int
vram_size
;
unsigned
int
memc_ctrl_reg
;
unsigned
int
number_mfm_drives
;
...
...
@@ -63,8 +60,6 @@ static int __init parse_tag_acorn(const struct tag *tag)
__tagtable
(
ATAG_ACORN
,
parse_tag_acorn
);
#endif
static
struct
map_desc
rpc_io_desc
[]
__initdata
=
{
{
SCREEN_BASE
,
SCREEN_START
,
2
*
1048576
,
MT_DEVICE
},
/* VRAM */
{
(
u32
)
IO_BASE
,
IO_START
,
IO_SIZE
,
MT_DEVICE
},
/* IO space */
...
...
arch/arm/mm/init.c
浏览文件 @
a4936044
...
...
@@ -93,14 +93,7 @@ struct node_info {
};
#define O_PFN_DOWN(x) ((x) >> PAGE_SHIFT)
#define V_PFN_DOWN(x) O_PFN_DOWN(__pa(x))
#define O_PFN_UP(x) (PAGE_ALIGN(x) >> PAGE_SHIFT)
#define V_PFN_UP(x) O_PFN_UP(__pa(x))
#define PFN_SIZE(x) ((x) >> PAGE_SHIFT)
#define PFN_RANGE(s,e) PFN_SIZE(PAGE_ALIGN((unsigned long)(e)) - \
(((unsigned long)(s)) & PAGE_MASK))
/*
* FIXME: We really want to avoid allocating the bootmap bitmap
...
...
@@ -113,7 +106,7 @@ find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages)
{
unsigned
int
start_pfn
,
bank
,
bootmap_pfn
;
start_pfn
=
V_PFN_UP
(
&
_end
);
start_pfn
=
O_PFN_UP
(
__pa
(
&
_end
)
);
bootmap_pfn
=
0
;
for
(
bank
=
0
;
bank
<
mi
->
nr_banks
;
bank
++
)
{
...
...
@@ -122,9 +115,9 @@ find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages)
if
(
mi
->
bank
[
bank
].
node
!=
node
)
continue
;
start
=
O_PFN_UP
(
mi
->
bank
[
bank
].
start
)
;
end
=
O_PFN_DOWN
(
mi
->
bank
[
bank
].
size
+
mi
->
bank
[
bank
].
start
)
;
start
=
mi
->
bank
[
bank
].
start
>>
PAGE_SHIFT
;
end
=
(
mi
->
bank
[
bank
].
size
+
mi
->
bank
[
bank
].
start
)
>>
PAGE_SHIFT
;
if
(
end
<
start_pfn
)
continue
;
...
...
@@ -191,8 +184,8 @@ find_memend_and_nodes(struct meminfo *mi, struct node_info *np)
/*
* Get the start and end pfns for this bank
*/
start
=
O_PFN_UP
(
mi
->
bank
[
i
].
start
)
;
end
=
O_PFN_DOWN
(
mi
->
bank
[
i
].
start
+
mi
->
bank
[
i
].
size
)
;
start
=
mi
->
bank
[
i
].
start
>>
PAGE_SHIFT
;
end
=
(
mi
->
bank
[
i
].
start
+
mi
->
bank
[
i
].
size
)
>>
PAGE_SHIFT
;
if
(
np
[
node
].
start
>
start
)
np
[
node
].
start
=
start
;
...
...
include/asm-arm/pgalloc.h
浏览文件 @
a4936044
...
...
@@ -89,6 +89,13 @@ static inline void pte_free(struct page *pte)
__free_page
(
pte
);
}
static
inline
void
__pmd_populate
(
pmd_t
*
pmdp
,
unsigned
long
pmdval
)
{
pmdp
[
0
]
=
__pmd
(
pmdval
);
pmdp
[
1
]
=
__pmd
(
pmdval
+
256
*
sizeof
(
pte_t
));
flush_pmd_entry
(
pmdp
);
}
/*
* Populate the pmdp entry with a pointer to the pte. This pmd is part
* of the mm address space.
...
...
@@ -99,32 +106,19 @@ static inline void
pmd_populate_kernel
(
struct
mm_struct
*
mm
,
pmd_t
*
pmdp
,
pte_t
*
ptep
)
{
unsigned
long
pte_ptr
=
(
unsigned
long
)
ptep
;
unsigned
long
pmdval
;
BUG_ON
(
mm
!=
&
init_mm
);
/*
* The pmd must be loaded with the physical
* address of the PTE table
*/
pte_ptr
-=
PTRS_PER_PTE
*
sizeof
(
void
*
);
pmdval
=
__pa
(
pte_ptr
)
|
_PAGE_KERNEL_TABLE
;
pmdp
[
0
]
=
__pmd
(
pmdval
);
pmdp
[
1
]
=
__pmd
(
pmdval
+
256
*
sizeof
(
pte_t
));
flush_pmd_entry
(
pmdp
);
__pmd_populate
(
pmdp
,
__pa
(
pte_ptr
)
|
_PAGE_KERNEL_TABLE
);
}
static
inline
void
pmd_populate
(
struct
mm_struct
*
mm
,
pmd_t
*
pmdp
,
struct
page
*
ptep
)
{
unsigned
long
pmdval
;
BUG_ON
(
mm
==
&
init_mm
);
pmdval
=
page_to_pfn
(
ptep
)
<<
PAGE_SHIFT
|
_PAGE_USER_TABLE
;
pmdp
[
0
]
=
__pmd
(
pmdval
);
pmdp
[
1
]
=
__pmd
(
pmdval
+
256
*
sizeof
(
pte_t
));
flush_pmd_entry
(
pmdp
);
__pmd_populate
(
pmdp
,
page_to_pfn
(
ptep
)
<<
PAGE_SHIFT
|
_PAGE_USER_TABLE
);
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录