Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-unstable
xen
xen.xenalyze-hvm_emul.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xen.xenalyze-hvm_emul.patch of Package xen
From: Olaf Hering <olaf@aepfle.de> Date: Sun, 28 May 2023 20:33:21 +0000 Subject: xenalyze hvm_emul Signed-off-by: Olaf Hering <olaf@aepfle.de> --- tools/xentrace/xenalyze.c | 152 +++++++++ 1 file changed, 152 insertions(+) --- a/tools/xentrace/xenalyze.c +++ b/tools/xentrace/xenalyze.c @@ -5277,24 +5277,156 @@ void hvm_vmentry_process(struct record_info *ri, struct hvm_data *h) { } if(opt.dump_all) { unsigned long long arc_cycles = ri->tsc - h->exit_tsc; printf("]%s vmentry cycles %lld %s\n", ri->dump_header, arc_cycles, (arc_cycles>10000)?"!":""); } hvm_close_vmexit(h, ri->tsc); h->entry_tsc = ri->tsc; } +static void hvm_emul_process(struct record_info *ri) +{ + switch(ri->event) { + case TRC_HVM_EMUL_HPET_START_TIMER: + { + struct { + unsigned int tn, irq; + unsigned long long delta, period; + } *r = (typeof(r))ri->d; + printf(" %s hpet create [ tn = %u, irq = %u, delta = 0x%016llx, period = 0x%016llx ]\n", + ri->dump_header, r->tn, r->irq, r->delta, r->period); + break; + } + case TRC_HVM_EMUL_PIT_START_TIMER: + { + struct { + int delta, period; + } *r = (typeof(r))ri->d; + printf(" %s pit create [ delta = 0x%08x, period = 0x%08x ]\n", + ri->dump_header, r->delta, r->period); + break; + } + case TRC_HVM_EMUL_RTC_START_TIMER: + { + struct { + int delta, period; + } *r = (typeof(r))ri->d; + printf(" %s rtc create [ delta = 0x%08x, period = 0x%08x ]\n", + ri->dump_header, r->delta, r->period); + break; + } + case TRC_HVM_EMUL_LAPIC_START_TIMER: + { + struct { + unsigned long long delta, period; + unsigned int irq; + } *r = (typeof(r))ri->d; + printf(" %s vlapic create [ delta = 0x%016llx , period = 0x%016llx, irq = %u ]\n", + ri->dump_header, r->delta, r->period, r->irq); + break; + } + case TRC_HVM_EMUL_HPET_STOP_TIMER: + { + struct { + unsigned int tn; + } *r = (typeof(r))ri->d; + printf(" %s hpet destroy [ tn = %u ]\n", ri->dump_header, r->tn); + break; + } + case TRC_HVM_EMUL_PIT_STOP_TIMER: + printf(" %s pit destroy\n", ri->dump_header); + break; + case TRC_HVM_EMUL_RTC_STOP_TIMER: + printf(" %s rtc destroy\n", ri->dump_header); + break; + case TRC_HVM_EMUL_LAPIC_STOP_TIMER: + printf(" %s vlapic destroy\n", ri->dump_header); + break; + case TRC_HVM_EMUL_PIT_TIMER_CB: + printf(" %s pit callback\n", ri->dump_header); + break; + case TRC_HVM_EMUL_LAPIC_TIMER_CB: + printf(" %s vlapic callback\n", ri->dump_header); + break; + case TRC_HVM_EMUL_PIC_INT_OUTPUT: + { + struct { + unsigned int int_output, is_master, irq; + } *r = (typeof(r))ri->d; + printf(" %s vpic_update_int_output [ int_output = %u, is_master = %u, irq = %u ]\n", + ri->dump_header, r->int_output, r->is_master, r->irq); + break; + } + case TRC_HVM_EMUL_PIC_KICK: + { + struct { + unsigned int irq; + } *r = (typeof(r))ri->d; + printf(" %s vpic vcpu_kick [ irq = %u ]\n", + ri->dump_header, r->irq); + break; + } + case TRC_HVM_EMUL_PIC_INTACK: + { + struct { + unsigned int is_master, irq; + } *r = (typeof(r))ri->d; + printf(" %s __vpic_intack [ is_master = %u, irq = %u ]\n", + ri->dump_header, r->is_master, r->irq); + break; + } + case TRC_HVM_EMUL_PIC_POSEDGE: + { + struct { + unsigned int irq; + } *r = (typeof(r))ri->d; + printf(" %s vpic_irq_positive_edge [ irq = %u ]\n", + ri->dump_header, r->irq); + break; + } + case TRC_HVM_EMUL_PIC_NEGEDGE: + { + struct { + unsigned int irq; + } *r = (typeof(r))ri->d; + printf(" %s vpic_irq_negative_edge [ irq = %u ]\n", + ri->dump_header, r->irq); + break; + } + case TRC_HVM_EMUL_PIC_PEND_IRQ_CALL: + { + struct { + unsigned int accept_pic_intr, int_output; + } *r = (typeof(r))ri->d; + printf(" %s vpic_ack_pending_irq [ accept_pic_intr = %u, int_output = %u ]\n", + ri->dump_header, r->accept_pic_intr, r->int_output); + break; + } + case TRC_HVM_EMUL_LAPIC_PIC_INTR: + { + struct { + unsigned int i8259_target, accept_pic_int; + } *r = (typeof(r))ri->d; + printf(" %s vlapic_accept_pic_intr [ i8259_target = %u, accept_pic_int = %u ]\n", + ri->dump_header, r->i8259_target, r->accept_pic_int); + break; + } + default: + break; + } +} + void hvm_process(struct pcpu_info *p) { struct record_info *ri = &p->ri; struct vcpu_data *v = p->current; struct hvm_data *h = &v->hvm; assert(p->current); if(vcpu_set_data_type(p->current, VCPU_DATA_HVM)) return; switch ( ri->evt.sub ) { @@ -5309,24 +5441,44 @@ void hvm_process(struct pcpu_info *p) break; default: switch(ri->event) { case TRC_HVM_VMEXIT: case TRC_HVM_VMEXIT64: UPDATE_VOLUME(p, hvm[HVM_VOL_VMEXIT], ri->size); hvm_vmexit_process(ri, h, v); break; case TRC_HVM_VMENTRY: UPDATE_VOLUME(p, hvm[HVM_VOL_VMENTRY], ri->size); hvm_vmentry_process(ri, &p->current->hvm); break; + case TRC_HVM_EMUL_HPET_START_TIMER: + case TRC_HVM_EMUL_PIT_START_TIMER: + case TRC_HVM_EMUL_RTC_START_TIMER: + case TRC_HVM_EMUL_LAPIC_START_TIMER: + case TRC_HVM_EMUL_HPET_STOP_TIMER: + case TRC_HVM_EMUL_PIT_STOP_TIMER: + case TRC_HVM_EMUL_RTC_STOP_TIMER: + case TRC_HVM_EMUL_LAPIC_STOP_TIMER: + case TRC_HVM_EMUL_PIT_TIMER_CB: + case TRC_HVM_EMUL_LAPIC_TIMER_CB: + case TRC_HVM_EMUL_PIC_INT_OUTPUT: + case TRC_HVM_EMUL_PIC_KICK: + case TRC_HVM_EMUL_PIC_INTACK: + case TRC_HVM_EMUL_PIC_POSEDGE: + case TRC_HVM_EMUL_PIC_NEGEDGE: + case TRC_HVM_EMUL_PIC_PEND_IRQ_CALL: + case TRC_HVM_EMUL_LAPIC_PIC_INTR: + if(opt.dump_all) + hvm_emul_process(ri); + break; default: fprintf(warn, "Unknown hvm event: %x\n", ri->event); } } } void hvm_summary(struct hvm_data *h) { int i; if(!h->summary_info) return;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor