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-changelog

[Xen-changelog] Implement xenbus_dev_error() and xenbus_dev_ok() functio

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Implement xenbus_dev_error() and xenbus_dev_ok() functions
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 26 Jul 2005 20:26:19 -0400
Delivery-date: Wed, 27 Jul 2005 00:28:06 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID 26e4e952c385894cec4a028eeceb102e348def27
# Parent  a9a9567489975493f0e90a4e8f96917756dab8a0
Implement xenbus_dev_error() and xenbus_dev_ok() functions
for better error reporting using the store.
Signed-off-by: Rusty Russel <rusty@xxxxxxxxxxxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>

diff -r a9a956748997 -r 26e4e952c385 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c       Tue Jul 26 
17:24:22 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c       Tue Jul 26 
17:25:57 2005
@@ -43,6 +43,7 @@
 
 #define streq(a, b) (strcmp((a), (b)) == 0)
 
+static char printf_buffer[4096];
 static void *xs_in, *xs_out;
 static LIST_HEAD(watches);
 DECLARE_MUTEX(xenbus_lock);
@@ -339,17 +340,49 @@
 {
        va_list ap;
        int ret;
-       static char buffer[4096];
 
        BUG_ON(down_trylock(&xenbus_lock) == 0);
        va_start(ap, fmt);
-       ret = vsnprintf(buffer, sizeof(buffer), fmt, ap);
+       ret = vsnprintf(printf_buffer, sizeof(printf_buffer), fmt, ap);
        va_end(ap);
 
-       BUG_ON(ret > sizeof(buffer)-1);
-       return xenbus_write(dir, node, buffer, O_CREAT);
-}
-
+       BUG_ON(ret > sizeof(printf_buffer)-1);
+       return xenbus_write(dir, node, printf_buffer, O_CREAT);
+}
+
+/* Report a (negative) errno into the store, with explanation. */
+void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, ...)
+{
+       va_list ap;
+       int ret;
+       unsigned int len;
+
+       BUG_ON(down_trylock(&xenbus_lock) == 0);
+
+       len = sprintf(printf_buffer, "%i ", -err);
+       va_start(ap, fmt);
+       ret = vsnprintf(printf_buffer+len, sizeof(printf_buffer)-len, fmt, ap);
+       va_end(ap);
+
+       BUG_ON(len + ret > sizeof(printf_buffer)-1);
+       dev->has_error = 1;
+       if (xenbus_write(dev->nodename, "error", printf_buffer, O_CREAT) != 0)
+               printk("xenbus: failed to write error node for %s (%s)\n",
+                      dev->nodename, printf_buffer);
+}
+
+/* Clear any error. */
+void xenbus_dev_ok(struct xenbus_device *dev)
+{
+       if (dev->has_error) {
+               if (xenbus_rm(dev->nodename, "error") != 0)
+                       printk("xenbus: failed to clear error node for %s\n",
+                              dev->nodename);
+               else
+                       dev->has_error = 0;
+       }
+}
+       
 /* Takes tuples of names, scanf-style args, and void **, NULL terminated. */
 int xenbus_gather(const char *dir, ...)
 {
diff -r a9a956748997 -r 26e4e952c385 
linux-2.6-xen-sparse/include/asm-xen/xenbus.h
--- a/linux-2.6-xen-sparse/include/asm-xen/xenbus.h     Tue Jul 26 17:24:22 2005
+++ b/linux-2.6-xen-sparse/include/asm-xen/xenbus.h     Tue Jul 26 17:25:57 2005
@@ -37,6 +37,7 @@
        char *subtype;
        char *nodename;
        struct device dev;
+       int has_error;
        void *data;
 };
 
@@ -97,6 +98,12 @@
  * sprintf-style type string, and pointer. Returns 0 or errno.*/
 int xenbus_gather(const char *dir, ...);
 
+/* Report a (negative) errno into the store, with explanation. */
+void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt,...);
+
+/* Clear any error. */
+void xenbus_dev_ok(struct xenbus_device *dev);
+
 /* Register callback to watch this node. */
 struct xenbus_watch
 {

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Implement xenbus_dev_error() and xenbus_dev_ok() functions, Xen patchbot -unstable <=