Module Name:    src
Committed By:   jym
Date:           Sun Feb 12 14:24:08 UTC 2012

Modified Files:
        src/sys/arch/xen/xen: evtchn.c

Log Message:
Xen MP merge introduced MP safety around ipl handlers. When removing an
event handler, check handler's function and arguments against the real
ones, not the ones from wrappers.

This fixes a bug where !mpsafe events could not be removed from the handler
chain, thereby blocking suspension of a domU.

ok releng@.


To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 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/xen/evtchn.c
diff -u src/sys/arch/xen/xen/evtchn.c:1.61 src/sys/arch/xen/xen/evtchn.c:1.62
--- src/sys/arch/xen/xen/evtchn.c:1.61	Thu Dec  8 03:34:44 2011
+++ src/sys/arch/xen/xen/evtchn.c	Sun Feb 12 14:24:08 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: evtchn.c,v 1.61 2011/12/08 03:34:44 cherry Exp $	*/
+/*	$NetBSD: evtchn.c,v 1.62 2012/02/12 14:24:08 jym Exp $	*/
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -54,7 +54,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.61 2011/12/08 03:34:44 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.62 2012/02/12 14:24:08 jym Exp $");
 
 #include "opt_xen.h"
 #include "isa.h"
@@ -774,7 +774,7 @@ event_remove_handler(int evtch, int (*fu
 	for (ihp = &evts->ev_handlers, ih = evts->ev_handlers;
 	    ih != NULL;
 	    ihp = &ih->ih_evt_next, ih = ih->ih_evt_next) {
-		if (ih->ih_fun == func && ih->ih_arg == arg)
+		if (ih->ih_realfun == func && ih->ih_realarg == arg)
 			break;
 	}
 	if (ih == NULL) {
@@ -789,7 +789,7 @@ event_remove_handler(int evtch, int (*fu
 	for (ihp = &ipls->ipl_handlers, ih = ipls->ipl_handlers;
 	    ih != NULL;
 	    ihp = &ih->ih_ipl_next, ih = ih->ih_ipl_next) {
-		if (ih->ih_fun == func && ih->ih_arg == arg)
+		if (ih->ih_realfun == func && ih->ih_realarg == arg)
 			break;
 	}
 	if (ih == NULL)

Reply via email to