Skip to content
Snippets Groups Projects
Commit 16b87490 authored by fu5520tp's avatar fu5520tp
Browse files

exclude kernel events, move irq save into funtion

parent 77bca1ae
No related branches found
No related tags found
No related merge requests found
...@@ -149,7 +149,6 @@ void init_pb_rq(struct pb_rq *pb_rq) ...@@ -149,7 +149,6 @@ void init_pb_rq(struct pb_rq *pb_rq)
pb_rq->pevent = NULL; pb_rq->pevent = NULL;
pb_rq->is_initialized = 0; pb_rq->is_initialized = 0;
pb_rq->waiting_on_io = 0; pb_rq->waiting_on_io = 0;
raw_spin_lock_init(pb_rq->pb_lock);
} }
EXPORT_SYMBOL(init_pb_rq); EXPORT_SYMBOL(init_pb_rq);
...@@ -245,7 +244,6 @@ static struct task_struct * pick_next_task_pb(struct rq *rq, ...@@ -245,7 +244,6 @@ static struct task_struct * pick_next_task_pb(struct rq *rq,
struct task_struct *picked = NULL; struct task_struct *picked = NULL;
enum pb_mode current_mode, next_mode; enum pb_mode current_mode, next_mode;
struct pb_rq *pb = &(rq->pb); struct pb_rq *pb = &(rq->pb);
unsigned long lock_flags;
current_mode = pb->mode; current_mode = pb->mode;
next_mode = determine_next_mode_pb(rq); next_mode = determine_next_mode_pb(rq);
...@@ -253,9 +251,7 @@ static struct task_struct * pick_next_task_pb(struct rq *rq, ...@@ -253,9 +251,7 @@ static struct task_struct * pick_next_task_pb(struct rq *rq,
if (next_mode == PB_DISABLED_MODE && current_mode == PB_EXEC_MODE) { if (next_mode == PB_DISABLED_MODE && current_mode == PB_EXEC_MODE) {
// After Plan is done do the cleanup // After Plan is done do the cleanup
raw_spin_lock_irqsave(pb->pb_lock, lock_flags);
terminate_perf_event(pb->pevent); terminate_perf_event(pb->pevent);
raw_spin_unlock_irqrestore(pb->pb_lock, lock_flags);
pb->pevent = NULL; pb->pevent = NULL;
// TODO: Check if we have to free the memory or if perf takes care of it // TODO: Check if we have to free the memory or if perf takes care of it
// see 'perf_event_release_kernel(struct perf_event *event)' in core.c // see 'perf_event_release_kernel(struct perf_event *event)' in core.c
......
...@@ -23,16 +23,9 @@ int init_perf_event(struct plan_entry *plan_entry, struct perf_event **pevent){ ...@@ -23,16 +23,9 @@ int init_perf_event(struct plan_entry *plan_entry, struct perf_event **pevent){
pe.config = PERF_COUNT_HW_INSTRUCTIONS; pe.config = PERF_COUNT_HW_INSTRUCTIONS;
pe.sample_period = plan_entry->n_instr; pe.sample_period = plan_entry->n_instr;
pe.disabled = 0; // start the counter as soon as we're in userland pe.disabled = 0; // start the counter as soon as we're in userland
pe.pinned = 1; // ? pe.exclude_kernel = 1; // only count user space
pe.exclude_kernel = 0; //////////////// DAS HABEN WIR AUS DAMIT WIR MIT KERNEL THREADS ARBEITEN KÖNNEN
pe.exclude_hv = 1; // excluding events that happen in the hypervisor pe.exclude_hv = 1; // excluding events that happen in the hypervisor
// this throws exceptions on my system
//pe.precise_ip = 2; // 2 SAMPLE_IP requested to have 0 skid.
/* Not needed on 3.2? */
// pe.wakeup_events = 1;
// disable irqs to make 'perf_event_ctx_activate' in 'kernel/events/core.c' happy // disable irqs to make 'perf_event_ctx_activate' in 'kernel/events/core.c' happy
local_irq_save(irq_flags); local_irq_save(irq_flags);
*pevent = perf_event_create(&pe, 0, plan_entry->task_struct); *pevent = perf_event_create(&pe, 0, plan_entry->task_struct);
...@@ -57,7 +50,14 @@ u64 get_perf_counter(struct perf_event *pevent, u64 *perf_counter) ...@@ -57,7 +50,14 @@ u64 get_perf_counter(struct perf_event *pevent, u64 *perf_counter)
u64 terminate_perf_event(struct perf_event *pevent) u64 terminate_perf_event(struct perf_event *pevent)
{ {
return perf_event_release_kernel(pevent); u64 result;
unsigned long irq_flags;
local_irq_save(irq_flags);
result = perf_event_release_kernel(pevent);
local_irq_restore(irq_flags);
return result;
} }
......
...@@ -570,7 +570,6 @@ struct pb_rq ...@@ -570,7 +570,6 @@ struct pb_rq
*/ */
volatile int is_initialized; volatile int is_initialized;
volatile int waiting_on_io; volatile int waiting_on_io;
raw_spinlock_t *pb_lock; // spinlock used to deactivate interrupts especially when handling perf-events
}; };
int pb_submit_plan(struct rq *rq); int pb_submit_plan(struct rq *rq);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment