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/xen Pull up revision 1.14 (requested by yamt...



details:   https://anonhg.NetBSD.org/src/rev/b6d7f5b15954
branches:  netbsd-3
changeset: 577013:b6d7f5b15954
user:      tron <tron%NetBSD.org@localhost>
date:      Sun Aug 21 22:12:21 2005 +0000

description:
Pull up revision 1.14 (requested by yamt in ticket #682):
fix a race by re-checking req_prod when exiting main loop.

diffstat:

 sys/arch/xen/xen/xbdback.c |  17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diffs (40 lines):

diff -r 9e459dcfa143 -r b6d7f5b15954 sys/arch/xen/xen/xbdback.c
--- a/sys/arch/xen/xen/xbdback.c        Sun Aug 21 22:08:52 2005 +0000
+++ b/sys/arch/xen/xen/xbdback.c        Sun Aug 21 22:12:21 2005 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: xbdback.c,v 1.4.2.8 2005/08/21 22:08:52 tron Exp $      */
+/*      $NetBSD: xbdback.c,v 1.4.2.9 2005/08/21 22:12:21 tron Exp $      */
 
 /*
  * Copyright (c) 2005 Manuel Bouyer.
@@ -210,6 +210,7 @@
 static void *xbdback_co_main_loop(struct xbdback_instance *, void *);
 static void *xbdback_co_main_incr(struct xbdback_instance *, void *);
 static void *xbdback_co_main_done(struct xbdback_instance *, void *);
+static void *xbdback_co_main_done2(struct xbdback_instance *, void *);
 
 static void *xbdback_co_io(struct xbdback_instance *, void *);
 static void *xbdback_co_io_gotreq(struct xbdback_instance *, void *);
@@ -686,9 +687,21 @@
        (void)obj;
        if (xbdi->io != NULL) {
                xbdi->cont = xbdback_co_flush;
-               xbdi->cont_aux = NULL;
+               xbdi->cont_aux = xbdback_co_main_done2;
        } else {
+               xbdi->cont = xbdback_co_main_done2;
+       }
+       return xbdi;
+}
+
+static void *
+xbdback_co_main_done2(struct xbdback_instance *xbdi, void *obj)
+{
+
+       if (xbdi->req_prod == xbdi->blk_ring->req_prod) {
                xbdi->cont = NULL;
+       } else {
+               xbdi->cont = xbdback_co_main;
        }
        return xbdi;
 }



Home | Main Index | Thread Index | Old Index