Re: ACK: [PATCH 1/1] efi/efi_test: read RuntimeServicesSupported

From: Heinrich Schuchardt
Date: Sat Nov 28 2020 - 17:21:09 EST


On 11/27/20 8:29 PM, Ard Biesheuvel wrote:
On Fri, 27 Nov 2020 at 20:28, Colin Ian King <colin.king@xxxxxxxxxxxxx> wrote:

On 27/11/2020 19:20, Heinrich Schuchardt wrote:
Since the UEFI 2.8A specification the UEFI enabled firmware provides a
configuration table EFI_RT_PROPERTIES_TABLE which indicates which runtime
services are enabled. The EFI stub reads this table and saves the value of
the field RuntimeServicesSupported internally.

The Firmware Test Suite requires the value to determine if UEFI runtime
services are correctly implemented.

<snip />
Looks good to me. Thanks Heinrich.

The EFI driver needs to be also updated in the linux kernel - has that
fix been submitted or do you require the fwts team to do that?


This /is/ the EFI driver.

I'll take this as an acked-by but I'd like Ivan to chime in as well.


Hello Ard, hello Colin,

I have tested the patch with Linux 5.8.9.

Somehow Linux managed to break the kernel for my board between Linux
5.8.9 and 5.8.18. It does not boot form iSCSI with a newer kernel.

You probably want to run a user program against your latest kernel. This
is what I used:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>

#define EFI_RUNTIME_GET_SUPPORTED_MASK \
_IOR('p', 0x0C, unsigned int)

int main()
{
unsigned int i, flag;
int fd, ret;
unsigned int mask;

fd = open("/dev/efi_test", O_RDWR);
if (fd == -1) {
perror("open");
return 1;
}

ret = ioctl(fd, EFI_RUNTIME_GET_SUPPORTED_MASK, &mask);
if (ret == -1) {
perror("ioctl");
return 1;
}
printf("mask 0x%08x\n", mask);

flag = 1;
for (i = 0x80000000; i; i >>= 1) {
if (i & mask) {
printf("%4s 0x%08x\n", flag ? "=" : "|", i);
flag = 0;
}
}

close(fd);

return 0;
}

Best regards

Heinrich