| .. | .. |
|---|
| 37 | 37 | struct frame_tail buftail; |
|---|
| 38 | 38 | unsigned long err; |
|---|
| 39 | 39 | |
|---|
| 40 | | - if (!access_ok(VERIFY_READ, tail, sizeof(buftail))) |
|---|
| 40 | + if (!access_ok(tail, sizeof(buftail))) |
|---|
| 41 | 41 | return NULL; |
|---|
| 42 | 42 | |
|---|
| 43 | 43 | pagefault_disable(); |
|---|
| .. | .. |
|---|
| 62 | 62 | void |
|---|
| 63 | 63 | perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs) |
|---|
| 64 | 64 | { |
|---|
| 65 | + struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs(); |
|---|
| 65 | 66 | struct frame_tail __user *tail; |
|---|
| 66 | 67 | |
|---|
| 67 | | - if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) { |
|---|
| 68 | + if (guest_cbs && guest_cbs->is_in_guest()) { |
|---|
| 68 | 69 | /* We don't support guest os callchain now */ |
|---|
| 69 | 70 | return; |
|---|
| 70 | 71 | } |
|---|
| .. | .. |
|---|
| 98 | 99 | void |
|---|
| 99 | 100 | perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs) |
|---|
| 100 | 101 | { |
|---|
| 102 | + struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs(); |
|---|
| 101 | 103 | struct stackframe fr; |
|---|
| 102 | 104 | |
|---|
| 103 | | - if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) { |
|---|
| 105 | + if (guest_cbs && guest_cbs->is_in_guest()) { |
|---|
| 104 | 106 | /* We don't support guest os callchain now */ |
|---|
| 105 | 107 | return; |
|---|
| 106 | 108 | } |
|---|
| .. | .. |
|---|
| 111 | 113 | |
|---|
| 112 | 114 | unsigned long perf_instruction_pointer(struct pt_regs *regs) |
|---|
| 113 | 115 | { |
|---|
| 114 | | - if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) |
|---|
| 115 | | - return perf_guest_cbs->get_guest_ip(); |
|---|
| 116 | + struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs(); |
|---|
| 117 | + |
|---|
| 118 | + if (guest_cbs && guest_cbs->is_in_guest()) |
|---|
| 119 | + return guest_cbs->get_guest_ip(); |
|---|
| 116 | 120 | |
|---|
| 117 | 121 | return instruction_pointer(regs); |
|---|
| 118 | 122 | } |
|---|
| 119 | 123 | |
|---|
| 120 | 124 | unsigned long perf_misc_flags(struct pt_regs *regs) |
|---|
| 121 | 125 | { |
|---|
| 126 | + struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs(); |
|---|
| 122 | 127 | int misc = 0; |
|---|
| 123 | 128 | |
|---|
| 124 | | - if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) { |
|---|
| 125 | | - if (perf_guest_cbs->is_user_mode()) |
|---|
| 129 | + if (guest_cbs && guest_cbs->is_in_guest()) { |
|---|
| 130 | + if (guest_cbs->is_user_mode()) |
|---|
| 126 | 131 | misc |= PERF_RECORD_MISC_GUEST_USER; |
|---|
| 127 | 132 | else |
|---|
| 128 | 133 | misc |= PERF_RECORD_MISC_GUEST_KERNEL; |
|---|