Changeset View
Changeset View
Standalone View
Standalone View
sys/x86/xen/xen_intr.c
Show First 20 Lines • Show All 504 Lines • ▼ Show 20 Lines | xen_intr_handle_upcall(struct trapframe *trap_frame) | ||||
*/ | */ | ||||
critical_enter(); | critical_enter(); | ||||
cpu = PCPU_GET(cpuid); | cpu = PCPU_GET(cpuid); | ||||
pc = DPCPU_PTR(xen_intr_pcpu); | pc = DPCPU_PTR(xen_intr_pcpu); | ||||
s = HYPERVISOR_shared_info; | s = HYPERVISOR_shared_info; | ||||
v = DPCPU_GET(vcpu_info); | v = DPCPU_GET(vcpu_info); | ||||
if (xen_hvm_domain() && !xen_vector_callback_enabled) { | if (!xen_has_percpu_evtchn()) { | ||||
KASSERT((cpu == 0), ("Fired PCI event callback on wrong CPU")); | KASSERT((cpu == 0), ("Fired PCI event callback on wrong CPU")); | ||||
} | } | ||||
v->evtchn_upcall_pending = 0; | v->evtchn_upcall_pending = 0; | ||||
#if 0 | #if 0 | ||||
#ifndef CONFIG_X86 /* No need for a barrier -- XCHG is a barrier on x86. */ | #ifndef CONFIG_X86 /* No need for a barrier -- XCHG is a barrier on x86. */ | ||||
/* Clear master flag /before/ clearing selector flag. */ | /* Clear master flag /before/ clearing selector flag. */ | ||||
▲ Show 20 Lines • Show All 332 Lines • ▼ Show 20 Lines | |||||
xen_intr_assign_cpu(struct intsrc *base_isrc, u_int apic_id) | xen_intr_assign_cpu(struct intsrc *base_isrc, u_int apic_id) | ||||
{ | { | ||||
#ifdef SMP | #ifdef SMP | ||||
struct evtchn_bind_vcpu bind_vcpu; | struct evtchn_bind_vcpu bind_vcpu; | ||||
struct xenisrc *isrc; | struct xenisrc *isrc; | ||||
u_int to_cpu, vcpu_id; | u_int to_cpu, vcpu_id; | ||||
int error, masked; | int error, masked; | ||||
if (xen_vector_callback_enabled == 0) | if (!xen_has_percpu_evtchn()) | ||||
return (EOPNOTSUPP); | return (EOPNOTSUPP); | ||||
to_cpu = apic_cpuid(apic_id); | to_cpu = apic_cpuid(apic_id); | ||||
vcpu_id = pcpu_find(to_cpu)->pc_vcpu_id; | vcpu_id = pcpu_find(to_cpu)->pc_vcpu_id; | ||||
mtx_lock(&xen_intr_isrc_lock); | mtx_lock(&xen_intr_isrc_lock); | ||||
isrc = (struct xenisrc *)base_isrc; | isrc = (struct xenisrc *)base_isrc; | ||||
if (!is_valid_evtchn(isrc->xi_port)) { | if (!is_valid_evtchn(isrc->xi_port)) { | ||||
▲ Show 20 Lines • Show All 501 Lines • Show Last 20 Lines |