Module Name: src
Committed By: cherry
Date: Sat Nov 4 14:56:48 UTC 2017
Modified Files:
src/sys/arch/x86/include: intr.h
src/sys/arch/x86/isa: isa_machdep.c
src/sys/arch/x86/x86: intr.c ioapic.c
src/sys/arch/xen/conf: files.xen
src/sys/arch/xen/include: evtchn.h intr.h
src/sys/arch/xen/xen: pci_intr_machdep.c pciide_machdep.c
Removed Files:
src/sys/arch/xen/x86: intr.c
Log Message:
Retire xen/x86/intr.c and use the new xen specific glue in x86/x86/intr.c
The purpose of this change is to expose the x86/include/intr.h API
to drivers. Specifically the following functions:
void *intr_establish_xname(...);
void *intr_establish(...);
void intr_disestablish(...);
while maintaining the old API from xen/include/evtchn.h, specifically
the following functions:
int event_set_handler(...);
int event_remove_handler(...);
This is so that if things break, we can keep using the old API until
everything stabilises. This is a stepping stone towards getting the
actual XEN event callback path rework code in place - which can be
done opaquely behind the intr.h API - NetBSD/XEN specific drivers that
have been ported to the intr.h API should then work without
significant further modifications.
To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/arch/x86/include/intr.h
cvs rdiff -u -r1.36 -r1.37 src/sys/arch/x86/isa/isa_machdep.c
cvs rdiff -u -r1.105 -r1.106 src/sys/arch/x86/x86/intr.c
cvs rdiff -u -r1.52 -r1.53 src/sys/arch/x86/x86/ioapic.c
cvs rdiff -u -r1.160 -r1.161 src/sys/arch/xen/conf/files.xen
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/xen/include/evtchn.h
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/xen/include/intr.h
cvs rdiff -u -r1.33 -r0 src/sys/arch/xen/x86/intr.c
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/xen/xen/pci_intr_machdep.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/xen/xen/pciide_machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/x86/include/intr.h
diff -u src/sys/arch/x86/include/intr.h:1.51 src/sys/arch/x86/include/intr.h:1.52
--- src/sys/arch/x86/include/intr.h:1.51 Sun Jul 16 14:02:48 2017
+++ src/sys/arch/x86/include/intr.h Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.51 2017/07/16 14:02:48 cherry Exp $ */
+/* $NetBSD: intr.h,v 1.52 2017/11/04 14:56:48 cherry Exp $ */
/*-
* Copyright (c) 1998, 2001, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -117,6 +117,18 @@ struct intrsource {
*/
struct intrhand {
+#if defined(XEN)
+ /*
+ * Note: This is transitional and will go away.
+ *
+ * We ought to use a union here, but too much effort.
+ * We use this field to tear down the cookie handed to us
+ * via x86/intr.c:intr_disestablish();
+ * Interestingly, the intr_establish_xname() function returns
+ * a "void *" - so we abuse this for now.
+ */
+ int pic_type; /* Overloading wrt struct pintrhand */
+#endif
int (*ih_fun)(void *);
void *ih_arg;
int ih_level;
@@ -124,10 +136,9 @@ struct intrhand {
void *ih_realarg;
struct intrhand *ih_next;
struct intrhand **ih_prevp;
-#if !defined(XEN)
int ih_pin;
int ih_slot;
-#else
+#if defined(XEN)
struct intrhand *ih_evt_next;
#endif
struct cpu_info *ih_cpu;
Index: src/sys/arch/x86/isa/isa_machdep.c
diff -u src/sys/arch/x86/isa/isa_machdep.c:1.36 src/sys/arch/x86/isa/isa_machdep.c:1.37
--- src/sys/arch/x86/isa/isa_machdep.c:1.36 Fri Jul 21 12:27:48 2017
+++ src/sys/arch/x86/isa/isa_machdep.c Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: isa_machdep.c,v 1.36 2017/07/21 12:27:48 cherry Exp $ */
+/* $NetBSD: isa_machdep.c,v 1.37 2017/11/04 14:56:48 cherry Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: isa_machdep.c,v 1.36 2017/07/21 12:27:48 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: isa_machdep.c,v 1.37 2017/11/04 14:56:48 cherry Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -245,7 +245,7 @@ isa_intr_establish_xname(isa_chipset_tag
mpih |= APIC_IRQ_LEGACY_IRQ(irq);
- evtch = xen_intr_map((int *)&mpih, type); /* XXX: legacy - xen just tosses irq back at us */
+ evtch = xen_pirq_alloc((intr_handle_t *)&mpih, type); /* XXX: legacy - xen just tosses irq back at us */
if (evtch == -1)
return NULL;
#if NIOAPIC > 0
Index: src/sys/arch/x86/x86/intr.c
diff -u src/sys/arch/x86/x86/intr.c:1.105 src/sys/arch/x86/x86/intr.c:1.106
--- src/sys/arch/x86/x86/intr.c:1.105 Fri Oct 27 12:25:14 2017
+++ src/sys/arch/x86/x86/intr.c Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.c,v 1.105 2017/10/27 12:25:14 joerg Exp $ */
+/* $NetBSD: intr.c,v 1.106 2017/11/04 14:56:48 cherry Exp $ */
/*-
* Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -133,7 +133,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.105 2017/10/27 12:25:14 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.106 2017/11/04 14:56:48 cherry Exp $");
#include "opt_intrdebug.h"
#include "opt_multiprocessor.h"
@@ -188,6 +188,13 @@ __KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.1
#define msipic_is_msi_pic(PIC) (false)
#endif
+#if defined(XEN) /* XXX: Cleanup */
+#include <xen/xen.h>
+#include <xen/hypervisor.h>
+#include <xen/evtchn.h>
+#include <xen/xenfunc.h>
+#endif /* XEN */
+
#ifdef DDB
#include <ddb/db_output.h>
#endif
@@ -220,6 +227,7 @@ static int intr_find_pcibridge(int, pcit
#endif
#endif
+#if !defined(XEN)
static int intr_allocate_slot_cpu(struct cpu_info *, struct pic *, int, int *,
struct intrsource *);
static int __noinline intr_allocate_slot(struct pic *, int, int,
@@ -232,6 +240,10 @@ static void intr_establish_xcall(void *,
static void intr_disestablish_xcall(void *, void *);
static const char *legacy_intr_string(int, char *, size_t, struct pic *);
+#if defined(XEN) /* XXX: nuke conditional after integration */
+static const char *xen_intr_string(int, char *, size_t, struct pic *);
+#endif /* XXX: XEN */
+#endif
static inline bool redzone_const_or_false(bool);
static inline int redzone_const_or_zero(int);
@@ -241,10 +253,12 @@ static void intr_redistribute_xc_s1(void
static void intr_redistribute_xc_s2(void *, void *);
static bool intr_redistribute(struct cpu_info *);
+#if !defined(XEN)
static const char *create_intrid(int, struct pic *, int, char *, size_t);
-
+#endif /* XEN */
static struct intrsource *intr_get_io_intrsource(const char *);
static void intr_free_io_intrsource_direct(struct intrsource *);
+#if !defined(XEN)
static int intr_num_handlers(struct intrsource *);
static int intr_find_unused_slot(struct cpu_info *, int *);
@@ -252,6 +266,7 @@ static void intr_activate_xcall(void *,
static void intr_deactivate_xcall(void *, void *);
static void intr_get_affinity(struct intrsource *, kcpuset_t *);
static int intr_set_affinity(struct intrsource *, const kcpuset_t *);
+#endif /* XEN */
/*
* Fill in default interrupt table (in case of spurious interrupt
@@ -260,6 +275,7 @@ static int intr_set_affinity(struct intr
void
intr_default_setup(void)
{
+#if !defined(XEN)
int i;
/* icu vectors */
@@ -273,6 +289,9 @@ intr_default_setup(void)
*/
i8259_default_setup();
+#else
+ events_default_setup();
+#endif /* !XEN */
mutex_init(&intr_distribute_lock, MUTEX_DEFAULT, IPL_NONE);
}
@@ -471,6 +490,7 @@ intr_scan_bus(int bus, int pin, intr_han
}
#endif
+#if !defined(XEN)
/*
* Create an interrupt id such as "ioapic0 pin 9". This interrupt id is used
* by MI code and intrctl(8).
@@ -478,7 +498,7 @@ intr_scan_bus(int bus, int pin, intr_han
static const char *
create_intrid(int legacy_irq, struct pic *pic, int pin, char *buf, size_t len)
{
- int ih;
+ int ih = 0;
#if NPCI > 0
if ((pic->pic_type == PIC_MSI) || (pic->pic_type == PIC_MSIX)) {
@@ -499,6 +519,15 @@ create_intrid(int legacy_irq, struct pic
}
#endif
+#if defined(XEN)
+ evtchn_port_t port = pin; /* Port number */
+
+ if (pic->pic_type == PIC_XEN) {
+ ih = pin;
+ return xen_intr_string(port, buf, len, pic);
+ }
+#endif
+
/*
* If the device is pci, "legacy_irq" is alway -1. Least 8 bit of "ih"
* is only used in intr_string() to show the irq number.
@@ -510,6 +539,7 @@ create_intrid(int legacy_irq, struct pic
return legacy_intr_string(ih, buf, len, pic);
}
+#if NIOAPIC > 0 || NACPICA > 0
ih = ((pic->pic_apicid << APIC_INT_APIC_SHIFT) & APIC_INT_APIC_MASK)
| ((pin << APIC_INT_PIN_SHIFT) & APIC_INT_PIN_MASK);
if (pic->pic_type == PIC_IOAPIC) {
@@ -517,8 +547,13 @@ create_intrid(int legacy_irq, struct pic
}
ih |= pin;
return intr_string(ih, buf, len);
+#endif
+
+ return NULL; /* No pic found! */
}
+#endif /* XEN */
+
/*
* Find intrsource from io_interrupt_sources list.
*/
@@ -613,6 +648,7 @@ intr_free_io_intrsource(const char *intr
intr_free_io_intrsource_direct(isp);
}
+#if !defined(XEN)
static int
intr_allocate_slot_cpu(struct cpu_info *ci, struct pic *pic, int pin,
int *index, struct intrsource *chained)
@@ -815,7 +851,9 @@ intr_biglock_wrapper(void *vp)
return ret;
}
#endif /* MULTIPROCESSOR */
+#endif /* XEN */
+#if defined(DOM0OPS) || !defined(XEN)
struct pic *
intr_findpic(int num)
{
@@ -831,7 +869,8 @@ intr_findpic(int num)
return NULL;
}
-
+#endif
+#if !defined(XEN)
/*
* Append device name to intrsource. If device A and device B share IRQ number,
* the device name of the interrupt id is "device A, device B".
@@ -1168,12 +1207,96 @@ intr_num_handlers(struct intrsource *isp
return num;
}
+#else /* XEN */
+void *
+intr_establish_xname(int legacy_irq, struct pic *pic, int pin,
+ int type, int level, int (*handler)(void *) , void *arg,
+ bool known_mpsafe, const char *xname)
+{
+ /* XXX xname registration not supported */
+ return intr_establish(legacy_irq, pic, pin, type, level, handler, arg,
+ known_mpsafe);
+}
+
+void *
+intr_establish(int legacy_irq, struct pic *pic, int pin,
+ int type, int level, int (*handler)(void *) , void *arg,
+ bool known_mpsafe)
+{
+ if (pic->pic_type == PIC_XEN) {
+ struct intrhand *rih;
+ event_set_handler(pin, handler,
+ arg, IPL_CLOCK, "clock");
+
+ rih = kmem_zalloc(sizeof(struct intrhand),
+ cold ? KM_NOSLEEP : KM_SLEEP);
+ if (rih == NULL) {
+ printf("%s: can't allocate handler info\n", __func__);
+ return NULL;
+ }
+
+ /*
+ * XXX:
+ * This is just a copy for API conformance.
+ * The real ih is lost in the innards of
+ * event_set_handler(); where the details of
+ * biglock_wrapper etc are taken care of.
+ * All that goes away when we nuke event_set_handler()
+ * et. al. and unify with x86/intr.c
+ */
+
+ rih->ih_pin = pin; /* port */
+ rih->ih_fun = handler;
+ rih->ih_arg = arg;
+ rih->pic_type = pic->pic_type;
+ return rih;
+ } /* Else we assume pintr */
+
+#if NPCI > 0 || NISA > 0
+ struct pintrhand *pih;
+ int evtchn;
+ char evname[16];
+
+#ifdef DIAGNOSTIC
+ if (legacy_irq != -1 && (legacy_irq < 0 || legacy_irq > 15))
+ panic("intr_establish: bad legacy IRQ value");
+ if (legacy_irq == -1 && pic == &i8259_pic)
+ panic("intr_establish: non-legacy IRQ on i8259");
+#endif /* DIAGNOSTIC */
+ if (legacy_irq == -1) {
+#if NIOAPIC > 0
+ /* will do interrupts via I/O APIC */
+ legacy_irq = APIC_INT_VIA_APIC;
+ legacy_irq |= pic->pic_apicid << APIC_INT_APIC_SHIFT;
+ legacy_irq |= pin << APIC_INT_PIN_SHIFT;
+ snprintf(evname, sizeof(evname), "%s pin %d",
+ pic->pic_name, pin);
+#else /* NIOAPIC */
+ return NULL;
+#endif /* NIOAPIC */
+ } else
+ snprintf(evname, sizeof(evname), "irq%d", legacy_irq);
+
+ evtchn = xen_pirq_alloc((intr_handle_t *)&legacy_irq, type);
+ pih = pirq_establish(legacy_irq & 0xff, evtchn, handler, arg, level,
+ evname);
+ pih->pic_type = pic->pic_type;
+ return pih;
+#endif /* NPCI > 0 || NISA > 0 */
+
+ /* FALLTHROUGH */
+ return NULL;
+}
+
+#endif /* XEN */
+
/*
* Deregister an interrupt handler.
*/
void
intr_disestablish(struct intrhand *ih)
{
+#if !defined(XEN)
struct cpu_info *ci;
struct intrsource *isp;
uint64_t where;
@@ -1199,7 +1322,33 @@ intr_disestablish(struct intrhand *ih)
}
mutex_exit(&cpu_lock);
kmem_free(ih, sizeof(*ih));
+#else /* XEN */
+ if (ih->pic_type == PIC_XEN) {
+ event_remove_handler(ih->ih_pin, ih->ih_realfun, ih->ih_realarg);
+ return;
+ }
+#if defined(DOM0OPS)
+ pirq_disestablish((struct pintrhand *)ih);
+#endif
+ return;
+#endif /* XEN */
+}
+
+#if !defined(XEN)
+#if defined(XEN) /* nuke conditional post integration */
+static const char *
+xen_intr_string(int port, char *buf, size_t len, struct pic *pic)
+{
+ KASSERT(pic->pic_type == PIC_XEN);
+
+ KASSERT(port >= 0);
+ KASSERT(port < NR_EVENT_CHANNELS);
+
+ snprintf(buf, len, "%s channel %d", pic->pic_name, port);
+
+ return buf;
}
+#endif /* XXX: XEN */
static const char *
legacy_intr_string(int ih, char *buf, size_t len, struct pic *pic)
@@ -1207,15 +1356,20 @@ legacy_intr_string(int ih, char *buf, si
int legacy_irq;
KASSERT(pic->pic_type == PIC_I8259);
+#if NLAPIC > 0
KASSERT(APIC_IRQ_ISLEGACY(ih));
legacy_irq = APIC_IRQ_LEGACY_IRQ(ih);
+#else
+ legacy_irq = ih;
+#endif
KASSERT(legacy_irq >= 0 && legacy_irq < 16);
snprintf(buf, len, "%s pin %d", pic->pic_name, legacy_irq);
return buf;
}
+#endif
const char *
intr_string(intr_handle_t ih, char *buf, size_t len)
@@ -1242,9 +1396,11 @@ intr_string(intr_handle_t ih, char *buf,
}
} else
snprintf(buf, len, "irq %d", APIC_IRQ_LEGACY_IRQ(ih));
-#else
+#elif NLAPIC > 0
snprintf(buf, len, "irq %d" APIC_IRQ_LEGACY_IRQ(ih));
+#else
+ snprintf(buf, len, "irq %d", (int) ih);
#endif
return buf;
@@ -1289,6 +1445,7 @@ redzone_const_or_zero(int x)
void
cpu_intr_init(struct cpu_info *ci)
{
+#if !defined(XEN)
struct intrsource *isp;
#if NLAPIC > 0 && defined(MULTIPROCESSOR)
int i;
@@ -1326,6 +1483,7 @@ cpu_intr_init(struct cpu_info *ci)
#endif
#endif
+#if defined(__HAVE_PREEMPTION)
isp = kmem_zalloc(sizeof(*isp), KM_SLEEP);
isp->is_recurse = Xpreemptrecurse;
isp->is_resume = Xpreemptresume;
@@ -1334,8 +1492,17 @@ cpu_intr_init(struct cpu_info *ci)
isp->is_pic = &softintr_pic;
ci->ci_isources[SIR_PREEMPT] = isp;
+#endif
intr_calculatemasks(ci);
+#else /* XEN */
+ int i; /* XXX: duplicate */
+ vaddr_t istack; /* XXX: duplicate */
+ ci->ci_iunmask[0] = 0xfffffffe;
+ for (i = 1; i < NIPL; i++)
+ ci->ci_iunmask[i] = ci->ci_iunmask[i - 1] & ~(1 << i);
+#endif /* XEN */
+
#if defined(INTRSTACKSIZE)
/*
* If the red zone is activated, protect both the top and
@@ -1413,6 +1580,7 @@ intr_printconfig(void)
#endif
+#if defined(__HAVE_FAST_SOFTINTS)
void
softint_init_md(lwp_t *l, u_int level, uintptr_t *machdep)
{
@@ -1460,7 +1628,7 @@ softint_init_md(lwp_t *l, u_int level, u
intr_calculatemasks(ci);
}
-
+#endif /* __HAVE_FAST_SOFTINTS */
/*
* Save current affinitied cpu's interrupt count.
*/
@@ -1690,6 +1858,9 @@ cpu_intr_redistribute(void)
KASSERT(mutex_owned(&cpu_lock));
KASSERT(mp_online);
+#if defined(XEN) /* XXX: remove */
+ return;
+#endif
/* Direct interrupts away from shielded CPUs. */
for (CPU_INFO_FOREACH(cii, ci)) {
if ((ci->ci_schedstate.spc_flags & SPCF_NOINTR) == 0) {
@@ -1712,6 +1883,7 @@ cpu_intr_count(struct cpu_info *ci)
return ci->ci_nintrhand;
}
+#if !defined(XEN)
static int
intr_find_unused_slot(struct cpu_info *ci, int *index)
{
@@ -1942,7 +2114,7 @@ intr_set_affinity(struct intrsource *isp
return err;
}
-
+#endif /* XEN */
static bool
intr_is_affinity_intrsource(struct intrsource *isp, const kcpuset_t *cpuset)
{
@@ -1970,6 +2142,7 @@ intr_get_handler(const char *intrid)
return isp->is_handlers;
}
+#if !defined(XEN)
/*
* MI interface for subr_interrupt.c
*/
@@ -2015,6 +2188,8 @@ interrupt_get_count(const char *intrid,
return count;
}
+#endif /* XEN */
+
/*
* MI interface for subr_interrupt.c
*/
@@ -2039,6 +2214,8 @@ interrupt_get_assigned(const char *intri
mutex_exit(&cpu_lock);
}
+#if !defined(XEN)
+
/*
* MI interface for subr_interrupt.c
*/
@@ -2150,6 +2327,7 @@ interrupt_distribute_handler(const char
mutex_exit(&intr_distribute_lock);
return error;
}
+#endif
/*
* MI interface for subr_interrupt.c
Index: src/sys/arch/x86/x86/ioapic.c
diff -u src/sys/arch/x86/x86/ioapic.c:1.52 src/sys/arch/x86/x86/ioapic.c:1.53
--- src/sys/arch/x86/x86/ioapic.c:1.52 Mon Jul 27 15:45:20 2015
+++ src/sys/arch/x86/x86/ioapic.c Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ioapic.c,v 1.52 2015/07/27 15:45:20 msaitoh Exp $ */
+/* $NetBSD: ioapic.c,v 1.53 2017/11/04 14:56:48 cherry Exp $ */
/*-
* Copyright (c) 2000, 2009 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ioapic.c,v 1.52 2015/07/27 15:45:20 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ioapic.c,v 1.53 2017/11/04 14:56:48 cherry Exp $");
#include "opt_ddb.h"
@@ -565,6 +565,25 @@ ioapic_addroute(struct pic *pic, struct
pp->ip_vector = idtvec;
pp->ip_cpu = ci;
apic_set_redir(sc, pin, idtvec, ci);
+
+#if defined(XEN)
+ /*
+ * This is kludgy, and not the right place, but we can't bind
+ * before the routing has been set to the appropriate 'vector'.
+ * in x86/intr.c, this is done after idt_vec_set(), where this
+ * would have been more appropriate to put this.
+ */
+
+ int port, irq;
+ irq = vect2irq[idtvec];
+ port = bind_pirq_to_evtch(irq);
+ KASSERT(port < NR_EVENT_CHANNELS);
+
+ irq2port[irq] = port;
+
+ xen_atomic_set_bit(&ci->ci_evtmask[0], port);
+#endif
+
}
static void
@@ -573,6 +592,16 @@ ioapic_delroute(struct pic *pic, struct
{
ioapic_hwmask(pic, pin);
+
+#if defined(XEN)
+ int port, irq;
+ irq = vect2irq[idtvec];
+ port = bind_pirq_to_evtch(irq);
+ port = unbind_pirq_from_evtch(irq);
+
+ KASSERT(port < NR_EVENT_CHANNELS);
+#endif
+
}
#ifdef DDB
Index: src/sys/arch/xen/conf/files.xen
diff -u src/sys/arch/xen/conf/files.xen:1.160 src/sys/arch/xen/conf/files.xen:1.161
--- src/sys/arch/xen/conf/files.xen:1.160 Sat Nov 4 09:22:16 2017
+++ src/sys/arch/xen/conf/files.xen Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-# $NetBSD: files.xen,v 1.160 2017/11/04 09:22:16 cherry Exp $
+# $NetBSD: files.xen,v 1.161 2017/11/04 14:56:48 cherry Exp $
# NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp
# NetBSD: files.i386,v 1.254 2004/03/25 23:32:10 jmc Exp
@@ -141,6 +141,7 @@ file arch/x86/x86/identcpu.c machdep
file arch/xen/x86/pintr.c machdep & dom0ops
file arch/xen/x86/intr.c machdep
file arch/xen/x86/xen_ipi.c multiprocessor
+file arch/x86/x86/intr.c machdep
file arch/x86/x86/idt.c machdep
file arch/x86/x86/pmap.c machdep
file arch/x86/x86/pmap_tlb.c machdep
Index: src/sys/arch/xen/include/evtchn.h
diff -u src/sys/arch/xen/include/evtchn.h:1.24 src/sys/arch/xen/include/evtchn.h:1.25
--- src/sys/arch/xen/include/evtchn.h:1.24 Sun Jul 16 05:03:36 2017
+++ src/sys/arch/xen/include/evtchn.h Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: evtchn.h,v 1.24 2017/07/16 05:03:36 cherry Exp $ */
+/* $NetBSD: evtchn.h,v 1.25 2017/11/04 14:56:48 cherry Exp $ */
/*
*
@@ -60,6 +60,8 @@ int unbind_virq_from_evtch(int);
evtchn_port_t bind_vcpu_to_evtch(cpuid_t);
struct pintrhand {
+ /* See comments in x86/include/intr.h:struct intrhand {} */
+ int pic_type;
int pirq;
int evtch;
int (*func)(void *);
Index: src/sys/arch/xen/include/intr.h
diff -u src/sys/arch/xen/include/intr.h:1.43 src/sys/arch/xen/include/intr.h:1.44
--- src/sys/arch/xen/include/intr.h:1.43 Sat Nov 4 09:22:16 2017
+++ src/sys/arch/xen/include/intr.h Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.43 2017/11/04 09:22:16 cherry Exp $ */
+/* $NetBSD: intr.h,v 1.44 2017/11/04 14:56:48 cherry Exp $ */
/* NetBSD intr.h,v 1.15 2004/10/31 10:39:34 yamt Exp */
/*-
@@ -69,9 +69,6 @@ extern int irq2port[NR_EVENT_CHANNELS];
int xen_intr_biglock_wrapper(void *);
#endif
-int xen_intr_map(int *, int);
-struct pic *intr_findpic(int);
-void intr_add_pcibus(struct pcibus_attach_args *);
#if defined(DOM0OPS) || NPCI > 0
int xen_pirq_alloc(intr_handle_t *, int);
#endif /* defined(DOM0OPS) || NPCI > 0 */
Index: src/sys/arch/xen/xen/pci_intr_machdep.c
diff -u src/sys/arch/xen/xen/pci_intr_machdep.c:1.20 src/sys/arch/xen/xen/pci_intr_machdep.c:1.21
--- src/sys/arch/xen/xen/pci_intr_machdep.c:1.20 Fri Jul 28 07:42:41 2017
+++ src/sys/arch/xen/xen/pci_intr_machdep.c Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_intr_machdep.c,v 1.20 2017/07/28 07:42:41 cherry Exp $ */
+/* $NetBSD: pci_intr_machdep.c,v 1.21 2017/11/04 14:56:48 cherry Exp $ */
/*
* Copyright (c) 2005 Manuel Bouyer.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_intr_machdep.c,v 1.20 2017/07/28 07:42:41 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_intr_machdep.c,v 1.21 2017/11/04 14:56:48 cherry Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -149,7 +149,7 @@ pci_intr_map(const struct pci_attach_arg
#if NIOAPIC > 0
end:
#endif
- evtch = xen_intr_map((int *)ihp, IST_LEVEL);
+ evtch = xen_pirq_alloc((intr_handle_t *)ihp, IST_LEVEL);
if (evtch == -1)
goto bad;
Index: src/sys/arch/xen/xen/pciide_machdep.c
diff -u src/sys/arch/xen/xen/pciide_machdep.c:1.19 src/sys/arch/xen/xen/pciide_machdep.c:1.20
--- src/sys/arch/xen/xen/pciide_machdep.c:1.19 Sun Jul 16 06:14:24 2017
+++ src/sys/arch/xen/xen/pciide_machdep.c Sat Nov 4 14:56:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: pciide_machdep.c,v 1.19 2017/07/16 06:14:24 cherry Exp $ */
+/* $NetBSD: pciide_machdep.c,v 1.20 2017/11/04 14:56:48 cherry Exp $ */
/*
* Copyright (c) 1998 Christopher G. Demetriou. All rights reserved.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pciide_machdep.c,v 1.19 2017/07/16 06:14:24 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pciide_machdep.c,v 1.20 2017/11/04 14:56:48 cherry Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -96,7 +96,7 @@ pciide_machdep_compat_intr_establish(dev
}
#endif
xenih |= PCIIDE_COMPAT_IRQ(chan);
- evtch = xen_intr_map((int *)&xenih, IST_EDGE);
+ evtch = xen_pirq_alloc((intr_handle_t *)&xenih, IST_EDGE);
if (evtch == -1)
return NULL;
#if NIOAPIC > 0