Commit 40c6b3cb64cd1d02322df5f729cca25084580f40
Committed by
Robert Richter
1 parent
ef70fcc0cd
Exists in
master
and in
4 other branches
oprofile, x86: Using struct stack_frame for 64bit processes dump
Removing unnecessary struct frame_head and replacing it with struct stack_frame. The struct stack_frame is already defined and used in other places in kernel, so there's no reason to define new structure. Signed-off-by: Jiri Olsa <jolsa@redhat.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
Showing 1 changed file with 7 additions and 12 deletions Side-by-side Diff
arch/x86/oprofile/backtrace.c
... | ... | @@ -48,35 +48,30 @@ |
48 | 48 | .walk_stack = print_context_stack, |
49 | 49 | }; |
50 | 50 | |
51 | -struct frame_head { | |
52 | - struct frame_head *bp; | |
53 | - unsigned long ret; | |
54 | -} __attribute__((packed)); | |
55 | - | |
56 | -static struct frame_head *dump_user_backtrace(struct frame_head *head) | |
51 | +static struct stack_frame *dump_user_backtrace(struct stack_frame *head) | |
57 | 52 | { |
58 | - struct frame_head bufhead[2]; | |
53 | + struct stack_frame bufhead[2]; | |
59 | 54 | |
60 | - /* Also check accessibility of one struct frame_head beyond */ | |
55 | + /* Also check accessibility of one struct stack_frame beyond */ | |
61 | 56 | if (!access_ok(VERIFY_READ, head, sizeof(bufhead))) |
62 | 57 | return NULL; |
63 | 58 | if (__copy_from_user_inatomic(bufhead, head, sizeof(bufhead))) |
64 | 59 | return NULL; |
65 | 60 | |
66 | - oprofile_add_trace(bufhead[0].ret); | |
61 | + oprofile_add_trace(bufhead[0].return_address); | |
67 | 62 | |
68 | 63 | /* frame pointers should strictly progress back up the stack |
69 | 64 | * (towards higher addresses) */ |
70 | - if (head >= bufhead[0].bp) | |
65 | + if (head >= bufhead[0].next_frame) | |
71 | 66 | return NULL; |
72 | 67 | |
73 | - return bufhead[0].bp; | |
68 | + return bufhead[0].next_frame; | |
74 | 69 | } |
75 | 70 | |
76 | 71 | void |
77 | 72 | x86_backtrace(struct pt_regs * const regs, unsigned int depth) |
78 | 73 | { |
79 | - struct frame_head *head = (struct frame_head *)frame_pointer(regs); | |
74 | + struct stack_frame *head = (struct stack_frame *)frame_pointer(regs); | |
80 | 75 | |
81 | 76 | if (!user_mode_vm(regs)) { |
82 | 77 | unsigned long stack = kernel_stack_pointer(regs); |