]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/acpi-fpdt: use ENODATA for missing data and skip test
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 27 Feb 2016 16:30:22 +0000 (11:30 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 5 Mar 2016 02:45:45 +0000 (21:45 -0500)
This data is simply missing on non-UEFI systems, and it is useful
to distinguish that from corrupted data.

src/shared/acpi-fpdt.c
src/test/test-boot-timestamps.c

index 3cb9e781fd8631d61ac4e049f8614c7bc472a83d..6779691c285ca841d605ab4b0e513092f8e5f956 100644 (file)
@@ -119,7 +119,7 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
         }
 
         if (ptr == 0)
-                return -EINVAL;
+                return -ENODATA;
 
         /* read Firmware Basic Boot Performance Data Record */
         fd = open("/dev/mem", O_CLOEXEC|O_RDONLY);
@@ -146,6 +146,10 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
         if (brec.type != ACPI_FPDT_BOOT_REC)
                 return -EINVAL;
 
+        if (brec.exit_services_exit == 0)
+                /* Non-UEFI compatible boot. */
+                return -ENODATA;
+
         if (brec.startup_start == 0 || brec.exit_services_exit < brec.startup_start)
                 return -EINVAL;
         if (brec.exit_services_exit > NSEC_PER_HOUR)
index 9fb6bbef9329e38306553969dc31597bcb58a2d9..8e68d6510d6172ee163b8c47e2dc9f47a7bfe81b 100644 (file)
@@ -34,7 +34,7 @@ static int test_acpi_fpdt(void) {
 
         r = acpi_get_boot_usec(&loader_start, &loader_exit);
         if (r < 0) {
-                bool ok = r == -ENOENT || (getuid() != 0 && r == -EACCES);
+                bool ok = r == -ENOENT || (getuid() != 0 && r == -EACCES) || r == -ENODATA;
 
                 log_full_errno(ok ? LOG_DEBUG : LOG_ERR,
                                r, "Failed to read ACPI FPDT: %m");