]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-boot-timestamps.c
80f82bb63b445737a332796214bba93db66f0035
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2013 Lennart Poettering
6 Copyright 2013 Kay Sievers
10 #include "boot-timestamps.h"
15 static int test_acpi_fpdt(void) {
18 char ts_start
[FORMAT_TIMESPAN_MAX
];
19 char ts_exit
[FORMAT_TIMESPAN_MAX
];
20 char ts_span
[FORMAT_TIMESPAN_MAX
];
23 r
= acpi_get_boot_usec(&loader_start
, &loader_exit
);
25 bool ok
= r
== -ENOENT
|| (getuid() != 0 && r
== -EACCES
) || r
== -ENODATA
;
27 log_full_errno(ok
? LOG_DEBUG
: LOG_ERR
,
28 r
, "Failed to read ACPI FPDT: %m");
32 log_info("ACPI FPDT: loader start=%s exit=%s duration=%s",
33 format_timespan(ts_start
, sizeof(ts_start
), loader_start
, USEC_PER_MSEC
),
34 format_timespan(ts_exit
, sizeof(ts_exit
), loader_exit
, USEC_PER_MSEC
),
35 format_timespan(ts_span
, sizeof(ts_span
), loader_exit
- loader_start
, USEC_PER_MSEC
));
39 static int test_efi_loader(void) {
42 char ts_start
[FORMAT_TIMESPAN_MAX
];
43 char ts_exit
[FORMAT_TIMESPAN_MAX
];
44 char ts_span
[FORMAT_TIMESPAN_MAX
];
47 r
= efi_loader_get_boot_usec(&loader_start
, &loader_exit
);
49 bool ok
= r
== -ENOENT
|| (getuid() != 0 && r
== -EACCES
);
51 log_full_errno(ok
? LOG_DEBUG
: LOG_ERR
,
52 r
, "Failed to read EFI loader data: %m");
56 log_info("EFI Loader: start=%s exit=%s duration=%s",
57 format_timespan(ts_start
, sizeof(ts_start
), loader_start
, USEC_PER_MSEC
),
58 format_timespan(ts_exit
, sizeof(ts_exit
), loader_exit
, USEC_PER_MSEC
),
59 format_timespan(ts_span
, sizeof(ts_span
), loader_exit
- loader_start
, USEC_PER_MSEC
));
63 static int test_boot_timestamps(void) {
64 char s
[MAX(FORMAT_TIMESPAN_MAX
, FORMAT_TIMESTAMP_MAX
)];
66 dual_timestamp fw
, l
, k
;
68 dual_timestamp_from_monotonic(&k
, 0);
70 r
= boot_timestamps(NULL
, &fw
, &l
);
72 bool ok
= r
== -ENOENT
|| (getuid() != 0 && r
== -EACCES
);
74 log_full_errno(ok
? LOG_DEBUG
: LOG_ERR
,
75 r
, "Failed to read variables: %m");
79 log_info("Firmware began %s before kernel.", format_timespan(s
, sizeof(s
), fw
.monotonic
, 0));
80 log_info("Loader began %s before kernel.", format_timespan(s
, sizeof(s
), l
.monotonic
, 0));
81 log_info("Firmware began %s.", format_timestamp(s
, sizeof(s
), fw
.realtime
));
82 log_info("Loader began %s.", format_timestamp(s
, sizeof(s
), l
.realtime
));
83 log_info("Kernel began %s.", format_timestamp(s
, sizeof(s
), k
.realtime
));
87 int main(int argc
, char* argv
[]) {
90 log_set_max_level(LOG_DEBUG
);
91 log_parse_environment();
95 q
= test_efi_loader();
97 r
= test_boot_timestamps();
100 return (p
> 0 || q
> 0 || r
>> 0) ? EXIT_SUCCESS
: EXIT_TEST_SKIP
;