Loading arch/x86/events/intel/core.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading arch/x86/events/perf_event.h +19 −19 Original line number Original line Diff line number Diff line Loading @@ -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. Loading kernel/events/core.c +21 −16 Original line number Original line Diff line number Diff line Loading @@ -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); mm = get_task_mm(event->ctx->task); if (!mm) if (!mm) goto restart; 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) { if (filter->path.dentry) { /* * 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].start = 0; event->addr_filter_ranges[count].size = 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++; } } Loading @@ -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); if (ifh->nr_file_filters) { up_read(&mm->mmap_sem); up_read(&mm->mmap_sem); mmput(mm); mmput(mm); } restart: restart: perf_event_stop(event, 1); perf_event_stop(event, 1); Loading kernel/events/ring_buffer.c +15 −18 Original line number Original line Diff line number Diff line Loading @@ -455,7 +455,6 @@ 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 * * Loading @@ -468,11 +467,9 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size) * 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)) if (handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE) perf_event_aux_event(handle->event, aux_head, size, perf_event_aux_event(handle->event, aux_head, size, handle->aux_flags); 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)) Loading kernel/kprobes.c +2 −4 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading Loading
arch/x86/events/intel/core.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading
arch/x86/events/perf_event.h +19 −19 Original line number Original line Diff line number Diff line Loading @@ -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. Loading
kernel/events/core.c +21 −16 Original line number Original line Diff line number Diff line Loading @@ -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); mm = get_task_mm(event->ctx->task); if (!mm) if (!mm) goto restart; 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) { if (filter->path.dentry) { /* * 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].start = 0; event->addr_filter_ranges[count].size = 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++; } } Loading @@ -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); if (ifh->nr_file_filters) { up_read(&mm->mmap_sem); up_read(&mm->mmap_sem); mmput(mm); mmput(mm); } restart: restart: perf_event_stop(event, 1); perf_event_stop(event, 1); Loading
kernel/events/ring_buffer.c +15 −18 Original line number Original line Diff line number Diff line Loading @@ -455,7 +455,6 @@ 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 * * Loading @@ -468,11 +467,9 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size) * 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)) if (handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE) perf_event_aux_event(handle->event, aux_head, size, perf_event_aux_event(handle->event, aux_head, size, handle->aux_flags); 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)) Loading
kernel/kprobes.c +2 −4 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading