Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/xen/xen Remove the "evtchn_do_event: handler %p did...



details:   https://anonhg.NetBSD.org/src/rev/be1274da6124
branches:  trunk
changeset: 791816:be1274da6124
user:      bouyer <bouyer%NetBSD.org@localhost>
date:      Tue Dec 03 20:51:00 2013 +0000

description:
Remove the "evtchn_do_event: handler %p didn't lower ipl %d %d\n" printf.
With help from Robert Elz we've finally figured out what's going on, and
it actually isn't a bug in the handler, but related to spin mutexes.
When a spin mutex is released, the IPL isn't lowered back if the
curcpu is holding other spin mutexes. This is because mutexes may not
be released in order (and, in this case, the CPU in interrupted while
it holds a spin mutex at IPL < IPL_SCHED).
Also remove the test and resetting the IPL, it will be reset anyway
inside the loop, or at the end of the loop.

diffstat:

 sys/arch/xen/xen/evtchn.c |  11 ++---------
 1 files changed, 2 insertions(+), 9 deletions(-)

diffs (32 lines):

diff -r 790f026eb0e7 -r be1274da6124 sys/arch/xen/xen/evtchn.c
--- a/sys/arch/xen/xen/evtchn.c Tue Dec 03 17:14:35 2013 +0000
+++ b/sys/arch/xen/xen/evtchn.c Tue Dec 03 20:51:00 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: evtchn.c,v 1.69 2013/01/13 21:01:05 bouyer Exp $       */
+/*     $NetBSD: evtchn.c,v 1.70 2013/12/03 20:51:00 bouyer Exp $       */
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -54,7 +54,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.69 2013/01/13 21:01:05 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.70 2013/12/03 20:51:00 bouyer Exp $");
 
 #include "opt_xen.h"
 #include "isa.h"
@@ -343,13 +343,6 @@
                                        ih_fun = (void *)ih->ih_fun;
                                        ih_fun(ih->ih_arg, regs);
                                        cli();
-                                       if (ci->ci_ilevel != i) {
-                                               printf("evtchn_do_event: "
-                                                   "handler %p didn't lower "
-                                                   "ipl %d %d\n",
-                                                   ih_fun, ci->ci_ilevel, i);
-                                               ci->ci_ilevel = i;
-                                       }
                                }
                                hypervisor_enable_ipl(i);
                                /* more pending IPLs may have been registered */



Home | Main Index | Thread Index | Old Index