|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] xenoprof: cleanup
# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxx>
# Date 1329378726 -3600
# Node ID 98c00677dacbbcf1419eb08036077e63c4fd26d4
# Parent dc034d0ccdd857503de483012bea9c8e549daa76
xenoprof: cleanup
- frame Xen-specific additions with CONFIG_XEN conditionals
- use per-CPU data
- fix indentation
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
diff -r dc034d0ccdd8 -r 98c00677dacb drivers/oprofile/buffer_sync.c
--- a/drivers/oprofile/buffer_sync.c Wed Feb 15 12:09:02 2012 +0100
+++ b/drivers/oprofile/buffer_sync.c Thu Feb 16 08:52:06 2012 +0100
@@ -42,7 +42,10 @@
static DEFINE_SPINLOCK(task_mortuary);
static void process_task_mortuary(void);
-static int cpu_current_domain[NR_CPUS];
+#ifdef CONFIG_XEN
+#include <linux/percpu.h>
+static DEFINE_PER_CPU(int, current_domain) = COORDINATOR_DOMAIN;
+#endif
/* Take ownership of the task struct and place it on the
* list for processing. Only after two full buffer syncs
@@ -151,11 +154,12 @@
int sync_start(void)
{
int err;
- int i;
+#ifdef CONFIG_XEN
+ unsigned int cpu;
- for (i = 0; i < NR_CPUS; i++) {
- cpu_current_domain[i] = COORDINATOR_DOMAIN;
- }
+ for_each_online_cpu(cpu)
+ per_cpu(current_domain, cpu) = COORDINATOR_DOMAIN;
+#endif
start_cpu_work();
@@ -303,12 +307,14 @@
}
}
+#ifdef CONFIG_XEN
static void add_domain_switch(unsigned long domain_id)
{
add_event_entry(ESCAPE_CODE);
add_event_entry(DOMAIN_SWITCH_CODE);
add_event_entry(domain_id);
}
+#endif
static void
add_user_ctx_switch(struct task_struct const * task, unsigned long cookie)
@@ -498,6 +504,7 @@
cpus_clear(marked_cpus);
}
+#ifdef CONFIG_XEN
/* Add IBS samples into event buffer */
#define IBS_FETCH_SIZE 8
#define IBS_OP_SIZE 14
@@ -559,6 +566,9 @@
return size;
}
+#else
+#define add_ibs_data(cpu, mm, cpu_mode) 0
+#endif
/* FIXME: this is not sufficient if we implement syscall barrier backtrace
* traversal, the code switch to sb_sample_start at first kernel enter/exit
@@ -594,11 +604,12 @@
add_cpu_switch(cpu);
+#ifdef CONFIG_XEN
/* We need to assign the first samples in this CPU buffer to the
same domain that we were processing at the last sync_buffer */
- if (cpu_current_domain[cpu] != COORDINATOR_DOMAIN) {
- add_domain_switch(cpu_current_domain[cpu]);
- }
+ if (per_cpu(current_domain, cpu) != COORDINATOR_DOMAIN)
+ add_domain_switch(per_cpu(current_domain, cpu));
+#endif
/* Remember, only we can modify tail_pos */
available = get_slots(cpu_buf);
@@ -616,8 +627,10 @@
} else if (s->event == CPU_TRACE_BEGIN) {
state = sb_bt_start;
add_trace_begin();
+#ifdef CONFIG_XEN
} else if (s->event == CPU_DOMAIN_SWITCH) {
- domain_switch = 1;
+ domain_switch = 1;
+#endif
} else {
struct mm_struct * oldmm = mm;
@@ -633,21 +646,23 @@
is_ibs_sample = add_ibs_data(cpu, mm, cpu_mode);
} else {
+#ifdef CONFIG_XEN
if (domain_switch) {
- cpu_current_domain[cpu] = s->eip;
+ per_cpu(current_domain, cpu) = s->eip;
add_domain_switch(s->eip);
domain_switch = 0;
- } else if (!is_ibs_sample) {
- if (cpu_current_domain[cpu] !=
- COORDINATOR_DOMAIN) {
- add_sample_entry(s->eip, s->event);
- }
- else if (state >= sb_bt_start &&
- !add_sample(mm, s, cpu_mode)) {
- if (state == sb_bt_start) {
- state = sb_bt_ignore;
-
atomic_inc(&oprofile_stats.bt_lost_no_mapping);
- }
+ } else if (is_ibs_sample)
+ ;
+ else if (per_cpu(current_domain, cpu) !=
+ COORDINATOR_DOMAIN) {
+ add_sample_entry(s->eip, s->event);
+ } else
+#endif
+ if (state >= sb_bt_start &&
+ !add_sample(mm, s, cpu_mode)) {
+ if (state == sb_bt_start) {
+ state = sb_bt_ignore;
+
atomic_inc(&oprofile_stats.bt_lost_no_mapping);
}
}
}
@@ -656,10 +671,11 @@
}
release_mm(mm);
+#ifdef CONFIG_XEN
/* We reset domain to COORDINATOR at each CPU switch */
- if (cpu_current_domain[cpu] != COORDINATOR_DOMAIN) {
+ if (per_cpu(current_domain, cpu) != COORDINATOR_DOMAIN)
add_domain_switch(COORDINATOR_DOMAIN);
- }
+#endif
mark_done(cpu);
diff -r dc034d0ccdd8 -r 98c00677dacb drivers/oprofile/cpu_buffer.c
--- a/drivers/oprofile/cpu_buffer.c Wed Feb 15 12:09:02 2012 +0100
+++ b/drivers/oprofile/cpu_buffer.c Thu Feb 16 08:52:06 2012 +0100
@@ -38,7 +38,11 @@
#define DEFAULT_TIMER_EXPIRE (HZ / 10)
static int work_enabled;
+#ifndef CONFIG_XEN
+#define current_domain COORDINATOR_DOMAIN
+#else
static int32_t current_domain = COORDINATOR_DOMAIN;
+#endif
void free_cpu_buffers(void)
{
@@ -202,8 +206,10 @@
add_code(cpu_buf, (unsigned long)task);
}
+#ifdef CONFIG_XEN
if (pc == IBS_FETCH_CODE || pc == IBS_OP_CODE)
add_code(cpu_buf, cpu_mode);
+#endif
add_sample(cpu_buf, pc, event);
return 1;
@@ -284,6 +290,7 @@
add_sample(cpu_buf, pc, 0);
}
+#ifdef CONFIG_XEN
int oprofile_add_domain_switch(int32_t domain_id)
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
@@ -302,6 +309,7 @@
return 1;
}
+#endif
/*
* This serves to avoid cpu buffer overflow, and makes sure
diff -r dc034d0ccdd8 -r 98c00677dacb drivers/oprofile/oprof.c
--- a/drivers/oprofile/oprof.c Wed Feb 15 12:09:02 2012 +0100
+++ b/drivers/oprofile/oprof.c Thu Feb 16 08:52:06 2012 +0100
@@ -37,6 +37,7 @@
*/
static int timer = 0;
+#ifdef CONFIG_XEN
int oprofile_set_active(int active_domains[], unsigned int adomains)
{
int err;
@@ -62,6 +63,7 @@
mutex_unlock(&start_mutex);
return err;
}
+#endif
int oprofile_setup(void)
{
diff -r dc034d0ccdd8 -r 98c00677dacb drivers/oprofile/oprofile_files.c
--- a/drivers/oprofile/oprofile_files.c Wed Feb 15 12:09:02 2012 +0100
+++ b/drivers/oprofile/oprofile_files.c Thu Feb 16 08:52:06 2012 +0100
@@ -21,7 +21,11 @@
#include "oprof.h"
unsigned long fs_buffer_size = 131072;
-unsigned long fs_cpu_buffer_size = 131072;
+#ifndef CONFIG_XEN
+unsigned long fs_cpu_buffer_size = 8192;
+#else
+unsigned long fs_cpu_buffer_size = 32768;
+#endif
unsigned long fs_buffer_watershed = 32768; /* FIXME: tune */
static ssize_t depth_read(struct file * file, char __user * buf, size_t count,
loff_t * offset)
@@ -124,6 +128,8 @@
.write = dump_write,
};
+#ifdef CONFIG_XEN
+
#define TMPBUFSIZE 512
struct domain_data {
@@ -228,8 +234,8 @@
static int adomain_open(struct inode *inode, struct file *filp)
{
- filp->private_data = &active_domains;
- return 0;
+ filp->private_data = &active_domains;
+ return 0;
}
static const struct file_operations active_domain_ops = {
@@ -242,8 +248,8 @@
static int pdomain_open(struct inode *inode, struct file *filp)
{
- filp->private_data = &passive_domains;
- return 0;
+ filp->private_data = &passive_domains;
+ return 0;
}
static const struct file_operations passive_domain_ops = {
@@ -252,12 +258,16 @@
.write = domain_write,
};
+#endif /* CONFIG_XEN */
+
void oprofile_create_files(struct super_block * sb, struct dentry * root)
{
oprofilefs_create_file(sb, root, "enable", &enable_fops);
oprofilefs_create_file_perm(sb, root, "dump", &dump_fops, 0666);
+#ifdef CONFIG_XEN
oprofilefs_create_file(sb, root, "active_domains", &active_domain_ops);
oprofilefs_create_file(sb, root, "passive_domains",
&passive_domain_ops);
+#endif
oprofilefs_create_file(sb, root, "buffer", &event_buffer_fops);
oprofilefs_create_ulong(sb, root, "buffer_size", &fs_buffer_size);
oprofilefs_create_ulong(sb, root, "buffer_watershed",
&fs_buffer_watershed);
diff -r dc034d0ccdd8 -r 98c00677dacb include/linux/oprofile.h
--- a/include/linux/oprofile.h Wed Feb 15 12:09:02 2012 +0100
+++ b/include/linux/oprofile.h Thu Feb 16 08:52:06 2012 +0100
@@ -16,8 +16,9 @@
#include <linux/types.h>
#include <linux/spinlock.h>
#include <asm/atomic.h>
-
+#ifdef CONFIG_XEN
#include <xen/interface/xenoprof.h>
+#endif
struct super_block;
struct dentry;
@@ -29,11 +30,12 @@
/* create any necessary configuration files in the oprofile fs.
* Optional. */
int (*create_files)(struct super_block * sb, struct dentry * root);
+#ifdef CONFIG_XEN
/* setup active domains with Xen */
int (*set_active)(int *active_domains, unsigned int adomains);
- /* setup passive domains with Xen */
- int (*set_passive)(int *passive_domains, unsigned int pdomains);
-
+ /* setup passive domains with Xen */
+ int (*set_passive)(int *passive_domains, unsigned int pdomains);
+#endif
/* Do any necessary interrupt setup. Optional. */
int (*setup)(void);
/* Do any necessary interrupt shutdown. Optional. */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |