diff options
author | Kay Sievers <kay@vrfy.org> | 2013-09-23 17:23:35 -0500 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2013-09-24 15:43:41 +0200 |
commit | c51d84dc09476d9c06b8aac726220bf3c7d62e8d (patch) | |
tree | 3440df30c67dc883a896c88b653804240f5bf783 /src/shared/efivars.c | |
parent | 036ae95ac4a425475b58e1a8e53d5c52b2c8a218 (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.c | 41 |
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; |