summaryrefslogtreecommitdiff
path: root/src/shared/efivars.c
diff options
context:
space:
mode:
authorKay Sievers <kay@vrfy.org>2013-09-23 17:23:35 -0500
committerKay Sievers <kay@vrfy.org>2013-09-24 15:43:41 +0200
commitc51d84dc09476d9c06b8aac726220bf3c7d62e8d (patch)
tree3440df30c67dc883a896c88b653804240f5bf783 /src/shared/efivars.c
parent036ae95ac4a425475b58e1a8e53d5c52b2c8a218 (diff)
support acpi firmware performance data (FPDT)
Prefer firmware-provided performance data over loader-exported ones; if ACPI data is available, always use it, otherwise try to read the loader data. The firmware-provided variables start at the time the first EFI image is executed and end when the operating system exits the boot services; the (loader) time calculated in systemd-analyze increases.
Diffstat (limited to 'src/shared/efivars.c')
-rw-r--r--src/shared/efivars.c41
1 files changed, 3 insertions, 38 deletions
diff --git a/src/shared/efivars.c b/src/shared/efivars.c
index 8d004bad33..1d5b6f9e72 100644
--- a/src/shared/efivars.c
+++ b/src/shared/efivars.c
@@ -24,6 +24,7 @@
#include <fcntl.h>
#include <ctype.h>
+#include "acpi-fpdt.h"
#include "util.h"
#include "utf8.h"
#include "efivars.h"
@@ -413,7 +414,7 @@ static int read_usec(sd_id128_t vendor, const char *name, usec_t *u) {
return 0;
}
-static int get_boot_usec(usec_t *firmware, usec_t *loader) {
+int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) {
uint64_t x, y;
int r;
@@ -440,43 +441,7 @@ static int get_boot_usec(usec_t *firmware, usec_t *loader) {
return 0;
}
-int efi_get_boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader) {
- usec_t x, y, a;
- int r;
- dual_timestamp _n;
-
- assert(firmware);
- assert(loader);
-
- if (!n) {
- dual_timestamp_get(&_n);
- n = &_n;
- }
-
- r = get_boot_usec(&x, &y);
- if (r < 0)
- return r;
-
- /* Let's convert this to timestamps where the firmware
- * began/loader began working. To make this more confusing:
- * since usec_t is unsigned and the kernel's monotonic clock
- * begins at kernel initialization we'll actually initialize
- * 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;
-
- a = n->monotonic + loader->monotonic;
- loader->realtime = n->realtime > a ? n->realtime - a : 0;
-
- return 0;
-}
-
-int efi_get_loader_device_part_uuid(sd_id128_t *u) {
+int efi_loader_get_device_part_uuid(sd_id128_t *u) {
_cleanup_free_ char *p = NULL;
int r, parsed[16];
unsigned i;