WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] xenstored: allow guests to shutdown all of its watch

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] xenstored: allow guests to shutdown all of its watches using XS_RESET_WATCHES
From: Olaf Hering <olaf@xxxxxxxxx>
Date: Mon, 15 Aug 2011 10:34:16 +0200
Delivery-date: Mon, 15 Aug 2011 01:35:16 -0700
Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; t=1313397275; l=3145; s=domk; d=aepfle.de; h=To:From:Date:Subject:Content-Transfer-Encoding:MIME-Version: Content-Type:X-RZG-CLASS-ID:X-RZG-AUTH; bh=v4wxx11c4c/2u2JOdbb6In8/Ob8=; b=x2xUGXCFqeDb0fehIImDO2Iut46D+3qUkL3LUIcvfz/4uM8/fshMp8j9JzKP4vV55dz G18BDrg1HsBbBGuszl/w2EvRPGMwAaYC/Oe+jUjAQUAzyKO0Kns5x5KPlQR/gNO2kmkvu cslLdbDg/ztzs/u78giYVEKUlK8XpDiDA4Q=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.7.5
# HG changeset patch
# User Olaf Hering <olaf@xxxxxxxxx>
# Date 1313396962 -7200
# Node ID 4b483f4fa715566847b57f4c20908e5c3d38b5a2
# Parent  1f08b380d4386cdd6714786a9163e5f51aecab5d
xenstored: allow guests to shutdown all of its watches using XS_RESET_WATCHES

During kexec all old watches have to be removed, otherwise the new
kernel will receive unexpected events. Allow a guest to reset itself and
cleanup all of its watches.

Add a new XS_RESET_WATCHES command to do the reset on behalf of the guest.

Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>

diff -r 1f08b380d438 -r 4b483f4fa715 docs/misc/xenstore.txt
--- a/docs/misc/xenstore.txt
+++ b/docs/misc/xenstore.txt
@@ -217,6 +217,9 @@ WATCH_EVENT                                 <epath>|<token>|
 
 UNWATCH                        <wpath>|<token>|?
 
+RESET_WATCHES          <dummy>
+       Reset all watches and transactions of the caller.
+
 ---------- Transactions ----------
 
 TRANSACTION_START      |                       <transid>|
diff -r 1f08b380d438 -r 4b483f4fa715 tools/xenstore/xenstored_core.c
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -120,6 +120,7 @@ static char *sockmsg_string(enum xsd_soc
        case XS_IS_DOMAIN_INTRODUCED: return "XS_IS_DOMAIN_INTRODUCED";
        case XS_RESUME: return "RESUME";
        case XS_SET_TARGET: return "SET_TARGET";
+       case XS_RESET_WATCHES: return "RESET_WATCHES";
        default:
                return "**UNKNOWN**";
        }
@@ -1242,6 +1243,10 @@ static void process_message(struct conne
                do_set_target(conn, in);
                break;
 
+       case XS_RESET_WATCHES:
+               do_reset_watches(conn);
+               break;
+
        default:
                eprintf("Client unknown operation %i", in->hdr.msg.type);
                send_error(conn, ENOSYS);
diff -r 1f08b380d438 -r 4b483f4fa715 tools/xenstore/xenstored_domain.c
--- a/tools/xenstore/xenstored_domain.c
+++ b/tools/xenstore/xenstored_domain.c
@@ -537,6 +537,20 @@ void do_is_domain_introduced(struct conn
        send_reply(conn, XS_IS_DOMAIN_INTRODUCED, result ? "T" : "F", 2);
 }
 
+/* Allow guest to reset all watches */
+void do_reset_watches(struct connection *conn)
+{
+       if (!conn->can_write) {
+               send_error(conn, EACCES);
+               return;
+       }
+
+       conn_delete_all_watches(conn);
+       conn_delete_all_transactions(conn);
+
+       send_ack(conn, XS_RESET_WATCHES);
+}
+
 static int close_xc_handle(void *_handle)
 {
        xc_interface_close(*(xc_interface**)_handle);
diff -r 1f08b380d438 -r 4b483f4fa715 tools/xenstore/xenstored_domain.h
--- a/tools/xenstore/xenstored_domain.h
+++ b/tools/xenstore/xenstored_domain.h
@@ -40,6 +40,9 @@ void do_set_target(struct connection *co
 /* domid */
 void do_get_domain_path(struct connection *conn, const char *domid_str);
 
+/* Allow guest to reset all watches */
+void do_reset_watches(struct connection *conn);
+
 void domain_init(void);
 
 /* Returns the implicit path of a connection (only domains have this) */
diff -r 1f08b380d438 -r 4b483f4fa715 xen/include/public/io/xs_wire.h
--- a/xen/include/public/io/xs_wire.h
+++ b/xen/include/public/io/xs_wire.h
@@ -48,7 +48,8 @@ enum xsd_sockmsg_type
     XS_IS_DOMAIN_INTRODUCED,
     XS_RESUME,
     XS_SET_TARGET,
-    XS_RESTRICT
+    XS_RESTRICT,
+    XS_RESET_WATCHES
 };
 
 #define XS_WRITE_NONE "NONE"

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel