Module Name: src Committed By: cherry Date: Sun Sep 23 02:27:25 UTC 2018
Modified Files: src/sys/arch/xen/include: hypervisor.h src/sys/arch/xen/xen: evtchn.c Log Message: Encapsulate pre-processing of registered (pirq,evtchn) pair in preparation for API reorg. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/arch/xen/include/hypervisor.h cvs rdiff -u -r1.80 -r1.81 src/sys/arch/xen/xen/evtchn.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/xen/include/hypervisor.h diff -u src/sys/arch/xen/include/hypervisor.h:1.44 src/sys/arch/xen/include/hypervisor.h:1.45 --- src/sys/arch/xen/include/hypervisor.h:1.44 Sat Jun 14 02:53:02 2014 +++ src/sys/arch/xen/include/hypervisor.h Sun Sep 23 02:27:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: hypervisor.h,v 1.44 2014/06/14 02:53:02 pgoyette Exp $ */ +/* $NetBSD: hypervisor.h,v 1.45 2018/09/23 02:27:24 cherry Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -130,6 +130,7 @@ extern volatile shared_info_t *HYPERVISO struct intrframe; struct cpu_info; void do_hypervisor_callback(struct intrframe *regs); +void hypervisor_prime_pirq_event(int, unsigned int); void hypervisor_enable_event(unsigned int); extern int xen_version; Index: src/sys/arch/xen/xen/evtchn.c diff -u src/sys/arch/xen/xen/evtchn.c:1.80 src/sys/arch/xen/xen/evtchn.c:1.81 --- src/sys/arch/xen/xen/evtchn.c:1.80 Sun Jun 24 13:35:33 2018 +++ src/sys/arch/xen/xen/evtchn.c Sun Sep 23 02:27:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: evtchn.c,v 1.80 2018/06/24 13:35:33 jdolecek Exp $ */ +/* $NetBSD: evtchn.c,v 1.81 2018/09/23 02:27:24 cherry Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -54,7 +54,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.80 2018/06/24 13:35:33 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.81 2018/09/23 02:27:24 cherry Exp $"); #include "opt_xen.h" #include "isa.h" @@ -737,7 +737,6 @@ pirq_establish(int pirq, int evtch, int const char *intrname, const char *xname) { struct pintrhand *ih; - physdev_op_t physdev_op; ih = kmem_zalloc(sizeof(struct pintrhand), cold ? KM_NOSLEEP : KM_SLEEP); @@ -759,17 +758,7 @@ pirq_establish(int pirq, int evtch, int return NULL; } - physdev_op.cmd = PHYSDEVOP_IRQ_STATUS_QUERY; - physdev_op.u.irq_status_query.irq = pirq; - if (HYPERVISOR_physdev_op(&physdev_op) < 0) - panic("HYPERVISOR_physdev_op(PHYSDEVOP_IRQ_STATUS_QUERY)"); - if (physdev_op.u.irq_status_query.flags & - PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY) { - pirq_needs_unmask_notify[evtch >> 5] |= (1 << (evtch & 0x1f)); -#ifdef IRQ_DEBUG - printf("pirq %d needs notify\n", pirq); -#endif - } + hypervisor_prime_pirq_event(pirq, evtch); hypervisor_enable_event(evtch); return ih; } @@ -1006,6 +995,25 @@ event_remove_handler(int evtch, int (*fu } void +hypervisor_prime_pirq_event(int pirq, unsigned int evtch) +{ +#if NPCI > 0 || NISA > 0 + physdev_op_t physdev_op; + physdev_op.cmd = PHYSDEVOP_IRQ_STATUS_QUERY; + physdev_op.u.irq_status_query.irq = pirq; + if (HYPERVISOR_physdev_op(&physdev_op) < 0) + panic("HYPERVISOR_physdev_op(PHYSDEVOP_IRQ_STATUS_QUERY)"); + if (physdev_op.u.irq_status_query.flags & + PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY) { + pirq_needs_unmask_notify[evtch >> 5] |= (1 << (evtch & 0x1f)); +#ifdef IRQ_DEBUG + printf("pirq %d needs notify\n", pirq); +#endif + } +#endif /* NPCI > 0 || NISA > 0 */ +} + +void hypervisor_enable_event(unsigned int evtch) { #ifdef IRQ_DEBUG