1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-03-08 20:58:20 +03:00

boot: Use memcpy/memset provided by firmware

These are significantly faster and safe us from rolling our own
optimized versions.
This commit is contained in:
Jan Janssen 2022-06-10 15:29:39 +02:00
parent 2b0af8e76a
commit 8494bd1ced

View File

@ -263,6 +263,16 @@ void *efi_memcpy(void * restrict dest, const void * restrict src, size_t n) {
if (!dest || !src || n == 0)
return dest;
#ifdef SD_BOOT
/* The firmware-provided memcpy is likely optimized, so use that. The function is guaranteed to be
* available by the UEFI spec. We still make it depend on the boot services pointer being set just in
* case the compiler emits a call before it is available. */
if (_likely_(BS)) {
BS->CopyMem(dest, (void *) src, n);
return dest;
}
#endif
uint8_t *d = dest;
const uint8_t *s = src;
@ -280,6 +290,14 @@ void *efi_memset(void *p, int c, size_t n) {
if (!p || n == 0)
return p;
#ifdef SD_BOOT
/* See comment in efi_memcpy. Note that the signature has c and n swapped! */
if (_likely_(BS)) {
BS->SetMem(p, n, c);
return p;
}
#endif
uint8_t *q = p;
while (n > 0) {
*q = c;