Source-Changes-HG archive

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

[src/netbsd-3]: src/sys/arch/xen/x86 Pull up revision 1.5 (requested by yamt ...



details:   https://anonhg.NetBSD.org/src/rev/2f10f589a74c
branches:  netbsd-3
changeset: 575368:2f10f589a74c
user:      tron <tron%NetBSD.org@localhost>
date:      Wed Apr 13 21:38:58 2005 +0000

description:
Pull up revision 1.5 (requested by yamt in ticket #146):
fix a bug which corrupts runqueue.
when dealing with events, which are handed to xenevt pseudo device,
don't call wakeup(9)/selnotify(9) at too high IPL.  PR/29792.

diffstat:

 sys/arch/xen/x86/intr.c |  25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diffs (55 lines):

diff -r 57fa0789c156 -r 2f10f589a74c sys/arch/xen/x86/intr.c
--- a/sys/arch/xen/x86/intr.c   Wed Apr 13 21:38:52 2005 +0000
+++ b/sys/arch/xen/x86/intr.c   Wed Apr 13 21:38:58 2005 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: intr.c,v 1.4 2005/03/09 22:39:21 bouyer Exp $  */
+/*     $NetBSD: intr.c,v 1.4.2.1 2005/04/13 21:38:58 tron Exp $        */
 /*     NetBSD: intr.c,v 1.20 2004/10/23 21:27:35 yamt Exp      */
 
 /*
@@ -104,9 +104,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.4 2005/03/09 22:39:21 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.4.2.1 2005/04/13 21:38:58 tron Exp $");
 
 #include "opt_multiprocessor.h"
+#include "opt_xen.h"
 
 #include <sys/cdefs.h>
 #include <sys/param.h> 
@@ -200,6 +201,11 @@
 struct intrhand fake_softserial_intrhand;
 struct intrhand fake_timer_intrhand;
 struct intrhand fake_ipi_intrhand;
+#if defined(DOM0OPS)
+struct intrhand fake_softxenevt_intrhand;
+
+extern void Xsoftxenevt(void);
+#endif
 
 /*
  * Initialize all handlers that aren't dynamically allocated, and exist
@@ -249,6 +255,21 @@
        evcnt_attach_dynamic(&isp->is_evcnt, EVCNT_TYPE_INTR, NULL,
            ci->ci_dev->dv_xname, "softserial");
 
+#if defined(DOM0OPS)
+       MALLOC(isp, struct intrsource *, sizeof (struct intrsource), M_DEVBUF,
+           M_WAITOK|M_ZERO);
+       if (isp == NULL)
+               panic("can't allocate fixed interrupt source");
+       isp->is_recurse = Xsoftxenevt;
+       isp->is_resume = Xsoftxenevt;
+       fake_softxenevt_intrhand.ih_level = IPL_SOFTXENEVT;
+       isp->is_handlers = &fake_softxenevt_intrhand;
+       isp->is_pic = &softintr_pic;
+       ci->ci_isources[SIR_XENEVT] = isp;
+       evcnt_attach_dynamic(&isp->is_evcnt, EVCNT_TYPE_INTR, NULL,
+           ci->ci_dev->dv_xname, "xenevt");
+#endif /* defined(DOM0OPS) */
+
        intr_calculatemasks(ci);
 
 }



Home | Main Index | Thread Index | Old Index