Commit c7ab7b2a authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'efi-fixes-for-v6.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi

Pull EFI fixes from Ard Biesheuvel:
 "Take the newly introduced EFI_MEMORY_HOT_PLUGGABLE memory attribute
  into account when placing the kernel image in memory at boot.

  Otherwise, the presence of the kernel image could prevent such a
  memory region from being unplugged at runtime if it was 'cold
  plugged', i.e., already plugged in at boot time (and exposed via the
  EFI memory map).

  This should ensure that the new EFI_MEMORY_HOT_PLUGGABLE memory
  attribute is used consistently by Linux before it ever turns up in
  production, ensuring that we can make meaningful use of it without
  running the risk of regressing existing users"

* tag 'efi-fixes-for-v6.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi:
  efi: Use BIT_ULL() constants for memory attributes
  efi: Avoid cold plugged memory for placing the kernel
parents 1b8c8cda bbc45785
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -934,13 +934,15 @@ char * __init efi_md_typeattr_format(char *buf, size_t size,
		     EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_RO |
		     EFI_MEMORY_WP | EFI_MEMORY_RP | EFI_MEMORY_XP |
		     EFI_MEMORY_NV | EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO |
		     EFI_MEMORY_RUNTIME | EFI_MEMORY_MORE_RELIABLE))
		     EFI_MEMORY_MORE_RELIABLE | EFI_MEMORY_HOT_PLUGGABLE |
		     EFI_MEMORY_RUNTIME))
		snprintf(pos, size, "|attr=0x%016llx]",
			 (unsigned long long)attr);
	else
		snprintf(pos, size,
			 "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
			 "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
			 attr & EFI_MEMORY_RUNTIME		? "RUN" : "",
			 attr & EFI_MEMORY_HOT_PLUGGABLE	? "HP"  : "",
			 attr & EFI_MEMORY_MORE_RELIABLE	? "MR"  : "",
			 attr & EFI_MEMORY_CPU_CRYPTO   	? "CC"  : "",
			 attr & EFI_MEMORY_SP			? "SP"  : "",
+3 −0
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@ static unsigned long get_entry_num_slots(efi_memory_desc_t *md,
	if (md->type != EFI_CONVENTIONAL_MEMORY)
		return 0;

	if (md->attribute & EFI_MEMORY_HOT_PLUGGABLE)
		return 0;

	if (efi_soft_reserve_enabled() &&
	    (md->attribute & EFI_MEMORY_SP))
		return 0;
+3 −0
Original line number Diff line number Diff line
@@ -53,6 +53,9 @@ efi_status_t efi_low_alloc_above(unsigned long size, unsigned long align,
		if (desc->type != EFI_CONVENTIONAL_MEMORY)
			continue;

		if (desc->attribute & EFI_MEMORY_HOT_PLUGGABLE)
			continue;

		if (efi_soft_reserve_enabled() &&
		    (desc->attribute & EFI_MEMORY_SP))
			continue;
+16 −15
Original line number Diff line number Diff line
@@ -114,21 +114,22 @@ typedef struct {
#define EFI_MAX_MEMORY_TYPE		16

/* Attribute values: */
#define EFI_MEMORY_UC		((u64)0x0000000000000001ULL)	/* uncached */
#define EFI_MEMORY_WC		((u64)0x0000000000000002ULL)	/* write-coalescing */
#define EFI_MEMORY_WT		((u64)0x0000000000000004ULL)	/* write-through */
#define EFI_MEMORY_WB		((u64)0x0000000000000008ULL)	/* write-back */
#define EFI_MEMORY_UCE		((u64)0x0000000000000010ULL)	/* uncached, exported */
#define EFI_MEMORY_WP		((u64)0x0000000000001000ULL)	/* write-protect */
#define EFI_MEMORY_RP		((u64)0x0000000000002000ULL)	/* read-protect */
#define EFI_MEMORY_XP		((u64)0x0000000000004000ULL)	/* execute-protect */
#define EFI_MEMORY_NV		((u64)0x0000000000008000ULL)	/* non-volatile */
#define EFI_MEMORY_MORE_RELIABLE \
				((u64)0x0000000000010000ULL)	/* higher reliability */
#define EFI_MEMORY_RO		((u64)0x0000000000020000ULL)	/* read-only */
#define EFI_MEMORY_SP		((u64)0x0000000000040000ULL)	/* soft reserved */
#define EFI_MEMORY_CPU_CRYPTO	((u64)0x0000000000080000ULL)	/* supports encryption */
#define EFI_MEMORY_RUNTIME	((u64)0x8000000000000000ULL)	/* range requires runtime mapping */
#define EFI_MEMORY_UC			BIT_ULL(0)	/* uncached */
#define EFI_MEMORY_WC			BIT_ULL(1)	/* write-coalescing */
#define EFI_MEMORY_WT			BIT_ULL(2)	/* write-through */
#define EFI_MEMORY_WB			BIT_ULL(3)	/* write-back */
#define EFI_MEMORY_UCE			BIT_ULL(4)	/* uncached, exported */
#define EFI_MEMORY_WP			BIT_ULL(12)	/* write-protect */
#define EFI_MEMORY_RP			BIT_ULL(13)	/* read-protect */
#define EFI_MEMORY_XP			BIT_ULL(14)	/* execute-protect */
#define EFI_MEMORY_NV			BIT_ULL(15)	/* non-volatile */
#define EFI_MEMORY_MORE_RELIABLE	BIT_ULL(16)	/* higher reliability */
#define EFI_MEMORY_RO			BIT_ULL(17)	/* read-only */
#define EFI_MEMORY_SP			BIT_ULL(18)	/* soft reserved */
#define EFI_MEMORY_CPU_CRYPTO		BIT_ULL(19)	/* supports encryption */
#define EFI_MEMORY_HOT_PLUGGABLE	BIT_ULL(20)	/* supports unplugging at runtime */
#define EFI_MEMORY_RUNTIME		BIT_ULL(63)	/* range requires runtime mapping */

#define EFI_MEMORY_DESCRIPTOR_VERSION	1

#define EFI_PAGE_SHIFT		12