[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v5 07/13] x86/traps: simplify and rename send_guest_trap
Rename it to pv_raise_interrupt. Simplify the code by using the vcpu structure already at hand in the caller. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- xen/arch/x86/traps.c | 13 ++++--------- xen/include/asm-x86/pv/traps.h | 8 ++++++++ xen/include/asm-x86/traps.h | 9 --------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index f3c5de6f2c..7e3cba0ffe 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1620,7 +1620,7 @@ static void nmi_hwdom_report(unsigned int reason_idx) set_bit(reason_idx, nmi_reason(d)); - send_guest_trap(d, 0, TRAP_nmi); + pv_raise_interrupt(d->vcpu[0], TRAP_nmi); } static void pci_serr_error(const struct cpu_user_regs *regs) @@ -2008,21 +2008,16 @@ long unregister_guest_nmi_callback(void) return 0; } -int send_guest_trap(struct domain *d, uint16_t vcpuid, unsigned int trap_nr) +int pv_raise_interrupt(struct vcpu *v, uint8_t trap_nr) { - struct vcpu *v; struct softirq_trap *st = &per_cpu(softirq_trap, smp_processor_id()); - BUG_ON(d == NULL); - BUG_ON(vcpuid >= d->max_vcpus); - v = d->vcpu[vcpuid]; - switch (trap_nr) { case TRAP_nmi: if ( cmpxchgptr(&st->vcpu, NULL, v) ) return -EBUSY; if ( !test_and_set_bool(v->nmi_pending) ) { - st->domain = d; + st->domain = v->domain; st->processor = v->processor; /* not safe to wake up a vcpu here */ @@ -2040,7 +2035,7 @@ int send_guest_trap(struct domain *d, uint16_t vcpuid, unsigned int trap_nr) * on the physical CPU that reported a machine check error. */ if ( !test_and_set_bool(v->mce_pending) ) { - st->domain = d; + st->domain = v->domain; st->processor = v->processor; /* not safe to wake up a vcpu here */ diff --git a/xen/include/asm-x86/pv/traps.h b/xen/include/asm-x86/pv/traps.h index f9d44ab989..72e54a09a6 100644 --- a/xen/include/asm-x86/pv/traps.h +++ b/xen/include/asm-x86/pv/traps.h @@ -25,12 +25,20 @@ #include <public/xen.h> +/* Deliver interrupt to PV guest. Return 0 on success. */ +int pv_raise_interrupt(struct vcpu *v, uint8_t vector); + int pv_emulate_privileged_op(struct cpu_user_regs *regs); void pv_emulate_gate_op(struct cpu_user_regs *regs); bool pv_emulate_invalid_op(struct cpu_user_regs *regs); #else /* !CONFIG_PV */ +#include <xen/errno.h> + +/* Deliver interrupt to PV guest. Return 0 on success. */ +static int pv_raise_interrupt(struct vcpu *v, uint8_t vector) { return -EOPNOTSUPP; } + static inline int pv_emulate_privileged_op(struct cpu_user_regs *regs) { return 0; } static inline void pv_emulate_gate_op(struct cpu_user_regs *regs) {} static inline bool pv_emulate_invalid_op(struct cpu_user_regs *regs) { return true; } diff --git a/xen/include/asm-x86/traps.h b/xen/include/asm-x86/traps.h index cc1d7d01d9..1e3f9c7fad 100644 --- a/xen/include/asm-x86/traps.h +++ b/xen/include/asm-x86/traps.h @@ -28,15 +28,6 @@ struct softirq_trap { struct cpu_user_regs; void async_exception_cleanup(struct vcpu *); - -/** - * send_guest_trap - * - * delivers trap to guest analogous to send_guest_global_virq - * return 0 on successful delivery - */ -extern int send_guest_trap(struct domain *d, uint16_t vcpuid, - unsigned int trap_nr); uint32_t guest_io_read(unsigned int port, unsigned int bytes, struct domain *); -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |