[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/5 TAKE 2] xenoprof: make xen xenoprof code slight arch generic
# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1163486060 -32400 # Node ID 0b4114873d25138823956186a87b34f884be6d9a # Parent 24e1dacab1545640701709be7742608de73063cc replace x86 specific code in xen/common/xenoprof.c - replace nmi_ prefix with xenoprof_arch_ prefix - move config_counter to xen/arch/x86/oprofile/xenoprof.c PATCHNAME: remove_x86_specific_code_from_xen_common_xenoprof_c Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx> diff -r 24e1dacab154 -r 0b4114873d25 xen/arch/x86/oprofile/xenoprof.c --- a/xen/arch/x86/oprofile/xenoprof.c Tue Nov 14 15:34:19 2006 +0900 +++ b/xen/arch/x86/oprofile/xenoprof.c Tue Nov 14 15:34:20 2006 +0900 @@ -12,6 +12,27 @@ #include <xen/sched.h> #include <public/xenoprof.h> #include <asm/hvm/support.h> + +#include "op_counter.h" + +int xenoprof_arch_counter(XEN_GUEST_HANDLE(void) arg) +{ + struct xenoprof_counter counter; + if ( copy_from_guest(&counter, arg, 1) ) + return -EFAULT; + + if ( counter.ind > OP_MAX_COUNTER ) + return -E2BIG; + + counter_config[counter.ind].count = (unsigned long) counter.count; + counter_config[counter.ind].enabled = (unsigned long) counter.enabled; + counter_config[counter.ind].event = (unsigned long) counter.event; + counter_config[counter.ind].kernel = (unsigned long) counter.kernel; + counter_config[counter.ind].user = (unsigned long) counter.user; + counter_config[counter.ind].unit_mask = (unsigned long) counter.unit_mask; + + return 0; +} int xenoprofile_get_mode(struct vcpu *v, struct cpu_user_regs * const regs) { diff -r 24e1dacab154 -r 0b4114873d25 xen/common/xenoprof.c --- a/xen/common/xenoprof.c Tue Nov 14 15:34:19 2006 +0900 +++ b/xen/common/xenoprof.c Tue Nov 14 15:34:20 2006 +0900 @@ -12,8 +12,6 @@ #include <public/xenoprof.h> #include <asm/hvm/support.h> -#include "../arch/x86/oprofile/op_counter.h" - /* Limit amount of pages used for shared buffer (per domain) */ #define MAX_OPROF_SHARED_PAGES 32 @@ -39,16 +37,6 @@ u64 passive_samples; u64 passive_samples; u64 idle_samples; u64 others_samples; - - -extern int nmi_init(int *num_events, int *is_primary, char *cpu_type); -extern int nmi_reserve_counters(void); -extern int nmi_setup_events(void); -extern int nmi_enable_virq(void); -extern int nmi_start(void); -extern void nmi_stop(void); -extern void nmi_disable_virq(void); -extern void nmi_release_counters(void); int is_active(struct domain *d) { @@ -449,9 +437,9 @@ static int xenoprof_op_init(XEN_GUEST_HA if ( copy_from_guest(&xenoprof_init, arg, 1) ) return -EFAULT; - if ( (ret = nmi_init(&xenoprof_init.num_events, - &xenoprof_init.is_primary, - xenoprof_init.cpu_type)) ) + if ( (ret = xenoprof_arch_init(&xenoprof_init.num_events, + &xenoprof_init.is_primary, + xenoprof_init.cpu_type)) ) return ret; if ( copy_to_guest(arg, &xenoprof_init, 1) ) @@ -574,42 +562,26 @@ int do_xenoprof_op(int op, XEN_GUEST_HAN ret = -EPERM; break; } - ret = nmi_reserve_counters(); + ret = xenoprof_arch_reserve_counters(); if ( !ret ) xenoprof_state = XENOPROF_COUNTERS_RESERVED; break; case XENOPROF_counter: - { - struct xenoprof_counter counter; if ( xenoprof_state != XENOPROF_COUNTERS_RESERVED || adomains == 0) { ret = -EPERM; break; } - if ( copy_from_guest(&counter, arg, 1) ) - return -EFAULT; - - if ( counter.ind > OP_MAX_COUNTER ) - return -E2BIG; - - counter_config[counter.ind].count = (unsigned long) counter.count; - counter_config[counter.ind].enabled = (unsigned long) counter.enabled; - counter_config[counter.ind].event = (unsigned long) counter.event; - counter_config[counter.ind].kernel = (unsigned long) counter.kernel; - counter_config[counter.ind].user = (unsigned long) counter.user; - counter_config[counter.ind].unit_mask = (unsigned long) counter.unit_mask; - - ret = 0; - break; - } + ret = xenoprof_arch_counter(arg); + break; case XENOPROF_setup_events: if ( xenoprof_state != XENOPROF_COUNTERS_RESERVED ) { ret = -EPERM; break; } - ret = nmi_setup_events(); + ret = xenoprof_arch_setup_events(); if ( !ret ) xenoprof_state = XENOPROF_READY; break; @@ -619,7 +591,7 @@ int do_xenoprof_op(int op, XEN_GUEST_HAN int i; if ( current->domain == primary_profiler ) { - nmi_enable_virq(); + xenoprof_arch_enable_virq(); xenoprof_reset_stat(); for ( i = 0; i < pdomains; i++ ) { xenoprof_reset_buf(passive_domains[i]); @@ -634,7 +606,7 @@ int do_xenoprof_op(int op, XEN_GUEST_HAN ret = -EPERM; if ( (xenoprof_state == XENOPROF_READY) && (activated == adomains) ) - ret = nmi_start(); + ret = xenoprof_arch_start(); if ( ret == 0 ) xenoprof_state = XENOPROF_PROFILING; @@ -645,7 +617,7 @@ int do_xenoprof_op(int op, XEN_GUEST_HAN ret = -EPERM; break; } - nmi_stop(); + xenoprof_arch_stop(); xenoprof_state = XENOPROF_READY; break; @@ -664,8 +636,8 @@ int do_xenoprof_op(int op, XEN_GUEST_HAN (xenoprof_state == XENOPROF_READY) ) { xenoprof_state = XENOPROF_IDLE; - nmi_release_counters(); - nmi_disable_virq(); + xenoprof_arch_release_counters(); + xenoprof_arch_disable_virq(); reset_passive_list(); ret = 0; } diff -r 24e1dacab154 -r 0b4114873d25 xen/include/asm-x86/xenoprof.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xen/include/asm-x86/xenoprof.h Tue Nov 14 15:34:20 2006 +0900 @@ -0,0 +1,58 @@ +/****************************************************************************** + * asm-x86/xenoprof.h + * xenoprof x86 arch specific header file + * + * Copyright (c) 2006 Isaku Yamahata <yamahata at valinux co jp> + * VA Linux Systems Japan K.K. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __ASM_XENOPROF_H__ +#define __ASM_XENOPROF_H__ + +int nmi_init(int *num_events, int *is_primary, char *cpu_type); +int nmi_reserve_counters(void); +int nmi_setup_events(void); +int nmi_enable_virq(void); +int nmi_start(void); +void nmi_stop(void); +void nmi_disable_virq(void); +void nmi_release_counters(void); + +#define xenoprof_arch_init(num_events, is_primary, cpu_type) \ + nmi_init(num_events, is_primary, cpu_type) +#define xenoprof_arch_reserve_counters() nmi_reserve_counters() +#define xenoprof_arch_setup_events() nmi_setup_events() +#define xenoprof_arch_enable_virq() nmi_enable_virq() +#define xenoprof_arch_start() nmi_start() +#define xenoprof_arch_stop() nmi_stop() +#define xenoprof_arch_disable_virq() nmi_disable_virq() +#define xenoprof_arch_release_counters() nmi_release_counters() + +int xenoprof_arch_counter(XEN_GUEST_HANDLE(void) arg); + +#endif /* __ASM_XENOPROF_H__ */ + +/* + * Local variables: + * mode: C + * c-set-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff -r 24e1dacab154 -r 0b4114873d25 xen/include/xen/xenoprof.h --- a/xen/include/xen/xenoprof.h Tue Nov 14 15:34:19 2006 +0900 +++ b/xen/include/xen/xenoprof.h Tue Nov 14 15:34:20 2006 +0900 @@ -11,6 +11,7 @@ #define __XEN_XENOPROF_H__ #include <public/xenoprof.h> +#include <asm/xenoprof.h> #define XENOPROF_DOMAIN_IGNORED 0 #define XENOPROF_DOMAIN_ACTIVE 1 yamahata _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |