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 fix how shutdown is acknowledged - do it ju...



details:   https://anonhg.NetBSD.org/src/rev/bdc972fada33
branches:  trunk
changeset: 1010069:bdc972fada33
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Wed May 13 22:13:49 2020 +0000

description:
fix how shutdown is acknowledged - do it just by writing empty value
into the key; this is necessary for suspend, for it removal fails with
EACCESS

now 'xl save' proceeds almost instantly without timing out, and no longer
complains about the domain not acknowleding suspend

part of port-xen/55207

diffstat:

 sys/arch/xen/xen/shutdown_xenbus.c |  12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diffs (40 lines):

diff -r fa87491e9971 -r bdc972fada33 sys/arch/xen/xen/shutdown_xenbus.c
--- a/sys/arch/xen/xen/shutdown_xenbus.c        Wed May 13 21:59:45 2020 +0000
+++ b/sys/arch/xen/xen/shutdown_xenbus.c        Wed May 13 22:13:49 2020 +0000
@@ -1,4 +1,4 @@
-/*     $Id: shutdown_xenbus.c,v 1.8 2020/04/07 11:47:06 jdolecek Exp $ */
+/*     $Id: shutdown_xenbus.c,v 1.9 2020/05/13 22:13:49 jdolecek Exp $ */
 
 /*-
  * Copyright (c)2006 YAMAMOTO Takashi,
@@ -56,7 +56,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: shutdown_xenbus.c,v 1.8 2020/04/07 11:47:06 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: shutdown_xenbus.c,v 1.9 2020/05/13 22:13:49 jdolecek Exp $");
 
 #include <sys/param.h>
 
@@ -97,8 +97,9 @@
        }
        error = xenbus_read(xbt, SHUTDOWN_PATH, SHUTDOWN_NAME,
            reqstr, sizeof(reqstr));
-       if (error) {
-               if (error != ENOENT) {
+       /* Ignore if read error or empty value */
+       if (error || reqstr[0] == '\0') {
+               if (error && error != ENOENT) {
                        printf("%s: xenbus_read %d\n", __func__, error);
                }
                error = xenbus_transaction_end(xbt, 1);
@@ -109,7 +110,8 @@
                return;
        }
 
-       error = xenbus_rm(xbt, SHUTDOWN_PATH, SHUTDOWN_NAME);
+       /* Acknowledge the command */
+       error = xenbus_write(xbt, SHUTDOWN_PATH, SHUTDOWN_NAME, "");
        if (error) {
                printf("%s: xenbus_rm %d\n", __func__, error);
        }



Home | Main Index | Thread Index | Old Index