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

Reply via email to