[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v2 16/16] qga: fence guest-set-time if hwclock not available
From: |
Cornelia Huck |
Subject: |
[PULL v2 16/16] qga: fence guest-set-time if hwclock not available |
Date: |
Sat, 14 Dec 2019 10:45:26 +0100 |
The Posix implementation of guest-set-time invokes hwclock to
set/retrieve the time to/from the hardware clock. If hwclock
is not available, the user is currently informed that "hwclock
failed to set hardware clock to system time", which is quite
misleading. This may happen e.g. on s390x, which has a different
timekeeping concept anyway.
Let's check for the availability of the hwclock command and
return QERR_UNSUPPORTED for guest-set-time if it is not available.
Reviewed-by: Laszlo Ersek <address@hidden>
Reviewed-by: Daniel P. Berrangé <address@hidden>
Reviewed-by: Michael Roth <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
qga/commands-posix.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index 1c1a165daed8..0be301a4ea77 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -156,6 +156,17 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns,
Error **errp)
pid_t pid;
Error *local_err = NULL;
struct timeval tv;
+ static const char hwclock_path[] = "/sbin/hwclock";
+ static int hwclock_available = -1;
+
+ if (hwclock_available < 0) {
+ hwclock_available = (access(hwclock_path, X_OK) == 0);
+ }
+
+ if (!hwclock_available) {
+ error_setg(errp, QERR_UNSUPPORTED);
+ return;
+ }
/* If user has passed a time, validate and set it. */
if (has_time) {
@@ -195,7 +206,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns,
Error **errp)
/* Use '/sbin/hwclock -w' to set RTC from the system time,
* or '/sbin/hwclock -s' to set the system time from RTC. */
- execle("/sbin/hwclock", "hwclock", has_time ? "-w" : "-s",
+ execle(hwclock_path, "hwclock", has_time ? "-w" : "-s",
NULL, environ);
_exit(EXIT_FAILURE);
} else if (pid < 0) {
--
2.21.0
- [PULL v2 06/16] s390x: Move clear reset, (continued)
- [PULL v2 06/16] s390x: Move clear reset, Cornelia Huck, 2019/12/14
- [PULL v2 07/16] s390x: Beautify diag308 handling, Cornelia Huck, 2019/12/14
- [PULL v2 08/16] s390x: kvm: Make kvm_sclp_service_call void, Cornelia Huck, 2019/12/14
- [PULL v2 11/16] s390x/cpumodel: Fix feature property error API violations, Cornelia Huck, 2019/12/14
- [PULL v2 10/16] s390x/event-facility: Fix realize() error API violations, Cornelia Huck, 2019/12/14
- [PULL v2 09/16] s390x: Fix cpu normal reset ri clearing, Cornelia Huck, 2019/12/14
- [PULL v2 12/16] s390x/cpumodel: Fix realize() error API violations, Cornelia Huck, 2019/12/14
- [PULL v2 13/16] s390x/cpumodel: Fix query-cpu-model-FOO error API violations, Cornelia Huck, 2019/12/14
- [PULL v2 14/16] s390x/cpumodel: Fix query-cpu-definitions error API violations, Cornelia Huck, 2019/12/14
- [PULL v2 15/16] s390x/tcg: clear local interrupts on reset normal, Cornelia Huck, 2019/12/14
- [PULL v2 16/16] qga: fence guest-set-time if hwclock not available,
Cornelia Huck <=
- Re: [PULL v2 00/16] first s390x update for 5.0, Peter Maydell, 2019/12/16