version 1.21, 2020/04/06 19:26:00 |
version 1.21.2.4, 2020/04/14 16:52:35 |
Line 73 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 73 __KERNEL_RCSID(0, "$NetBSD$"); |
|
static const char *xen_ipi_names[XEN_NIPIS] = XEN_IPI_NAMES; |
static const char *xen_ipi_names[XEN_NIPIS] = XEN_IPI_NAMES; |
#endif |
#endif |
|
|
/* |
|
* Restore a value to cpl (unmasking interrupts). If any unmasked |
|
* interrupts are pending, call Xspllower() to process them. |
|
*/ |
|
void xen_spllower(int nlevel); |
|
|
|
void |
|
xen_spllower(int nlevel) |
|
{ |
|
struct cpu_info *ci = curcpu(); |
|
uint32_t xmask; |
|
u_long psl; |
|
|
|
if (ci->ci_ilevel <= nlevel) |
|
return; |
|
|
|
__insn_barrier(); |
|
|
|
xmask = XUNMASK(ci, nlevel); |
|
psl = xen_read_psl(); |
|
x86_disable_intr(); |
|
if (ci->ci_xpending & xmask) { |
|
KASSERT(psl == 0); |
|
Xspllower(nlevel); |
|
/* Xspllower does enable_intr() */ |
|
} else { |
|
ci->ci_ilevel = nlevel; |
|
xen_write_psl(psl); |
|
} |
|
} |
|
|
|
|
|
#if !defined(XENPVHVM) |
#if !defined(XENPVHVM) |
void |
void |
x86_disable_intr(void) |
x86_disable_intr(void) |
Line 338 void xen_cpu_intr_init(struct cpu_info * |
|
Line 306 void xen_cpu_intr_init(struct cpu_info * |
|
void |
void |
xen_cpu_intr_init(struct cpu_info *ci) |
xen_cpu_intr_init(struct cpu_info *ci) |
{ |
{ |
int i; /* XXX: duplicate */ |
#if defined(__HAVE_PREEMPTION) |
|
x86_init_preempt(ci); |
ci->ci_xunmask[0] = 0xfffffffe; |
#endif |
for (i = 1; i < NIPL; i++) |
x86_intr_calculatemasks(ci); |
ci->ci_xunmask[i] = ci->ci_xunmask[i - 1] & ~(1 << i); |
|
|
|
#if defined(INTRSTACKSIZE) |
#if defined(INTRSTACKSIZE) |
vaddr_t istack; |
vaddr_t istack; |
Line 370 xen_cpu_intr_init(struct cpu_info *ci) |
|
Line 337 xen_cpu_intr_init(struct cpu_info *ci) |
|
#endif |
#endif |
|
|
#ifdef MULTIPROCESSOR |
#ifdef MULTIPROCESSOR |
for (i = 0; i < XEN_NIPIS; i++) |
for (int i = 0; i < XEN_NIPIS; i++) |
evcnt_attach_dynamic(&ci->ci_ipi_events[i], EVCNT_TYPE_MISC, |
evcnt_attach_dynamic(&ci->ci_ipi_events[i], EVCNT_TYPE_MISC, |
NULL, device_xname(ci->ci_dev), xen_ipi_names[i]); |
NULL, device_xname(ci->ci_dev), xen_ipi_names[i]); |
#endif |
#endif |
Line 528 xen_intr_create_intrid(int legacy_irq, s |
|
Line 495 xen_intr_create_intrid(int legacy_irq, s |
|
} |
} |
|
|
#if !defined(XENPVHVM) |
#if !defined(XENPVHVM) |
__strong_alias(spllower, xen_spllower); |
|
__strong_alias(x86_read_psl, xen_read_psl); |
__strong_alias(x86_read_psl, xen_read_psl); |
__strong_alias(x86_write_psl, xen_write_psl); |
__strong_alias(x86_write_psl, xen_write_psl); |
|
|