Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 645c03aa authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull EFI fix from Thomas Gleixner:
 "A single fix for a EFI mixed mode regression caused by recent rework
  which did not take the firmware bitwidth into account"

* 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  efi-stub: Fix get_efi_config_table on mixed-mode setups
parents 5bba5c9c cbd32a1c
Loading
Loading
Loading
Loading
+27 −11
Original line number Diff line number Diff line
@@ -927,17 +927,33 @@ efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table_arg,
	return status;
}

#define GET_EFI_CONFIG_TABLE(bits)					\
static void *get_efi_config_table##bits(efi_system_table_t *_sys_table,	\
					efi_guid_t guid)		\
{									\
	efi_system_table_##bits##_t *sys_table;				\
	efi_config_table_##bits##_t *tables;				\
	int i;								\
									\
	sys_table = (typeof(sys_table))_sys_table;			\
	tables = (typeof(tables))(unsigned long)sys_table->tables;	\
									\
	for (i = 0; i < sys_table->nr_tables; i++) {			\
		if (efi_guidcmp(tables[i].guid, guid) != 0)		\
			continue;					\
									\
		return (void *)(unsigned long)tables[i].table;		\
	}								\
									\
	return NULL;							\
}
GET_EFI_CONFIG_TABLE(32)
GET_EFI_CONFIG_TABLE(64)

void *get_efi_config_table(efi_system_table_t *sys_table, efi_guid_t guid)
{
	efi_config_table_t *tables = (efi_config_table_t *)sys_table->tables;
	int i;

	for (i = 0; i < sys_table->nr_tables; i++) {
		if (efi_guidcmp(tables[i].guid, guid) != 0)
			continue;

		return (void *)tables[i].table;
	}

	return NULL;
	if (efi_is_64bit())
		return get_efi_config_table64(sys_table, guid);
	else
		return get_efi_config_table32(sys_table, guid);
}