Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/xen/xen_arch_intr.c
Show All 34 Lines | |||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/limits.h> | #include <sys/limits.h> | ||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/mutex.h> | #include <sys/mutex.h> | ||||
#include <sys/interrupt.h> | #include <sys/interrupt.h> | ||||
#include <sys/pcpu.h> | #include <sys/pcpu.h> | ||||
#include <sys/smp.h> | #include <sys/smp.h> | ||||
#include <sys/syslog.h> | #include <sys/syslog.h> | ||||
#include <sys/intr.h> | |||||
#include <xen/xen-os.h> | #include <xen/xen-os.h> | ||||
#include <xen/arch-intr.h> | #include <xen/arch-intr.h> | ||||
static void | static void | ||||
xen_intr_arch_disable_source(void *arg) | xen_intr_arch_disable_source(void *arg) | ||||
{ | { | ||||
struct xenisrc *isrc; | struct xenisrc *isrc; | ||||
▲ Show 20 Lines • Show All 66 Lines • ▼ Show 20 Lines | error = intr_event_create(&isrc->xi_arch, isrc, 0, | ||||
xen_intr_arch_eoi_source /* EOI */, | xen_intr_arch_eoi_source /* EOI */, | ||||
xen_intr_arch_assign_cpu /* cpu assign */, | xen_intr_arch_assign_cpu /* cpu assign */, | ||||
"xen%d", isrc->xi_port); | "xen%d", isrc->xi_port); | ||||
if (error) { | if (error) { | ||||
free(isrc, mtype); | free(isrc, mtype); | ||||
isrc = NULL; | isrc = NULL; | ||||
} | } | ||||
#ifdef SMP | |||||
if (type == EVTCHN_TYPE_PORT) { | |||||
static u_int current; | |||||
/* | |||||
* By default all interrupts are assigned to vCPU#0 | |||||
* unless specified otherwise, so shuffle them to balance | |||||
* the interrupt load. | |||||
*/ | |||||
current = intr_irq_next_cpu(current, &all_cpus); | |||||
xen_intr_assign_cpu(isrc, current); | |||||
} | |||||
#endif | |||||
return (isrc); | return (isrc); | ||||
} | } | ||||
void | void | ||||
xen_arch_intr_release(struct malloc_type *mtype, struct xenisrc *isrc) | xen_arch_intr_release(struct malloc_type *mtype, struct xenisrc *isrc) | ||||
{ | { | ||||
intr_event_destroy(isrc->xi_arch); | intr_event_destroy(isrc->xi_arch); | ||||
▲ Show 20 Lines • Show All 76 Lines • Show Last 20 Lines |