]>
git.proxmox.com Git - systemd.git/blob - src/test/test-boot-timestamps.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
7 #include "boot-timestamps.h"
8 #include "efi-loader.h"
9 #include "errno-util.h"
14 static int test_acpi_fpdt(void) {
15 usec_t loader_start
, loader_exit
;
18 r
= acpi_get_boot_usec(&loader_start
, &loader_exit
);
20 bool ok
= IN_SET(r
, -ENOENT
, -ENODATA
, -ERANGE
) || ERRNO_IS_PRIVILEGE(r
);
22 log_full_errno(ok
? LOG_DEBUG
: LOG_ERR
, r
, "Failed to read ACPI FPDT: %m");
26 log_info("ACPI FPDT: loader start=%s exit=%s duration=%s",
27 FORMAT_TIMESPAN(loader_start
, USEC_PER_MSEC
),
28 FORMAT_TIMESPAN(loader_exit
, USEC_PER_MSEC
),
29 FORMAT_TIMESPAN(loader_exit
- loader_start
, USEC_PER_MSEC
));
33 static int test_efi_loader(void) {
34 usec_t loader_start
, loader_exit
;
37 r
= efi_loader_get_boot_usec(&loader_start
, &loader_exit
);
39 bool ok
= IN_SET(r
, -ENOENT
, -EOPNOTSUPP
) || ERRNO_IS_PRIVILEGE(r
);
41 log_full_errno(ok
? LOG_DEBUG
: LOG_ERR
, r
, "Failed to read EFI loader data: %m");
45 log_info("EFI Loader: start=%s exit=%s duration=%s",
46 FORMAT_TIMESPAN(loader_start
, USEC_PER_MSEC
),
47 FORMAT_TIMESPAN(loader_exit
, USEC_PER_MSEC
),
48 FORMAT_TIMESPAN(loader_exit
- loader_start
, USEC_PER_MSEC
));
52 static int test_boot_timestamps(void) {
53 dual_timestamp fw
, l
, k
;
56 dual_timestamp_from_monotonic(&k
, 0);
58 r
= boot_timestamps(NULL
, &fw
, &l
);
60 bool ok
= IN_SET(r
, -ENOENT
, -EOPNOTSUPP
) || ERRNO_IS_PRIVILEGE(r
);
62 log_full_errno(ok
? LOG_DEBUG
: LOG_ERR
, r
, "Failed to read variables: %m");
66 log_info("Firmware began %s before kernel.", FORMAT_TIMESPAN(fw
.monotonic
, 0));
67 log_info("Loader began %s before kernel.", FORMAT_TIMESPAN(l
.monotonic
, 0));
68 log_info("Firmware began %s.", FORMAT_TIMESTAMP(fw
.realtime
));
69 log_info("Loader began %s.", FORMAT_TIMESTAMP(l
.realtime
));
70 log_info("Kernel began %s.", FORMAT_TIMESTAMP(k
.realtime
));
74 int main(int argc
, char* argv
[]) {
77 test_setup_logging(LOG_DEBUG
);
81 q
= test_efi_loader();
83 r
= test_boot_timestamps();
86 if (p
== 0 && q
== 0 && r
== 0)
87 return log_tests_skipped("access to firmware variables not possible");