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/5847bb83c61a
branches:  trunk
changeset: 972034:5847bb83c61a
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 beae74e58d72 -r 5847bb83c61a 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