Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
cc867094
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看板
提交
cc867094
编写于
4月 16, 2019
作者:
I
Ingo Molnar
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'perf/urgent' into perf/core, to pick up fixes
Signed-off-by:
N
Ingo Molnar
<
mingo@kernel.org
>
上级
496156e3
9d5dcc93
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
58 addition
and
58 deletion
+58
-58
arch/x86/events/intel/core.c
arch/x86/events/intel/core.c
+1
-1
arch/x86/events/perf_event.h
arch/x86/events/perf_event.h
+19
-19
kernel/events/core.c
kernel/events/core.c
+21
-16
kernel/events/ring_buffer.c
kernel/events/ring_buffer.c
+15
-18
kernel/kprobes.c
kernel/kprobes.c
+2
-4
未找到文件。
arch/x86/events/intel/core.c
浏览文件 @
cc867094
...
@@ -3134,7 +3134,7 @@ static unsigned long intel_pmu_large_pebs_flags(struct perf_event *event)
...
@@ -3134,7 +3134,7 @@ static unsigned long intel_pmu_large_pebs_flags(struct perf_event *event)
flags
&=
~
PERF_SAMPLE_TIME
;
flags
&=
~
PERF_SAMPLE_TIME
;
if
(
!
event
->
attr
.
exclude_kernel
)
if
(
!
event
->
attr
.
exclude_kernel
)
flags
&=
~
PERF_SAMPLE_REGS_USER
;
flags
&=
~
PERF_SAMPLE_REGS_USER
;
if
(
event
->
attr
.
sample_regs_user
&
~
PEBS_REGS
)
if
(
event
->
attr
.
sample_regs_user
&
~
PEBS_
GP_
REGS
)
flags
&=
~
(
PERF_SAMPLE_REGS_USER
|
PERF_SAMPLE_REGS_INTR
);
flags
&=
~
(
PERF_SAMPLE_REGS_USER
|
PERF_SAMPLE_REGS_INTR
);
return
flags
;
return
flags
;
}
}
...
...
arch/x86/events/perf_event.h
浏览文件 @
cc867094
...
@@ -95,25 +95,25 @@ struct amd_nb {
...
@@ -95,25 +95,25 @@ struct amd_nb {
PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_REGS_USER | \
PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_REGS_USER | \
PERF_SAMPLE_PERIOD)
PERF_SAMPLE_PERIOD)
#define PEBS_
REGS
\
#define PEBS_
GP_REGS
\
(
PERF_REG_X86_AX
| \
(
(1ULL << PERF_REG_X86_AX)
| \
PERF_REG_X86_BX
| \
(1ULL << PERF_REG_X86_BX)
| \
PERF_REG_X86_CX
| \
(1ULL << PERF_REG_X86_CX)
| \
PERF_REG_X86_DX
| \
(1ULL << PERF_REG_X86_DX)
| \
PERF_REG_X86_DI
| \
(1ULL << PERF_REG_X86_DI)
| \
PERF_REG_X86_SI
| \
(1ULL << PERF_REG_X86_SI)
| \
PERF_REG_X86_SP
| \
(1ULL << PERF_REG_X86_SP)
| \
PERF_REG_X86_BP
| \
(1ULL << PERF_REG_X86_BP)
| \
PERF_REG_X86_IP
| \
(1ULL << PERF_REG_X86_IP)
| \
PERF_REG_X86_FLAGS
| \
(1ULL << PERF_REG_X86_FLAGS)
| \
PERF_REG_X86_R8
| \
(1ULL << PERF_REG_X86_R8)
| \
PERF_REG_X86_R9
| \
(1ULL << PERF_REG_X86_R9)
| \
PERF_REG_X86_R10
| \
(1ULL << PERF_REG_X86_R10)
| \
PERF_REG_X86_R11
| \
(1ULL << PERF_REG_X86_R11)
| \
PERF_REG_X86_R12
| \
(1ULL << PERF_REG_X86_R12)
| \
PERF_REG_X86_R13
| \
(1ULL << PERF_REG_X86_R13)
| \
PERF_REG_X86_R14
| \
(1ULL << PERF_REG_X86_R14)
| \
PERF_REG_X86_R15
)
(1ULL << PERF_REG_X86_R15)
)
/*
/*
* Per register state.
* Per register state.
...
...
kernel/events/core.c
浏览文件 @
cc867094
...
@@ -9077,26 +9077,29 @@ static void perf_event_addr_filters_apply(struct perf_event *event)
...
@@ -9077,26 +9077,29 @@ static void perf_event_addr_filters_apply(struct perf_event *event)
if
(
task
==
TASK_TOMBSTONE
)
if
(
task
==
TASK_TOMBSTONE
)
return
;
return
;
if
(
!
ifh
->
nr_file_filters
)
if
(
ifh
->
nr_file_filters
)
{
return
;
mm
=
get_task_mm
(
event
->
ctx
->
task
);
if
(
!
mm
)
mm
=
get_task_mm
(
event
->
ctx
->
task
);
goto
restart
;
if
(
!
mm
)
goto
restart
;
down_read
(
&
mm
->
mmap_sem
);
down_read
(
&
mm
->
mmap_sem
);
}
raw_spin_lock_irqsave
(
&
ifh
->
lock
,
flags
);
raw_spin_lock_irqsave
(
&
ifh
->
lock
,
flags
);
list_for_each_entry
(
filter
,
&
ifh
->
list
,
entry
)
{
list_for_each_entry
(
filter
,
&
ifh
->
list
,
entry
)
{
event
->
addr_filter_ranges
[
count
].
start
=
0
;
if
(
filter
->
path
.
dentry
)
{
event
->
addr_filter_ranges
[
count
].
size
=
0
;
/*
* Adjust base offset if the filter is associated to a
* binary that needs to be mapped:
*/
event
->
addr_filter_ranges
[
count
].
start
=
0
;
event
->
addr_filter_ranges
[
count
].
size
=
0
;
/*
* Adjust base offset if the filter is associated to a binary
* that needs to be mapped:
*/
if
(
filter
->
path
.
dentry
)
perf_addr_filter_apply
(
filter
,
mm
,
&
event
->
addr_filter_ranges
[
count
]);
perf_addr_filter_apply
(
filter
,
mm
,
&
event
->
addr_filter_ranges
[
count
]);
}
else
{
event
->
addr_filter_ranges
[
count
].
start
=
filter
->
offset
;
event
->
addr_filter_ranges
[
count
].
size
=
filter
->
size
;
}
count
++
;
count
++
;
}
}
...
@@ -9104,9 +9107,11 @@ static void perf_event_addr_filters_apply(struct perf_event *event)
...
@@ -9104,9 +9107,11 @@ static void perf_event_addr_filters_apply(struct perf_event *event)
event
->
addr_filters_gen
++
;
event
->
addr_filters_gen
++
;
raw_spin_unlock_irqrestore
(
&
ifh
->
lock
,
flags
);
raw_spin_unlock_irqrestore
(
&
ifh
->
lock
,
flags
);
up_read
(
&
mm
->
mmap_sem
);
if
(
ifh
->
nr_file_filters
)
{
up_read
(
&
mm
->
mmap_sem
);
mmput
(
mm
);
mmput
(
mm
);
}
restart:
restart:
perf_event_stop
(
event
,
1
);
perf_event_stop
(
event
,
1
);
...
...
kernel/events/ring_buffer.c
浏览文件 @
cc867094
...
@@ -455,24 +455,21 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size)
...
@@ -455,24 +455,21 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size)
rb
->
aux_head
+=
size
;
rb
->
aux_head
+=
size
;
}
}
if
(
size
||
handle
->
aux_flags
)
{
/*
/*
* Only send RECORD_AUX if we have something useful to communicate
* Only send RECORD_AUX if we have something useful to communicate
*
*
* Note: the OVERWRITE records by themselves are not considered
* Note: the OVERWRITE records by themselves are not considered
* useful, as they don't communicate any *new* information,
* useful, as they don't communicate any *new* information,
* aside from the short-lived offset, that becomes history at
* aside from the short-lived offset, that becomes history at
* the next event sched-in and therefore isn't useful.
* the next event sched-in and therefore isn't useful.
* The userspace that needs to copy out AUX data in overwrite
* The userspace that needs to copy out AUX data in overwrite
* mode should know to use user_page::aux_head for the actual
* mode should know to use user_page::aux_head for the actual
* offset. So, from now on we don't output AUX records that
* offset. So, from now on we don't output AUX records that
* have *only* OVERWRITE flag set.
* have *only* OVERWRITE flag set.
*/
*/
if
(
size
||
(
handle
->
aux_flags
&
~
(
u64
)
PERF_AUX_FLAG_OVERWRITE
))
perf_event_aux_event
(
handle
->
event
,
aux_head
,
size
,
if
(
handle
->
aux_flags
&
~
(
u64
)
PERF_AUX_FLAG_OVERWRITE
)
handle
->
aux_flags
);
perf_event_aux_event
(
handle
->
event
,
aux_head
,
size
,
handle
->
aux_flags
);
}
rb
->
user_page
->
aux_head
=
rb
->
aux_head
;
rb
->
user_page
->
aux_head
=
rb
->
aux_head
;
if
(
rb_need_aux_wakeup
(
rb
))
if
(
rb_need_aux_wakeup
(
rb
))
...
...
kernel/kprobes.c
浏览文件 @
cc867094
...
@@ -709,7 +709,6 @@ static void unoptimize_kprobe(struct kprobe *p, bool force)
...
@@ -709,7 +709,6 @@ static void unoptimize_kprobe(struct kprobe *p, bool force)
static
int
reuse_unused_kprobe
(
struct
kprobe
*
ap
)
static
int
reuse_unused_kprobe
(
struct
kprobe
*
ap
)
{
{
struct
optimized_kprobe
*
op
;
struct
optimized_kprobe
*
op
;
int
ret
;
/*
/*
* Unused kprobe MUST be on the way of delayed unoptimizing (means
* Unused kprobe MUST be on the way of delayed unoptimizing (means
...
@@ -720,9 +719,8 @@ static int reuse_unused_kprobe(struct kprobe *ap)
...
@@ -720,9 +719,8 @@ static int reuse_unused_kprobe(struct kprobe *ap)
/* Enable the probe again */
/* Enable the probe again */
ap
->
flags
&=
~
KPROBE_FLAG_DISABLED
;
ap
->
flags
&=
~
KPROBE_FLAG_DISABLED
;
/* Optimize it again (remove from op->list) */
/* Optimize it again (remove from op->list) */
ret
=
kprobe_optready
(
ap
);
if
(
!
kprobe_optready
(
ap
))
if
(
ret
)
return
-
EINVAL
;
return
ret
;
optimize_kprobe
(
ap
);
optimize_kprobe
(
ap
);
return
0
;
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录