Module Name: src Committed By: cherry Date: Mon Dec 24 14:55:42 UTC 2018
Modified Files: src/sys/arch/x86/x86: intr.c src/sys/arch/xen/include: intr.h src/sys/arch/xen/x86: xen_intr.c xen_ipi.c src/sys/arch/xen/xen: clock.c if_xennet_xenbus.c pciback.c xbd_xenbus.c xbdback_xenbus.c xencons.c xenevt.c xennetback_xenbus.c xpci_xenbus.c src/sys/arch/xen/xenbus: xenbus_comms.c Log Message: Bifurcate the interrupt establish functions between XEN and non-XEN Thus intr_establish_xname() becomes xen_intr_establish_xname() etc. One consequence of this is that dom0 devices expect the native function calls to be available and we thus provide weak aliasing for dom0 builds to succeed. XEN and non-XEN devices are distinguished by the PIC they are established on. XEN interrupts are exclusively established on xen_pic, while dom0 interrupts are established on natively available PICs. This allows us an orthogonal path to xen device management (eg: xenstore events) in XENPVHVM, without having to worry about unifying the vector entry paths, etc., which is quite challenging. To generate a diff of this commit: cvs rdiff -u -r1.138 -r1.139 src/sys/arch/x86/x86/intr.c cvs rdiff -u -r1.49 -r1.50 src/sys/arch/xen/include/intr.h cvs rdiff -u -r1.9 -r1.10 src/sys/arch/xen/x86/xen_intr.c cvs rdiff -u -r1.28 -r1.29 src/sys/arch/xen/x86/xen_ipi.c cvs rdiff -u -r1.74 -r1.75 src/sys/arch/xen/xen/clock.c cvs rdiff -u -r1.81 -r1.82 src/sys/arch/xen/xen/if_xennet_xenbus.c cvs rdiff -u -r1.17 -r1.18 src/sys/arch/xen/xen/pciback.c cvs rdiff -u -r1.90 -r1.91 src/sys/arch/xen/xen/xbd_xenbus.c cvs rdiff -u -r1.69 -r1.70 src/sys/arch/xen/xen/xbdback_xenbus.c cvs rdiff -u -r1.46 -r1.47 src/sys/arch/xen/xen/xencons.c cvs rdiff -u -r1.51 -r1.52 src/sys/arch/xen/xen/xenevt.c cvs rdiff -u -r1.72 -r1.73 src/sys/arch/xen/xen/xennetback_xenbus.c cvs rdiff -u -r1.20 -r1.21 src/sys/arch/xen/xen/xpci_xenbus.c cvs rdiff -u -r1.20 -r1.21 src/sys/arch/xen/xenbus/xenbus_comms.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/x86/intr.c diff -u src/sys/arch/x86/x86/intr.c:1.138 src/sys/arch/x86/x86/intr.c:1.139 --- src/sys/arch/x86/x86/intr.c:1.138 Sun Dec 23 12:11:40 2018 +++ src/sys/arch/x86/x86/intr.c Mon Dec 24 14:55:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.c,v 1.138 2018/12/23 12:11:40 jdolecek Exp $ */ +/* $NetBSD: intr.c,v 1.139 2018/12/24 14:55:41 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.138 2018/12/23 12:11:40 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.139 2018/12/24 14:55:41 cherry Exp $"); #include "opt_intrdebug.h" #include "opt_multiprocessor.h" @@ -1207,117 +1207,12 @@ intr_num_handlers(struct intrsource *isp return num; } -#else /* XEN */ -void * -intr_establish(int legacy_irq, struct pic *pic, int pin, - int type, int level, int (*handler)(void *), void *arg, - bool known_mpsafe) -{ - - return intr_establish_xname(legacy_irq, pic, pin, type, level, - handler, arg, known_mpsafe, "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) -{ - const char *intrstr; - char intrstr_buf[INTRIDBUF]; - - if (pic->pic_type == PIC_XEN) { - struct intrhand *rih; - - /* - * event_set_handler interprets `level != IPL_VM' to - * mean MP-safe, so we require the caller to match that - * for the moment. - */ - KASSERT(known_mpsafe == (level != IPL_VM)); - - intrstr = intr_create_intrid(legacy_irq, pic, pin, intrstr_buf, - sizeof(intrstr_buf)); - - event_set_handler(pin, handler, arg, level, intrstr, xname); - - rih = kmem_zalloc(sizeof(*rih), 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 = rih->ih_realfun = handler; - rih->ih_arg = rih->ih_realarg = arg; - rih->pic_type = pic->pic_type; - return rih; - } /* Else we assume pintr */ - -#if NPCI > 0 || NISA > 0 - struct pintrhand *pih; - int gsi; - int vector, evtchn; - - KASSERTMSG(legacy_irq == -1 || (0 <= legacy_irq && legacy_irq < NUM_XEN_IRQS), - "bad legacy IRQ value: %d", legacy_irq); - KASSERTMSG(!(legacy_irq == -1 && pic == &i8259_pic), - "non-legacy IRQon i8259 "); - - gsi = xen_pic_to_gsi(pic, pin); - - intrstr = intr_create_intrid(gsi, pic, pin, intrstr_buf, - sizeof(intrstr_buf)); - - vector = xen_vec_alloc(gsi); - - if (irq2port[gsi] == 0) { - extern struct cpu_info phycpu_info_primary; /* XXX */ - struct cpu_info *ci = &phycpu_info_primary; - - pic->pic_addroute(pic, ci, pin, vector, type); - - evtchn = bind_pirq_to_evtch(gsi); - KASSERT(evtchn > 0); - KASSERT(evtchn < NR_EVENT_CHANNELS); - irq2port[gsi] = evtchn + 1; - xen_atomic_set_bit(&ci->ci_evtmask[0], evtchn); - } else { - /* - * Shared interrupt - we can't rebind. - * The port is shared instead. - */ - evtchn = irq2port[gsi] - 1; - } - - pih = pirq_establish(gsi, evtchn, handler, arg, level, - intrstr, xname); - 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; @@ -1343,44 +1238,10 @@ 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); - kmem_free(ih, sizeof(*ih)); - return; - } -#if defined(DOM0OPS) - /* - * Cache state, to prevent a use after free situation with - * ih. - */ - - struct pintrhand *pih = (struct pintrhand *)ih; - - int pirq = pih->pirq; - int port = pih->evtch; - KASSERT(irq2port[pirq] != 0); - - pirq_disestablish(pih); - - if (evtsource[port] == NULL) { - /* - * Last handler was removed by - * event_remove_handler(). - * - * We can safely unbind the pirq now. - */ - - port = unbind_pirq_from_evtch(pirq); - KASSERT(port == pih->evtch); - irq2port[pirq] = 0; - } -#endif - return; -#endif /* XEN */ } +#endif /* !XEN */ + #if defined(XEN) /* nuke conditional post integration */ static const char * xen_intr_string(int port, char *buf, size_t len, struct pic *pic) Index: src/sys/arch/xen/include/intr.h diff -u src/sys/arch/xen/include/intr.h:1.49 src/sys/arch/xen/include/intr.h:1.50 --- src/sys/arch/xen/include/intr.h:1.49 Wed Oct 10 02:34:08 2018 +++ src/sys/arch/xen/include/intr.h Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.49 2018/10/10 02:34:08 cherry Exp $ */ +/* $NetBSD: intr.h,v 1.50 2018/12/24 14:55:42 cherry Exp $ */ /* NetBSD intr.h,v 1.15 2004/10/31 10:39:34 yamt Exp */ /*- @@ -82,6 +82,13 @@ void xen_broadcast_ipi(uint32_t); #define xen_send_ipi(_i1, _i2) (0) /* nothing */ #define xen_broadcast_ipi(_i1) ((void) 0) /* nothing */ #endif /* MULTIPROCESSOR */ + +void *xen_intr_establish_xname(int, struct pic *, int, int, int, int (*)(void *), + void *, bool, const char *); +void *xen_intr_establish(int, struct pic *, int, int, int, int (*)(void *), + void *, bool); +void xen_intr_disestablish(struct intrhand *); + #endif /* !_LOCORE */ #endif /* _XEN_INTR_H_ */ Index: src/sys/arch/xen/x86/xen_intr.c diff -u src/sys/arch/xen/x86/xen_intr.c:1.9 src/sys/arch/xen/x86/xen_intr.c:1.10 --- src/sys/arch/xen/x86/xen_intr.c:1.9 Fri Jan 16 20:16:47 2009 +++ src/sys/arch/xen/x86/xen_intr.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xen_intr.c,v 1.9 2009/01/16 20:16:47 jym Exp $ */ +/* $NetBSD: xen_intr.c,v 1.10 2018/12/24 14:55:42 cherry Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -30,9 +30,13 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.9 2009/01/16 20:16:47 jym Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.10 2018/12/24 14:55:42 cherry Exp $"); #include <sys/param.h> +#include <sys/kernel.h> +#include <sys/kmem.h> + +#include <xen/evtchn.h> #include <machine/cpu.h> #include <machine/intr.h> @@ -112,3 +116,151 @@ x86_write_psl(u_long psl) hypervisor_force_callback(); } } + +void * +xen_intr_establish(int legacy_irq, struct pic *pic, int pin, + int type, int level, int (*handler)(void *), void *arg, + bool known_mpsafe) +{ + + return xen_intr_establish_xname(legacy_irq, pic, pin, type, level, + handler, arg, known_mpsafe, "XEN"); +} + +void * +xen_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) +{ + const char *intrstr; + char intrstr_buf[INTRIDBUF]; + + if (pic->pic_type == PIC_XEN) { + struct intrhand *rih; + + /* + * event_set_handler interprets `level != IPL_VM' to + * mean MP-safe, so we require the caller to match that + * for the moment. + */ + KASSERT(known_mpsafe == (level != IPL_VM)); + + intrstr = intr_create_intrid(legacy_irq, pic, pin, intrstr_buf, + sizeof(intrstr_buf)); + + event_set_handler(pin, handler, arg, level, intrstr, xname); + + rih = kmem_zalloc(sizeof(*rih), 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 = rih->ih_realfun = handler; + rih->ih_arg = rih->ih_realarg = arg; + rih->pic_type = pic->pic_type; + return rih; + } /* Else we assume pintr */ + +#if NPCI > 0 || NISA > 0 + struct pintrhand *pih; + int gsi; + int vector, evtchn; + + KASSERTMSG(legacy_irq == -1 || (0 <= legacy_irq && legacy_irq < NUM_XEN_IRQS), + "bad legacy IRQ value: %d", legacy_irq); + KASSERTMSG(!(legacy_irq == -1 && pic == &i8259_pic), + "non-legacy IRQon i8259 "); + + gsi = xen_pic_to_gsi(pic, pin); + + intrstr = intr_create_intrid(gsi, pic, pin, intrstr_buf, + sizeof(intrstr_buf)); + + vector = xen_vec_alloc(gsi); + + if (irq2port[gsi] == 0) { + extern struct cpu_info phycpu_info_primary; /* XXX */ + struct cpu_info *ci = &phycpu_info_primary; + + pic->pic_addroute(pic, ci, pin, vector, type); + + evtchn = bind_pirq_to_evtch(gsi); + KASSERT(evtchn > 0); + KASSERT(evtchn < NR_EVENT_CHANNELS); + irq2port[gsi] = evtchn + 1; + xen_atomic_set_bit(&ci->ci_evtmask[0], evtchn); + } else { + /* + * Shared interrupt - we can't rebind. + * The port is shared instead. + */ + evtchn = irq2port[gsi] - 1; + } + + pih = pirq_establish(gsi, evtchn, handler, arg, level, + intrstr, xname); + pih->pic_type = pic->pic_type; + return pih; +#endif /* NPCI > 0 || NISA > 0 */ + + /* FALLTHROUGH */ + return NULL; +} + +/* + * Deregister an interrupt handler. + */ +void +xen_intr_disestablish(struct intrhand *ih) +{ + + if (ih->pic_type == PIC_XEN) { + event_remove_handler(ih->ih_pin, ih->ih_realfun, + ih->ih_realarg); + kmem_free(ih, sizeof(*ih)); + return; + } +#if defined(DOM0OPS) + /* + * Cache state, to prevent a use after free situation with + * ih. + */ + + struct pintrhand *pih = (struct pintrhand *)ih; + + int pirq = pih->pirq; + int port = pih->evtch; + KASSERT(irq2port[pirq] != 0); + + pirq_disestablish(pih); + + if (evtsource[port] == NULL) { + /* + * Last handler was removed by + * event_remove_handler(). + * + * We can safely unbind the pirq now. + */ + + port = unbind_pirq_from_evtch(pirq); + KASSERT(port == pih->evtch); + irq2port[pirq] = 0; + } +#endif + return; +} + +__weak_alias(intr_establish, xen_intr_establish); +__weak_alias(intr_establish_xname, xen_intr_establish_xname); +__weak_alias(intr_disestablish, xen_intr_disestablish); Index: src/sys/arch/xen/x86/xen_ipi.c diff -u src/sys/arch/xen/x86/xen_ipi.c:1.28 src/sys/arch/xen/x86/xen_ipi.c:1.29 --- src/sys/arch/xen/x86/xen_ipi.c:1.28 Fri Oct 26 05:33:21 2018 +++ src/sys/arch/xen/x86/xen_ipi.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xen_ipi.c,v 1.28 2018/10/26 05:33:21 cherry Exp $ */ +/* $NetBSD: xen_ipi.c,v 1.29 2018/12/24 14:55:42 cherry Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -33,10 +33,10 @@ /* * Based on: x86/ipi.c - * __KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.28 2018/10/26 05:33:21 cherry Exp $"); + * __KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.29 2018/12/24 14:55:42 cherry Exp $"); */ -__KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.28 2018/10/26 05:33:21 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.29 2018/12/24 14:55:42 cherry Exp $"); #include "opt_ddb.h" @@ -137,7 +137,7 @@ xen_ipi_init(void) snprintf(intr_xname, sizeof(intr_xname), "%s ipi", device_xname(ci->ci_dev)); - if (intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, IPL_HIGH, + if (xen_intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, IPL_HIGH, xen_ipi_handler, ci, true, intr_xname) == NULL) { panic("%s: unable to register ipi handler\n", __func__); /* NOTREACHED */ Index: src/sys/arch/xen/xen/clock.c diff -u src/sys/arch/xen/xen/clock.c:1.74 src/sys/arch/xen/xen/clock.c:1.75 --- src/sys/arch/xen/xen/clock.c:1.74 Sun Nov 18 23:50:48 2018 +++ src/sys/arch/xen/xen/clock.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: clock.c,v 1.74 2018/11/18 23:50:48 cherry Exp $ */ +/* $NetBSD: clock.c,v 1.75 2018/12/24 14:55:42 cherry Exp $ */ /*- * Copyright (c) 2017, 2018 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.74 2018/11/18 23:50:48 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.75 2018/12/24 14:55:42 cherry Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -728,7 +728,7 @@ xen_suspendclocks(struct cpu_info *ci) KASSERT(evtch != -1); hypervisor_mask_event(evtch); - intr_disestablish(ci->ci_xen_timer_intrhand); + xen_intr_disestablish(ci->ci_xen_timer_intrhand); ci->ci_xen_timer_intrhand = NULL; aprint_verbose("Xen clock: removed event channel %d\n", evtch); @@ -763,7 +763,7 @@ xen_resumeclocks(struct cpu_info *ci) snprintf(intr_xname, sizeof(intr_xname), "%s clock", device_xname(ci->ci_dev)); /* XXX sketchy function pointer cast -- fix the API, please */ - ci->ci_xen_timer_intrhand = intr_establish_xname(-1, &xen_pic, evtch, + ci->ci_xen_timer_intrhand = xen_intr_establish_xname(-1, &xen_pic, evtch, IST_LEVEL, IPL_CLOCK, (int (*)(void *))xen_timer_handler, ci, true, intr_xname); if (ci->ci_xen_timer_intrhand == NULL) Index: src/sys/arch/xen/xen/if_xennet_xenbus.c diff -u src/sys/arch/xen/xen/if_xennet_xenbus.c:1.81 src/sys/arch/xen/xen/if_xennet_xenbus.c:1.82 --- src/sys/arch/xen/xen/if_xennet_xenbus.c:1.81 Fri Oct 26 05:33:21 2018 +++ src/sys/arch/xen/xen/if_xennet_xenbus.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_xennet_xenbus.c,v 1.81 2018/10/26 05:33:21 cherry Exp $ */ +/* $NetBSD: if_xennet_xenbus.c,v 1.82 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -84,7 +84,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.81 2018/10/26 05:33:21 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.82 2018/12/24 14:55:42 cherry Exp $"); #include "opt_xen.h" #include "opt_nfs_boot.h" @@ -423,7 +423,7 @@ xennet_xenbus_detach(device_t self, int DPRINTF(("%s: xennet_xenbus_detach\n", device_xname(self))); s0 = splnet(); xennet_stop(ifp, 1); - intr_disestablish(sc->sc_ih); + xen_intr_disestablish(sc->sc_ih); /* wait for pending TX to complete, and collect pending RX packets */ xennet_handler(sc); while (sc->sc_tx_ring.sring->rsp_prod != sc->sc_tx_ring.rsp_cons) { @@ -517,7 +517,7 @@ xennet_xenbus_resume(device_t dev, const goto abort_resume; aprint_verbose_dev(dev, "using event channel %d\n", sc->sc_evtchn); - sc->sc_ih = intr_establish_xname(-1, &xen_pic, sc->sc_evtchn, IST_LEVEL, + sc->sc_ih = xen_intr_establish_xname(-1, &xen_pic, sc->sc_evtchn, IST_LEVEL, IPL_NET, &xennet_handler, sc, false, device_xname(dev)); KASSERT(sc->sc_ih != NULL); return true; @@ -641,7 +641,7 @@ xennet_xenbus_suspend(device_t dev, cons */ sc->sc_backend_status = BEST_SUSPENDED; - intr_disestablish(sc->sc_ih); + xen_intr_disestablish(sc->sc_ih); splx(s); Index: src/sys/arch/xen/xen/pciback.c diff -u src/sys/arch/xen/xen/pciback.c:1.17 src/sys/arch/xen/xen/pciback.c:1.18 --- src/sys/arch/xen/xen/pciback.c:1.17 Fri Oct 26 05:33:21 2018 +++ src/sys/arch/xen/xen/pciback.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pciback.c,v 1.17 2018/10/26 05:33:21 cherry Exp $ */ +/* $NetBSD: pciback.c,v 1.18 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2009 Manuel Bouyer. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pciback.c,v 1.17 2018/10/26 05:33:21 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pciback.c,v 1.18 2018/12/24 14:55:42 cherry Exp $"); #include "opt_xen.h" @@ -525,7 +525,7 @@ pciback_xenbus_destroy(void *arg) int err; hypervisor_mask_event(pbxi->pbx_evtchn); - intr_disestablish(pbxi->pbx_ih); + xen_intr_disestablish(pbxi->pbx_ih); mutex_enter(&pb_xenbus_lock); SLIST_REMOVE(&pb_xenbus_instances, pbxi, pb_xenbus_instance, pbx_next); @@ -619,8 +619,8 @@ pciback_xenbus_frontend_changed(void *ar x86_sfence(); xenbus_switch_state(xbusd, NULL, XenbusStateConnected); x86_sfence(); - pbxi->pbx_ih = intr_establish_xname(-1, &xen_pic, pbxi->pbx_evtchn, IST_LEVEL, IPL_BIO, - pciback_xenbus_evthandler, pbxi, true, "pciback"); + pbxi->pbx_ih = xen_intr_establish_xname(-1, &xen_pic, pbxi->pbx_evtchn, + IST_LEVEL, IPL_BIO, pciback_xenbus_evthandler, pbxi, true, "pciback"); KASSERT(pbxi->pbx_ih != NULL); hypervisor_unmask_event(pbxi->pbx_evtchn); hypervisor_notify_via_evtchn(pbxi->pbx_evtchn); Index: src/sys/arch/xen/xen/xbd_xenbus.c diff -u src/sys/arch/xen/xen/xbd_xenbus.c:1.90 src/sys/arch/xen/xen/xbd_xenbus.c:1.91 --- src/sys/arch/xen/xen/xbd_xenbus.c:1.90 Fri Oct 26 05:33:21 2018 +++ src/sys/arch/xen/xen/xbd_xenbus.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xbd_xenbus.c,v 1.90 2018/10/26 05:33:21 cherry Exp $ */ +/* $NetBSD: xbd_xenbus.c,v 1.91 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.90 2018/10/26 05:33:21 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.91 2018/12/24 14:55:42 cherry Exp $"); #include "opt_xen.h" @@ -378,7 +378,7 @@ xbd_xenbus_detach(device_t dev, int flag } hypervisor_mask_event(sc->sc_evtchn); - intr_disestablish(sc->sc_ih); + xen_intr_disestablish(sc->sc_ih); while (xengnt_status(sc->sc_ring_gntref)) { /* XXXSMP */ @@ -413,7 +413,7 @@ xbd_xenbus_suspend(device_t dev, const p hypervisor_mask_event(sc->sc_evtchn); sc->sc_backend_status = BLKIF_STATE_SUSPENDED; - intr_disestablish(sc->sc_ih); + xen_intr_disestablish(sc->sc_ih); splx(s); @@ -465,7 +465,7 @@ xbd_xenbus_resume(device_t dev, const pm aprint_verbose_dev(dev, "using event channel %d\n", sc->sc_evtchn); - sc->sc_ih = intr_establish_xname(-1, &xen_pic, sc->sc_evtchn, IST_LEVEL, + sc->sc_ih = xen_intr_establish_xname(-1, &xen_pic, sc->sc_evtchn, IST_LEVEL, IPL_BIO, &xbd_handler, sc, false, device_xname(dev)); KASSERT(sc->sc_ih != NULL); Index: src/sys/arch/xen/xen/xbdback_xenbus.c diff -u src/sys/arch/xen/xen/xbdback_xenbus.c:1.69 src/sys/arch/xen/xen/xbdback_xenbus.c:1.70 --- src/sys/arch/xen/xen/xbdback_xenbus.c:1.69 Fri Oct 26 05:33:21 2018 +++ src/sys/arch/xen/xen/xbdback_xenbus.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xbdback_xenbus.c,v 1.69 2018/10/26 05:33:21 cherry Exp $ */ +/* $NetBSD: xbdback_xenbus.c,v 1.70 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.69 2018/10/26 05:33:21 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.70 2018/12/24 14:55:42 cherry Exp $"); #include <sys/atomic.h> #include <sys/buf.h> @@ -644,7 +644,7 @@ xbdback_connect(struct xbdback_instance XENPRINTF(("xbdback %s: connect evchannel %d\n", xbusd->xbusd_path, xbdi->xbdi_evtchn)); xbdi->xbdi_evtchn = evop.u.bind_interdomain.local_port; - xbdi->xbdi_ih = intr_establish_xname(-1, &xen_pic, xbdi->xbdi_evtchn, + xbdi->xbdi_ih = xen_intr_establish_xname(-1, &xen_pic, xbdi->xbdi_evtchn, IST_LEVEL, IPL_BIO, xbdback_evthandler, xbdi, false, xbdi->xbdi_name); KASSERT(xbdi->xbdi_ih != NULL); @@ -691,7 +691,7 @@ xbdback_disconnect(struct xbdback_instan return; } hypervisor_mask_event(xbdi->xbdi_evtchn); - intr_disestablish(xbdi->xbdi_ih); + xen_intr_disestablish(xbdi->xbdi_ih); /* signal thread that we want to disconnect, then wait for it */ xbdi->xbdi_status = DISCONNECTING; Index: src/sys/arch/xen/xen/xencons.c diff -u src/sys/arch/xen/xen/xencons.c:1.46 src/sys/arch/xen/xen/xencons.c:1.47 --- src/sys/arch/xen/xen/xencons.c:1.46 Fri Oct 26 05:33:21 2018 +++ src/sys/arch/xen/xen/xencons.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xencons.c,v 1.46 2018/10/26 05:33:21 cherry Exp $ */ +/* $NetBSD: xencons.c,v 1.47 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -53,7 +53,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xencons.c,v 1.46 2018/10/26 05:33:21 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xencons.c,v 1.47 2018/12/24 14:55:42 cherry Exp $"); #include "opt_xen.h" @@ -217,7 +217,7 @@ xencons_suspend(device_t dev, const pmf_ if (!xendomain_is_dom0()) { evtch = xen_start_info.console_evtchn; hypervisor_mask_event(evtch); - intr_disestablish(ih); + xen_intr_disestablish(ih); aprint_verbose_dev(dev, "removed event channel %d\n", ih->ih_pin); } @@ -233,7 +233,7 @@ xencons_resume(device_t dev, const pmf_q /* dom0 console resume is required only during first start-up */ if (cold) { evtch = bind_virq_to_evtch(VIRQ_CONSOLE); - ih = intr_establish_xname(-1, &xen_pic, evtch, + ih = xen_intr_establish_xname(-1, &xen_pic, evtch, IST_LEVEL, IPL_TTY, xencons_intr, xencons_console_device, false, device_xname(dev)); @@ -241,7 +241,7 @@ xencons_resume(device_t dev, const pmf_q } } else { evtch = xen_start_info.console_evtchn; - ih = intr_establish_xname(-1, &xen_pic, evtch, + ih = xen_intr_establish_xname(-1, &xen_pic, evtch, IST_LEVEL, IPL_TTY, xencons_handler, xencons_console_device, false, device_xname(dev)); KASSERT(ih != NULL); Index: src/sys/arch/xen/xen/xenevt.c diff -u src/sys/arch/xen/xen/xenevt.c:1.51 src/sys/arch/xen/xen/xenevt.c:1.52 --- src/sys/arch/xen/xen/xenevt.c:1.51 Wed Oct 24 03:59:33 2018 +++ src/sys/arch/xen/xen/xenevt.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xenevt.c,v 1.51 2018/10/24 03:59:33 cherry Exp $ */ +/* $NetBSD: xenevt.c,v 1.52 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2005 Manuel Bouyer. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xenevt.c,v 1.51 2018/10/24 03:59:33 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xenevt.c,v 1.52 2018/12/24 14:55:42 cherry Exp $"); #include "opt_xen.h" #include <sys/param.h> @@ -178,12 +178,12 @@ xenevtattach(int n) * Allocate a loopback event port. * This helps us massage xenevt_processevt() into the * callchain at the appropriate level using only - * intr_establish_xname(). + * xen_intr_establish_xname(). */ evtchn_port_t evtchn = xenevt_alloc_event(); /* The real objective here is to wiggle into the ih callchain for IPL level */ - ih = intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, level, + ih = xen_intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, level, xenevt_processevt, NULL, mpsafe, "xenevt"); KASSERT(ih != NULL); Index: src/sys/arch/xen/xen/xennetback_xenbus.c diff -u src/sys/arch/xen/xen/xennetback_xenbus.c:1.72 src/sys/arch/xen/xen/xennetback_xenbus.c:1.73 --- src/sys/arch/xen/xen/xennetback_xenbus.c:1.72 Sun Dec 23 12:09:45 2018 +++ src/sys/arch/xen/xen/xennetback_xenbus.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xennetback_xenbus.c,v 1.72 2018/12/23 12:09:45 bouyer Exp $ */ +/* $NetBSD: xennetback_xenbus.c,v 1.73 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.72 2018/12/23 12:09:45 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.73 2018/12/24 14:55:42 cherry Exp $"); #include "opt_xen.h" @@ -385,7 +385,7 @@ xennetback_xenbus_destroy(void *arg) if (xneti->xni_ih != NULL) { hypervisor_mask_event(xneti->xni_evtchn); - intr_disestablish(xneti->xni_ih); + xen_intr_disestablish(xneti->xni_ih); xneti->xni_ih = NULL; if (xneti->xni_softintr) { @@ -556,7 +556,7 @@ xennetback_connect(struct xnetback_insta xneti->xni_status = CONNECTED; xen_wmb(); - xneti->xni_ih = intr_establish_xname(-1, &xen_pic, xneti->xni_evtchn, + xneti->xni_ih = xen_intr_establish_xname(-1, &xen_pic, xneti->xni_evtchn, IST_LEVEL, IPL_NET, xennetback_evthandler, xneti, false, xneti->xni_if.if_xname); KASSERT(xneti->xni_ih != NULL); Index: src/sys/arch/xen/xen/xpci_xenbus.c diff -u src/sys/arch/xen/xen/xpci_xenbus.c:1.20 src/sys/arch/xen/xen/xpci_xenbus.c:1.21 --- src/sys/arch/xen/xen/xpci_xenbus.c:1.20 Wed Oct 24 03:59:33 2018 +++ src/sys/arch/xen/xen/xpci_xenbus.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xpci_xenbus.c,v 1.20 2018/10/24 03:59:33 cherry Exp $ */ +/* $NetBSD: xpci_xenbus.c,v 1.21 2018/12/24 14:55:42 cherry Exp $ */ /* * Copyright (c) 2009 Manuel Bouyer. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xpci_xenbus.c,v 1.20 2018/10/24 03:59:33 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xpci_xenbus.c,v 1.21 2018/12/24 14:55:42 cherry Exp $"); #include "opt_xen.h" @@ -188,7 +188,7 @@ xpci_xenbus_resume(void *p) aprint_verbose_dev(sc->sc_dev, "using event channel %d\n", sc->sc_evtchn); #if 0 - intr_establish_xname(-1, &xen_pic, pbxi->pbx_evtchn, IST_LEVEL, + xen_intr_establish_xname(-1, &xen_pic, pbxi->pbx_evtchn, IST_LEVEL, IPL_BIO, &xpci_handler, sc, true, device_xname(sc->sc_dev)); #endif Index: src/sys/arch/xen/xenbus/xenbus_comms.c diff -u src/sys/arch/xen/xenbus/xenbus_comms.c:1.20 src/sys/arch/xen/xenbus/xenbus_comms.c:1.21 --- src/sys/arch/xen/xenbus/xenbus_comms.c:1.20 Fri Oct 26 05:33:21 2018 +++ src/sys/arch/xen/xenbus/xenbus_comms.c Mon Dec 24 14:55:42 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: xenbus_comms.c,v 1.20 2018/10/26 05:33:21 cherry Exp $ */ +/* $NetBSD: xenbus_comms.c,v 1.21 2018/12/24 14:55:42 cherry Exp $ */ /****************************************************************************** * xenbus_comms.c * @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xenbus_comms.c,v 1.20 2018/10/26 05:33:21 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xenbus_comms.c,v 1.21 2018/12/24 14:55:42 cherry Exp $"); #include <sys/types.h> #include <sys/null.h> @@ -221,7 +221,7 @@ xb_init_comms(device_t dev) evtchn = xen_start_info.store_evtchn; - ih = intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, IPL_TTY, + ih = xen_intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, IPL_TTY, wake_waiting, NULL, false, device_xname(dev)); hypervisor_unmask_event(evtchn); @@ -238,7 +238,7 @@ xb_suspend_comms(device_t dev) evtchn = xen_start_info.store_evtchn; hypervisor_mask_event(evtchn); - intr_disestablish(ih); + xen_intr_disestablish(ih); aprint_verbose_dev(dev, "removed event channel %d\n", evtchn); }