Merge branch 'topic/ppc-kvm' into next
Merge KVM related commits we are keeping in a topic branch in case of any conflicts with generic KVM changes.
This commit is contained in:
commit
ac2a230301
|
@ -350,6 +350,14 @@
|
|||
/* Platform specific hcalls, used by KVM */
|
||||
#define H_RTAS 0xf000
|
||||
|
||||
/*
|
||||
* Platform specific hcalls, used by QEMU/SLOF. These are ignored by
|
||||
* KVM and only kept here so we can identify them during tracing.
|
||||
*/
|
||||
#define H_LOGICAL_MEMOP 0xF001
|
||||
#define H_CAS 0XF002
|
||||
#define H_UPDATE_DT 0XF003
|
||||
|
||||
/* "Platform specific hcalls", provided by PHYP */
|
||||
#define H_GET_24X7_CATALOG_PAGE 0xF078
|
||||
#define H_GET_24X7_DATA 0xF07C
|
||||
|
|
|
@ -523,7 +523,11 @@ struct kvm_vcpu_arch {
|
|||
struct kvmppc_book3s_shadow_vcpu *shadow_vcpu;
|
||||
#endif
|
||||
|
||||
struct pt_regs regs;
|
||||
/*
|
||||
* This is passed along to the HV via H_ENTER_NESTED. Align to
|
||||
* prevent it crossing a real 4K page.
|
||||
*/
|
||||
struct pt_regs regs __aligned(512);
|
||||
|
||||
struct thread_fp_state fp;
|
||||
|
||||
|
@ -830,11 +834,21 @@ struct kvm_vcpu_arch {
|
|||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
struct kvmhv_tb_accumulator *cur_activity; /* What we're timing */
|
||||
u64 cur_tb_start; /* when it started */
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P9_TIMING
|
||||
struct kvmhv_tb_accumulator vcpu_entry;
|
||||
struct kvmhv_tb_accumulator vcpu_exit;
|
||||
struct kvmhv_tb_accumulator in_guest;
|
||||
struct kvmhv_tb_accumulator hcall;
|
||||
struct kvmhv_tb_accumulator pg_fault;
|
||||
struct kvmhv_tb_accumulator guest_entry;
|
||||
struct kvmhv_tb_accumulator guest_exit;
|
||||
#else
|
||||
struct kvmhv_tb_accumulator rm_entry; /* real-mode entry code */
|
||||
struct kvmhv_tb_accumulator rm_intr; /* real-mode intr handling */
|
||||
struct kvmhv_tb_accumulator rm_exit; /* real-mode exit code */
|
||||
struct kvmhv_tb_accumulator guest_time; /* guest execution */
|
||||
struct kvmhv_tb_accumulator cede_time; /* time napping inside guest */
|
||||
#endif
|
||||
#endif /* CONFIG_KVM_BOOK3S_HV_EXIT_TIMING */
|
||||
};
|
||||
|
||||
|
|
|
@ -379,7 +379,7 @@ int main(void)
|
|||
OFFSET(VCPU_SPRG2, kvm_vcpu, arch.shregs.sprg2);
|
||||
OFFSET(VCPU_SPRG3, kvm_vcpu, arch.shregs.sprg3);
|
||||
#endif
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
OFFSET(VCPU_TB_RMENTRY, kvm_vcpu, arch.rm_entry);
|
||||
OFFSET(VCPU_TB_RMINTR, kvm_vcpu, arch.rm_intr);
|
||||
OFFSET(VCPU_TB_RMEXIT, kvm_vcpu, arch.rm_exit);
|
||||
|
|
|
@ -128,8 +128,25 @@ config KVM_BOOK3S_64_PR
|
|||
and system calls on the host.
|
||||
|
||||
config KVM_BOOK3S_HV_EXIT_TIMING
|
||||
bool "Detailed timing for hypervisor real-mode code"
|
||||
bool
|
||||
|
||||
config KVM_BOOK3S_HV_P9_TIMING
|
||||
bool "Detailed timing for the P9 entry point"
|
||||
select KVM_BOOK3S_HV_EXIT_TIMING
|
||||
depends on KVM_BOOK3S_HV_POSSIBLE && DEBUG_FS
|
||||
help
|
||||
Calculate time taken for each vcpu during vcpu entry and
|
||||
exit, time spent inside the guest and time spent handling
|
||||
hypercalls and page faults. The total, minimum and maximum
|
||||
times in nanoseconds together with the number of executions
|
||||
are reported in debugfs in kvm/vm#/vcpu#/timings.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config KVM_BOOK3S_HV_P8_TIMING
|
||||
bool "Detailed timing for hypervisor real-mode code (for POWER8)"
|
||||
select KVM_BOOK3S_HV_EXIT_TIMING
|
||||
depends on KVM_BOOK3S_HV_POSSIBLE && DEBUG_FS && !KVM_BOOK3S_HV_P9_TIMING
|
||||
help
|
||||
Calculate time taken for each vcpu in the real-mode guest entry,
|
||||
exit, and interrupt handling code, plus time spent in the guest
|
||||
|
@ -149,7 +166,7 @@ config KVM_BOOK3S_HV_NESTED_PMU_WORKAROUND
|
|||
Old nested HV capable Linux guests have a bug where they don't
|
||||
reflect the PMU in-use status of their L2 guest to the L0 host
|
||||
while the L2 PMU registers are live. This can result in loss
|
||||
of L2 PMU register state, causing perf to not work correctly in
|
||||
of L2 PMU register state, causing perf to not work correctly in
|
||||
L2 guests.
|
||||
|
||||
Selecting this option for the L0 host implements a workaround for
|
||||
|
|
|
@ -307,7 +307,7 @@ long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm,
|
|||
return ret;
|
||||
|
||||
ret = -ENOMEM;
|
||||
stt = kzalloc(struct_size(stt, pages, npages), GFP_KERNEL);
|
||||
stt = kzalloc(struct_size(stt, pages, npages), GFP_KERNEL | __GFP_NOWARN);
|
||||
if (!stt)
|
||||
goto fail_acct;
|
||||
|
||||
|
|
|
@ -2660,11 +2660,21 @@ static struct debugfs_timings_element {
|
|||
const char *name;
|
||||
size_t offset;
|
||||
} timings[] = {
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P9_TIMING
|
||||
{"vcpu_entry", offsetof(struct kvm_vcpu, arch.vcpu_entry)},
|
||||
{"guest_entry", offsetof(struct kvm_vcpu, arch.guest_entry)},
|
||||
{"in_guest", offsetof(struct kvm_vcpu, arch.in_guest)},
|
||||
{"guest_exit", offsetof(struct kvm_vcpu, arch.guest_exit)},
|
||||
{"vcpu_exit", offsetof(struct kvm_vcpu, arch.vcpu_exit)},
|
||||
{"hypercall", offsetof(struct kvm_vcpu, arch.hcall)},
|
||||
{"page_fault", offsetof(struct kvm_vcpu, arch.pg_fault)},
|
||||
#else
|
||||
{"rm_entry", offsetof(struct kvm_vcpu, arch.rm_entry)},
|
||||
{"rm_intr", offsetof(struct kvm_vcpu, arch.rm_intr)},
|
||||
{"rm_exit", offsetof(struct kvm_vcpu, arch.rm_exit)},
|
||||
{"guest", offsetof(struct kvm_vcpu, arch.guest_time)},
|
||||
{"cede", offsetof(struct kvm_vcpu, arch.cede_time)},
|
||||
#endif
|
||||
};
|
||||
|
||||
#define N_TIMINGS (ARRAY_SIZE(timings))
|
||||
|
@ -2783,8 +2793,9 @@ static const struct file_operations debugfs_timings_ops = {
|
|||
/* Create a debugfs directory for the vcpu */
|
||||
static int kvmppc_arch_create_vcpu_debugfs_hv(struct kvm_vcpu *vcpu, struct dentry *debugfs_dentry)
|
||||
{
|
||||
debugfs_create_file("timings", 0444, debugfs_dentry, vcpu,
|
||||
&debugfs_timings_ops);
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300) == IS_ENABLED(CONFIG_KVM_BOOK3S_HV_P9_TIMING))
|
||||
debugfs_create_file("timings", 0444, debugfs_dentry, vcpu,
|
||||
&debugfs_timings_ops);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -4005,8 +4016,10 @@ static int kvmhv_vcpu_entry_p9_nested(struct kvm_vcpu *vcpu, u64 time_limit, uns
|
|||
mtspr(SPRN_DAR, vcpu->arch.shregs.dar);
|
||||
mtspr(SPRN_DSISR, vcpu->arch.shregs.dsisr);
|
||||
switch_pmu_to_guest(vcpu, &host_os_sprs);
|
||||
accumulate_time(vcpu, &vcpu->arch.in_guest);
|
||||
trap = plpar_hcall_norets(H_ENTER_NESTED, __pa(&hvregs),
|
||||
__pa(&vcpu->arch.regs));
|
||||
accumulate_time(vcpu, &vcpu->arch.guest_exit);
|
||||
kvmhv_restore_hv_return_state(vcpu, &hvregs);
|
||||
switch_pmu_to_host(vcpu, &host_os_sprs);
|
||||
vcpu->arch.shregs.msr = vcpu->arch.regs.msr;
|
||||
|
@ -4694,6 +4707,8 @@ static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)
|
|||
struct kvm *kvm;
|
||||
unsigned long msr;
|
||||
|
||||
start_timing(vcpu, &vcpu->arch.vcpu_entry);
|
||||
|
||||
if (!vcpu->arch.sane) {
|
||||
run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
|
||||
return -EINVAL;
|
||||
|
@ -4759,6 +4774,7 @@ static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)
|
|||
vcpu->arch.state = KVMPPC_VCPU_BUSY_IN_HOST;
|
||||
|
||||
do {
|
||||
accumulate_time(vcpu, &vcpu->arch.guest_entry);
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300))
|
||||
r = kvmhv_run_single_vcpu(vcpu, ~(u64)0,
|
||||
vcpu->arch.vcore->lpcr);
|
||||
|
@ -4766,6 +4782,8 @@ static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)
|
|||
r = kvmppc_run_vcpu(vcpu);
|
||||
|
||||
if (run->exit_reason == KVM_EXIT_PAPR_HCALL) {
|
||||
accumulate_time(vcpu, &vcpu->arch.hcall);
|
||||
|
||||
if (WARN_ON_ONCE(vcpu->arch.shregs.msr & MSR_PR)) {
|
||||
/*
|
||||
* These should have been caught reflected
|
||||
|
@ -4781,6 +4799,7 @@ static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)
|
|||
trace_kvm_hcall_exit(vcpu, r);
|
||||
kvmppc_core_prepare_to_enter(vcpu);
|
||||
} else if (r == RESUME_PAGE_FAULT) {
|
||||
accumulate_time(vcpu, &vcpu->arch.pg_fault);
|
||||
srcu_idx = srcu_read_lock(&kvm->srcu);
|
||||
r = kvmppc_book3s_hv_page_fault(vcpu,
|
||||
vcpu->arch.fault_dar, vcpu->arch.fault_dsisr);
|
||||
|
@ -4792,12 +4811,15 @@ static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)
|
|||
r = kvmppc_xics_rm_complete(vcpu, 0);
|
||||
}
|
||||
} while (is_kvmppc_resume_guest(r));
|
||||
accumulate_time(vcpu, &vcpu->arch.vcpu_exit);
|
||||
|
||||
vcpu->arch.state = KVMPPC_VCPU_NOTREADY;
|
||||
atomic_dec(&kvm->arch.vcpus_running);
|
||||
|
||||
srr_regs_clobbered();
|
||||
|
||||
end_timing(vcpu);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,3 +40,13 @@ void switch_pmu_to_guest(struct kvm_vcpu *vcpu,
|
|||
struct p9_host_os_sprs *host_os_sprs);
|
||||
void switch_pmu_to_host(struct kvm_vcpu *vcpu,
|
||||
struct p9_host_os_sprs *host_os_sprs);
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P9_TIMING
|
||||
void accumulate_time(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator *next);
|
||||
#define start_timing(vcpu, next) accumulate_time(vcpu, next)
|
||||
#define end_timing(vcpu) accumulate_time(vcpu, NULL)
|
||||
#else
|
||||
#define accumulate_time(vcpu, next) do {} while (0)
|
||||
#define start_timing(vcpu, next) do {} while (0)
|
||||
#define end_timing(vcpu) do {} while (0)
|
||||
#endif
|
||||
|
|
|
@ -437,17 +437,8 @@ void restore_p9_host_os_sprs(struct kvm_vcpu *vcpu,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(restore_p9_host_os_sprs);
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
static void __start_timing(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator *next)
|
||||
{
|
||||
struct kvmppc_vcore *vc = vcpu->arch.vcore;
|
||||
u64 tb = mftb() - vc->tb_offset_applied;
|
||||
|
||||
vcpu->arch.cur_activity = next;
|
||||
vcpu->arch.cur_tb_start = tb;
|
||||
}
|
||||
|
||||
static void __accumulate_time(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator *next)
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P9_TIMING
|
||||
void accumulate_time(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator *next)
|
||||
{
|
||||
struct kvmppc_vcore *vc = vcpu->arch.vcore;
|
||||
struct kvmhv_tb_accumulator *curr;
|
||||
|
@ -477,14 +468,7 @@ static void __accumulate_time(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator
|
|||
smp_wmb();
|
||||
curr->seqcount = seq + 2;
|
||||
}
|
||||
|
||||
#define start_timing(vcpu, next) __start_timing(vcpu, next)
|
||||
#define end_timing(vcpu) __start_timing(vcpu, NULL)
|
||||
#define accumulate_time(vcpu, next) __accumulate_time(vcpu, next)
|
||||
#else
|
||||
#define start_timing(vcpu, next) do {} while (0)
|
||||
#define end_timing(vcpu) do {} while (0)
|
||||
#define accumulate_time(vcpu, next) do {} while (0)
|
||||
EXPORT_SYMBOL_GPL(accumulate_time);
|
||||
#endif
|
||||
|
||||
static inline u64 mfslbv(unsigned int idx)
|
||||
|
@ -795,8 +779,6 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned long lpc
|
|||
WARN_ON_ONCE(vcpu->arch.shregs.msr & MSR_HV);
|
||||
WARN_ON_ONCE(!(vcpu->arch.shregs.msr & MSR_ME));
|
||||
|
||||
start_timing(vcpu, &vcpu->arch.rm_entry);
|
||||
|
||||
vcpu->arch.ceded = 0;
|
||||
|
||||
/* Save MSR for restore, with EE clear. */
|
||||
|
@ -957,13 +939,13 @@ tm_return_to_guest:
|
|||
mtspr(SPRN_SRR0, vcpu->arch.shregs.srr0);
|
||||
mtspr(SPRN_SRR1, vcpu->arch.shregs.srr1);
|
||||
|
||||
accumulate_time(vcpu, &vcpu->arch.guest_time);
|
||||
|
||||
switch_pmu_to_guest(vcpu, &host_os_sprs);
|
||||
kvmppc_p9_enter_guest(vcpu);
|
||||
switch_pmu_to_host(vcpu, &host_os_sprs);
|
||||
accumulate_time(vcpu, &vcpu->arch.in_guest);
|
||||
|
||||
accumulate_time(vcpu, &vcpu->arch.rm_intr);
|
||||
kvmppc_p9_enter_guest(vcpu);
|
||||
|
||||
accumulate_time(vcpu, &vcpu->arch.guest_exit);
|
||||
switch_pmu_to_host(vcpu, &host_os_sprs);
|
||||
|
||||
/* XXX: Could get these from r11/12 and paca exsave instead */
|
||||
vcpu->arch.shregs.srr0 = mfspr(SPRN_SRR0);
|
||||
|
@ -1058,8 +1040,6 @@ tm_return_to_guest:
|
|||
#endif
|
||||
}
|
||||
|
||||
accumulate_time(vcpu, &vcpu->arch.rm_exit);
|
||||
|
||||
/* Advance host PURR/SPURR by the amount used by guest */
|
||||
purr = mfspr(SPRN_PURR);
|
||||
spurr = mfspr(SPRN_SPURR);
|
||||
|
@ -1166,8 +1146,6 @@ tm_return_to_guest:
|
|||
asm volatile(PPC_CP_ABORT);
|
||||
|
||||
out:
|
||||
end_timing(vcpu);
|
||||
|
||||
return trap;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kvmhv_vcpu_entry_p9);
|
||||
|
|
|
@ -237,14 +237,14 @@ kvm_novcpu_wakeup:
|
|||
cmpdi r4, 0
|
||||
beq kvmppc_primary_no_guest
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
addi r3, r4, VCPU_TB_RMENTRY
|
||||
bl kvmhv_start_timing
|
||||
#endif
|
||||
b kvmppc_got_guest
|
||||
|
||||
kvm_novcpu_exit:
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
ld r4, HSTATE_KVM_VCPU(r13)
|
||||
cmpdi r4, 0
|
||||
beq 13f
|
||||
|
@ -523,7 +523,7 @@ kvmppc_hv_entry:
|
|||
li r6, KVM_GUEST_MODE_HOST_HV
|
||||
stb r6, HSTATE_IN_GUEST(r13)
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
/* Store initial timestamp */
|
||||
cmpdi r4, 0
|
||||
beq 1f
|
||||
|
@ -894,7 +894,7 @@ fast_guest_return:
|
|||
li r9, KVM_GUEST_MODE_GUEST_HV
|
||||
stb r9, HSTATE_IN_GUEST(r13)
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
/* Accumulate timing */
|
||||
addi r3, r4, VCPU_TB_GUEST
|
||||
bl kvmhv_accumulate_time
|
||||
|
@ -945,7 +945,7 @@ secondary_too_late:
|
|||
cmpdi r4, 0
|
||||
beq 11f
|
||||
stw r12, VCPU_TRAP(r4)
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
addi r3, r4, VCPU_TB_RMEXIT
|
||||
bl kvmhv_accumulate_time
|
||||
#endif
|
||||
|
@ -959,7 +959,7 @@ hdec_soon:
|
|||
li r12, BOOK3S_INTERRUPT_HV_DECREMENTER
|
||||
12: stw r12, VCPU_TRAP(r4)
|
||||
mr r9, r4
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
addi r3, r4, VCPU_TB_RMEXIT
|
||||
bl kvmhv_accumulate_time
|
||||
#endif
|
||||
|
@ -1056,7 +1056,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
|
|||
li r0, MSR_RI
|
||||
mtmsrd r0, 1
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
addi r3, r9, VCPU_TB_RMINTR
|
||||
mr r4, r9
|
||||
bl kvmhv_accumulate_time
|
||||
|
@ -1135,7 +1135,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
|
|||
|
||||
guest_exit_cont: /* r9 = vcpu, r12 = trap, r13 = paca */
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
addi r3, r9, VCPU_TB_RMEXIT
|
||||
mr r4, r9
|
||||
bl kvmhv_accumulate_time
|
||||
|
@ -1495,7 +1495,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
|
|||
mtspr SPRN_LPCR,r8
|
||||
isync
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
/* Finish timing, if we have a vcpu */
|
||||
ld r4, HSTATE_KVM_VCPU(r13)
|
||||
cmpdi r4, 0
|
||||
|
@ -2153,7 +2153,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_TM)
|
|||
ld r4, HSTATE_KVM_VCPU(r13)
|
||||
std r3, VCPU_DEC_EXPIRES(r4)
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
ld r4, HSTATE_KVM_VCPU(r13)
|
||||
addi r3, r4, VCPU_TB_CEDE
|
||||
bl kvmhv_accumulate_time
|
||||
|
@ -2221,7 +2221,7 @@ kvm_end_cede:
|
|||
/* get vcpu pointer */
|
||||
ld r4, HSTATE_KVM_VCPU(r13)
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
addi r3, r4, VCPU_TB_RMINTR
|
||||
bl kvmhv_accumulate_time
|
||||
#endif
|
||||
|
@ -2961,7 +2961,7 @@ kvmppc_fix_pmao:
|
|||
isync
|
||||
blr
|
||||
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_EXIT_TIMING
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_P8_TIMING
|
||||
/*
|
||||
* Start timing an activity
|
||||
* r3 = pointer to time accumulation struct, r4 = vcpu
|
||||
|
|
|
@ -143,6 +143,7 @@ static inline struct kvmppc_ics *kvmppc_xics_find_ics(struct kvmppc_xics *xics,
|
|||
}
|
||||
|
||||
extern unsigned long xics_rm_h_xirr(struct kvm_vcpu *vcpu);
|
||||
extern unsigned long xics_rm_h_xirr_x(struct kvm_vcpu *vcpu);
|
||||
extern int xics_rm_h_ipi(struct kvm_vcpu *vcpu, unsigned long server,
|
||||
unsigned long mfrr);
|
||||
extern int xics_rm_h_cppr(struct kvm_vcpu *vcpu, unsigned long cppr);
|
||||
|
|
|
@ -94,6 +94,7 @@
|
|||
{H_GET_HCA_INFO, "H_GET_HCA_INFO"}, \
|
||||
{H_GET_PERF_COUNT, "H_GET_PERF_COUNT"}, \
|
||||
{H_MANAGE_TRACE, "H_MANAGE_TRACE"}, \
|
||||
{H_GET_CPU_CHARACTERISTICS, "H_GET_CPU_CHARACTERISTICS"}, \
|
||||
{H_FREE_LOGICAL_LAN_BUFFER, "H_FREE_LOGICAL_LAN_BUFFER"}, \
|
||||
{H_QUERY_INT_STATE, "H_QUERY_INT_STATE"}, \
|
||||
{H_POLL_PENDING, "H_POLL_PENDING"}, \
|
||||
|
@ -125,7 +126,25 @@
|
|||
{H_COP, "H_COP"}, \
|
||||
{H_GET_MPP_X, "H_GET_MPP_X"}, \
|
||||
{H_SET_MODE, "H_SET_MODE"}, \
|
||||
{H_RTAS, "H_RTAS"}
|
||||
{H_REGISTER_PROC_TBL, "H_REGISTER_PROC_TBL"}, \
|
||||
{H_QUERY_VAS_CAPABILITIES, "H_QUERY_VAS_CAPABILITIES"}, \
|
||||
{H_INT_GET_SOURCE_INFO, "H_INT_GET_SOURCE_INFO"}, \
|
||||
{H_INT_SET_SOURCE_CONFIG, "H_INT_SET_SOURCE_CONFIG"}, \
|
||||
{H_INT_GET_QUEUE_INFO, "H_INT_GET_QUEUE_INFO"}, \
|
||||
{H_INT_SET_QUEUE_CONFIG, "H_INT_SET_QUEUE_CONFIG"}, \
|
||||
{H_INT_ESB, "H_INT_ESB"}, \
|
||||
{H_INT_RESET, "H_INT_RESET"}, \
|
||||
{H_RPT_INVALIDATE, "H_RPT_INVALIDATE"}, \
|
||||
{H_RTAS, "H_RTAS"}, \
|
||||
{H_LOGICAL_MEMOP, "H_LOGICAL_MEMOP"}, \
|
||||
{H_CAS, "H_CAS"}, \
|
||||
{H_UPDATE_DT, "H_UPDATE_DT"}, \
|
||||
{H_GET_PERF_COUNTER_INFO, "H_GET_PERF_COUNTER_INFO"}, \
|
||||
{H_SET_PARTITION_TABLE, "H_SET_PARTITION_TABLE"}, \
|
||||
{H_ENTER_NESTED, "H_ENTER_NESTED"}, \
|
||||
{H_TLB_INVALIDATE, "H_TLB_INVALIDATE"}, \
|
||||
{H_COPY_TOFROM_GUEST, "H_COPY_TOFROM_GUEST"}
|
||||
|
||||
|
||||
#define kvm_trace_symbol_kvmret \
|
||||
{RESUME_GUEST, "RESUME_GUEST"}, \
|
||||
|
|
Loading…
Reference in New Issue