Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
7e568e62
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
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看板
提交
7e568e62
编写于
6月 28, 2005
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/home/rmk/linux-2.6-arm
上级
adb2705a
50273978
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
207 addition
and
4 deletion
+207
-4
arch/arm/Kconfig
arch/arm/Kconfig
+5
-0
arch/arm/mach-s3c2410/irq.c
arch/arm/mach-s3c2410/irq.c
+4
-3
arch/arm/oprofile/Makefile
arch/arm/oprofile/Makefile
+1
-1
arch/arm/oprofile/backtrace.c
arch/arm/oprofile/backtrace.c
+144
-0
arch/arm/oprofile/init.c
arch/arm/oprofile/init.c
+2
-0
arch/arm/oprofile/op_arm_model.h
arch/arm/oprofile/op_arm_model.h
+2
-0
include/asm-arm/arch-s3c2410/audio.h
include/asm-arm/arch-s3c2410/audio.h
+49
-0
未找到文件。
arch/arm/Kconfig
浏览文件 @
7e568e62
...
...
@@ -361,6 +361,11 @@ config NO_IDLE_HZ
Alternatively, if you want dynamic tick automatically enabled
during boot, pass "dyntick=enable" via the kernel command string.
Please note that dynamic tick may affect the accuracy of
timekeeping on some platforms depending on the implementation.
Currently at least OMAP platform is known to have accurate
timekeeping with dynamic tick.
config ARCH_DISCONTIGMEM_ENABLE
bool
default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM)
...
...
arch/arm/mach-s3c2410/irq.c
浏览文件 @
7e568e62
...
...
@@ -40,8 +40,11 @@
* 04-Nov-2004 Ben Dooks
* Fix standard IRQ wake for EINT0..4 and RTC
*
* 22-Feb-200
4
Ben Dooks
* 22-Feb-200
5
Ben Dooks
* Fixed edge-triggering on ADC IRQ
*
* 28-Jun-2005 Ben Dooks
* Mark IRQ_LCD valid
*/
#include <linux/init.h>
...
...
@@ -366,7 +369,6 @@ static struct irqchip s3c_irq_eint0t4 = {
#define INTMSK_UART1 (1UL << (IRQ_UART1 - IRQ_EINT0))
#define INTMSK_UART2 (1UL << (IRQ_UART2 - IRQ_EINT0))
#define INTMSK_ADCPARENT (1UL << (IRQ_ADCPARENT - IRQ_EINT0))
#define INTMSK_LCD (1UL << (IRQ_LCD - IRQ_EINT0))
static
inline
void
s3c_irqsub_mask
(
unsigned
int
irqno
,
unsigned
int
parentbit
,
...
...
@@ -716,7 +718,6 @@ void __init s3c24xx_init_irq(void)
case
IRQ_UART0
:
case
IRQ_UART1
:
case
IRQ_UART2
:
case
IRQ_LCD
:
case
IRQ_ADCPARENT
:
set_irq_chip
(
irqno
,
&
s3c_irq_level_chip
);
set_irq_handler
(
irqno
,
do_level_IRQ
);
...
...
arch/arm/oprofile/Makefile
浏览文件 @
7e568e62
...
...
@@ -6,6 +6,6 @@ DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \
oprofilefs.o oprofile_stats.o
\
timer_int.o
)
oprofile-y
:=
$(DRIVER_OBJS)
init.o
oprofile-y
:=
$(DRIVER_OBJS)
init.o
backtrace.o
oprofile-$(CONFIG_CPU_XSCALE)
+=
common.o op_model_xscale.o
arch/arm/oprofile/backtrace.c
0 → 100644
浏览文件 @
7e568e62
/*
* Arm specific backtracing code for oprofile
*
* Copyright 2005 Openedhand Ltd.
*
* Author: Richard Purdie <rpurdie@openedhand.com>
*
* Based on i386 oprofile backtrace code by John Levon, David Smith
*
* 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.
*
*/
#include <linux/oprofile.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <asm/ptrace.h>
#include <asm/uaccess.h>
/*
* The registers we're interested in are at the end of the variable
* length saved register structure. The fp points at the end of this
* structure so the address of this struct is:
* (struct frame_tail *)(xxx->fp)-1
*/
struct
frame_tail
{
struct
frame_tail
*
fp
;
unsigned
long
sp
;
unsigned
long
lr
;
}
__attribute__
((
packed
));
#ifdef CONFIG_FRAME_POINTER
static
struct
frame_tail
*
kernel_backtrace
(
struct
frame_tail
*
tail
)
{
oprofile_add_trace
(
tail
->
lr
);
/* frame pointers should strictly progress back up the stack
* (towards higher addresses) */
if
(
tail
>=
tail
->
fp
)
return
NULL
;
return
tail
->
fp
-
1
;
}
#endif
static
struct
frame_tail
*
user_backtrace
(
struct
frame_tail
*
tail
)
{
struct
frame_tail
buftail
;
/* hardware pte might not be valid due to dirty/accessed bit emulation
* so we use copy_from_user and benefit from exception fixups */
if
(
copy_from_user
(
&
buftail
,
tail
,
sizeof
(
struct
frame_tail
)))
return
NULL
;
oprofile_add_trace
(
buftail
.
lr
);
/* frame pointers should strictly progress back up the stack
* (towards higher addresses) */
if
(
tail
>=
buftail
.
fp
)
return
NULL
;
return
buftail
.
fp
-
1
;
}
/* Compare two addresses and see if they're on the same page */
#define CMP_ADDR_EQUAL(x,y,offset) ((((unsigned long) x) >> PAGE_SHIFT) \
== ((((unsigned long) y) + offset) >> PAGE_SHIFT))
/* check that the page(s) containing the frame tail are present */
static
int
pages_present
(
struct
frame_tail
*
tail
)
{
struct
mm_struct
*
mm
=
current
->
mm
;
if
(
!
check_user_page_readable
(
mm
,
(
unsigned
long
)
tail
))
return
0
;
if
(
CMP_ADDR_EQUAL
(
tail
,
tail
,
8
))
return
1
;
if
(
!
check_user_page_readable
(
mm
,
((
unsigned
long
)
tail
)
+
8
))
return
0
;
return
1
;
}
/*
* | | /\ Higher addresses
* | |
* --------------- stack base (address of current_thread_info)
* | thread info |
* . .
* | stack |
* --------------- saved regs->ARM_fp value if valid (frame_tail address)
* . .
* --------------- struct pt_regs stored on stack (struct pt_regs *)
* | |
* . .
* | |
* --------------- %esp
* | |
* | | \/ Lower addresses
*
* Thus, &pt_regs <-> stack base restricts the valid(ish) fp values
*/
static
int
valid_kernel_stack
(
struct
frame_tail
*
tail
,
struct
pt_regs
*
regs
)
{
unsigned
long
tailaddr
=
(
unsigned
long
)
tail
;
unsigned
long
stack
=
(
unsigned
long
)
regs
;
unsigned
long
stack_base
=
(
stack
&
~
(
THREAD_SIZE
-
1
))
+
THREAD_SIZE
;
return
(
tailaddr
>
stack
)
&&
(
tailaddr
<
stack_base
);
}
void
arm_backtrace
(
struct
pt_regs
const
*
regs
,
unsigned
int
depth
)
{
struct
frame_tail
*
tail
;
unsigned
long
last_address
=
0
;
tail
=
((
struct
frame_tail
*
)
regs
->
ARM_fp
)
-
1
;
if
(
!
user_mode
(
regs
))
{
#ifdef CONFIG_FRAME_POINTER
while
(
depth
--
&&
tail
&&
valid_kernel_stack
(
tail
,
regs
))
{
tail
=
kernel_backtrace
(
tail
);
}
#endif
return
;
}
while
(
depth
--
&&
tail
&&
!
((
unsigned
long
)
tail
&
3
))
{
if
((
!
CMP_ADDR_EQUAL
(
last_address
,
tail
,
0
)
||
!
CMP_ADDR_EQUAL
(
last_address
,
tail
,
8
))
&&
!
pages_present
(
tail
))
return
;
last_address
=
(
unsigned
long
)
tail
;
tail
=
user_backtrace
(
tail
);
}
}
arch/arm/oprofile/init.c
浏览文件 @
7e568e62
...
...
@@ -20,6 +20,8 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
ret
=
pmu_init
(
ops
,
&
op_xscale_spec
);
#endif
ops
->
backtrace
=
arm_backtrace
;
return
ret
;
}
...
...
arch/arm/oprofile/op_arm_model.h
浏览文件 @
7e568e62
...
...
@@ -24,6 +24,8 @@ struct op_arm_model_spec {
extern
struct
op_arm_model_spec
op_xscale_spec
;
#endif
extern
void
arm_backtrace
(
struct
pt_regs
*
const
regs
,
unsigned
int
depth
);
extern
int
__init
pmu_init
(
struct
oprofile_operations
*
ops
,
struct
op_arm_model_spec
*
spec
);
extern
void
pmu_exit
(
void
);
#endif
/* OP_ARM_MODEL_H */
include/asm-arm/arch-s3c2410/audio.h
0 → 100644
浏览文件 @
7e568e62
/* linux/include/asm-arm/arch-s3c2410/audio.h
*
* (c) 2004-2005 Simtec Electronics
* http://www.simtec.co.uk/products/SWLINUX/
* Ben Dooks <ben@simtec.co.uk>
*
* S3C24XX - Audio platfrom_device info
*
* 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.
*
* Changelog:
* 20-Nov-2004 BJD Created file
* 07-Mar-2005 BJD Added suspend/resume calls
*/
#ifndef __ASM_ARCH_AUDIO_H
#define __ASM_ARCH_AUDIO_H __FILE__
/* struct s3c24xx_iis_ops
*
* called from the s3c24xx audio core to deal with the architecture
* or the codec's setup and control.
*
* the pointer to itself is passed through in case the caller wants to
* embed this in an larger structure for easy reference to it's context.
*/
struct
s3c24xx_iis_ops
{
struct
module
*
owner
;
int
(
*
startup
)(
struct
s3c24xx_iis_ops
*
me
);
void
(
*
shutdown
)(
struct
s3c24xx_iis_ops
*
me
);
int
(
*
suspend
)(
struct
s3c24xx_iis_ops
*
me
);
int
(
*
resume
)(
struct
s3c24xx_iis_ops
*
me
);
int
(
*
open
)(
struct
s3c24xx_iis_ops
*
me
,
snd_pcm_substream_t
*
strm
);
int
(
*
close
)(
struct
s3c24xx_iis_ops
*
me
,
snd_pcm_substream_t
*
strm
);
int
(
*
prepare
)(
struct
s3c24xx_iis_ops
*
me
,
snd_pcm_substream_t
*
strm
,
snd_pcm_runtime_t
*
rt
);
};
struct
s3c24xx_platdata_iis
{
const
char
*
codec_clk
;
struct
s3c24xx_iis_ops
*
ops
;
int
(
*
match_dev
)(
struct
device
*
dev
);
};
#endif
/* __ASM_ARCH_AUDIO_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录