69 lines
2.4 KiB
Diff
69 lines
2.4 KiB
Diff
From 9ee300a0b6429b7af73f40edfb2330cbbd7828f3 Mon Sep 17 00:00:00 2001
|
|
From: Jan Janssen <medhefgo@web.de>
|
|
Date: Sun, 9 Jan 2022 14:22:15 +0100
|
|
Subject: [PATCH] boot-timestamps: Discard firmware init time when running in a
|
|
VM
|
|
|
|
Fixes: #22060
|
|
(cherry picked from commit f699bd81e8e18da2d2fc11e7fb7dce95f8bb3f9e)
|
|
(cherry picked from commit 3c5c13f82c760c7067bb189484e1f672ff6713f6)
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/systemd/systemd/commit/9ee300a0b6429b7af73f40edfb2330cbbd7828f3
|
|
---
|
|
src/shared/boot-timestamps.c | 18 +++++++++++++-----
|
|
1 file changed, 13 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/shared/boot-timestamps.c b/src/shared/boot-timestamps.c
|
|
index 8786e89c0e..e00b37aa32 100644
|
|
--- a/src/shared/boot-timestamps.c
|
|
+++ b/src/shared/boot-timestamps.c
|
|
@@ -5,11 +5,13 @@
|
|
#include "efi-loader.h"
|
|
#include "macro.h"
|
|
#include "time-util.h"
|
|
+#include "virt.h"
|
|
|
|
int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader) {
|
|
usec_t x = 0, y = 0, a;
|
|
int r;
|
|
dual_timestamp _n;
|
|
+ bool use_firmware = true;
|
|
|
|
assert(firmware);
|
|
assert(loader);
|
|
@@ -24,6 +26,10 @@ int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_time
|
|
r = efi_loader_get_boot_usec(&x, &y);
|
|
if (r < 0)
|
|
return r;
|
|
+
|
|
+ /* If we are running in a VM, the init timestamp would
|
|
+ * be equivalent to the host uptime. */
|
|
+ use_firmware = detect_vm() <= 0;
|
|
}
|
|
|
|
/* Let's convert this to timestamps where the firmware
|
|
@@ -33,12 +39,14 @@ int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_time
|
|
* the monotonic timestamps here as negative of the actual
|
|
* value. */
|
|
|
|
- firmware->monotonic = y;
|
|
- loader->monotonic = y - x;
|
|
-
|
|
- a = n->monotonic + firmware->monotonic;
|
|
- firmware->realtime = n->realtime > a ? n->realtime - a : 0;
|
|
+ if (use_firmware) {
|
|
+ firmware->monotonic = y;
|
|
+ a = n->monotonic + firmware->monotonic;
|
|
+ firmware->realtime = n->realtime > a ? n->realtime - a : 0;
|
|
+ } else
|
|
+ firmware->monotonic = firmware->realtime = 0;
|
|
|
|
+ loader->monotonic = y - x;
|
|
a = n->monotonic + loader->monotonic;
|
|
loader->realtime = n->realtime > a ? n->realtime - a : 0;
|
|
|
|
--
|
|
2.33.0
|
|
|