* [PATCH v2 0/2] xen/efi: Fixes
@ 2017-06-22 10:51 Daniel Kiper
2017-06-22 10:51 ` [PATCH v2 1/2] efi: Process MEMATTR table only if EFI_MEMMAP Daniel Kiper
2017-06-22 10:51 ` [PATCH v2 2/2] x86/xen/efi: Init only efi struct members used by Xen Daniel Kiper
0 siblings, 2 replies; 4+ messages in thread
From: Daniel Kiper @ 2017-06-22 10:51 UTC (permalink / raw)
To: linux-efi, linux-kernel, x86, stable, xen-devel
Cc: boris.ostrovsky, jgross, tglx, mingo, hpa, matt, ard.biesheuvel,
andrew.cooper3
Hey,
Two small fixes (v2, minor cleanup) for Xen dom0 running on x86_64 EFI platforms.
I am CC-ing stable maintainers because similar stuff is needed for various
stable kernels too. Unfortunately, almost every version needs a bit different
set of fixes. So, please treat this email more as head up than real set of
patches for your kernel. If you wish to get Xen EFI stuff fixed just drop me
a line. Then I will prepare set of patches for your kernel (if needed).
Ard, Andrew, Ingo, thank you for looking at the patches.
Daniel
arch/x86/xen/efi.c | 45 ++++++++++++---------------------------------
drivers/firmware/efi/efi.c | 3 ++-
2 files changed, 14 insertions(+), 34 deletions(-)
Daniel Kiper (2):
efi: Process MEMATTR table only if EFI_MEMMAP
x86/xen/efi: Init only efi struct members used by Xen
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] efi: Process MEMATTR table only if EFI_MEMMAP
2017-06-22 10:51 [PATCH v2 0/2] xen/efi: Fixes Daniel Kiper
@ 2017-06-22 10:51 ` Daniel Kiper
2017-06-22 10:51 ` [PATCH v2 2/2] x86/xen/efi: Init only efi struct members used by Xen Daniel Kiper
1 sibling, 0 replies; 4+ messages in thread
From: Daniel Kiper @ 2017-06-22 10:51 UTC (permalink / raw)
To: linux-efi, linux-kernel, x86, stable, xen-devel
Cc: boris.ostrovsky, jgross, tglx, mingo, hpa, matt, ard.biesheuvel,
andrew.cooper3
Otherwise e.g. Xen dom0 on x86_64 EFI platforms crashes.
In theory we can check EFI_PARAVIRT too, however,
EFI_MEMMAP looks more generic and covers more cases.
Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
drivers/firmware/efi/efi.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index b372aad..045d6d3 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -528,7 +528,8 @@ int __init efi_config_parse_tables(void *config_tables, int count, int sz,
}
}
- efi_memattr_init();
+ if (efi_enabled(EFI_MEMMAP))
+ efi_memattr_init();
/* Parse the EFI Properties table if it exists */
if (efi.properties_table != EFI_INVALID_TABLE_ADDR) {
--
1.7.10.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] x86/xen/efi: Init only efi struct members used by Xen
2017-06-22 10:51 [PATCH v2 0/2] xen/efi: Fixes Daniel Kiper
2017-06-22 10:51 ` [PATCH v2 1/2] efi: Process MEMATTR table only if EFI_MEMMAP Daniel Kiper
@ 2017-06-22 10:51 ` Daniel Kiper
2017-06-22 19:25 ` Boris Ostrovsky
1 sibling, 1 reply; 4+ messages in thread
From: Daniel Kiper @ 2017-06-22 10:51 UTC (permalink / raw)
To: linux-efi, linux-kernel, x86, stable, xen-devel
Cc: boris.ostrovsky, jgross, tglx, mingo, hpa, matt, ard.biesheuvel,
andrew.cooper3
Current approach, wholesale efi struct initialization from efi_xen, is not
good. Usually if new member is defined then it is properly initialized in
drivers/firmware/efi/efi.c but not in arch/x86/xen/efi.c. As I saw it happened
a few times until now. So, let's initialize only efi struct members used by
Xen to avoid such issues in the future.
Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
--
Align assignments to increase readability. Suggested by Ingo Molnar.
---
arch/x86/xen/efi.c | 45 ++++++++++++---------------------------------
1 file changed, 12 insertions(+), 33 deletions(-)
diff --git a/arch/x86/xen/efi.c b/arch/x86/xen/efi.c
index 30bb2e8..a18703b 100644
--- a/arch/x86/xen/efi.c
+++ b/arch/x86/xen/efi.c
@@ -54,38 +54,6 @@
.tables = EFI_INVALID_TABLE_ADDR /* Initialized later. */
};
-static const struct efi efi_xen __initconst = {
- .systab = NULL, /* Initialized later. */
- .runtime_version = 0, /* Initialized later. */
- .mps = EFI_INVALID_TABLE_ADDR,
- .acpi = EFI_INVALID_TABLE_ADDR,
- .acpi20 = EFI_INVALID_TABLE_ADDR,
- .smbios = EFI_INVALID_TABLE_ADDR,
- .smbios3 = EFI_INVALID_TABLE_ADDR,
- .sal_systab = EFI_INVALID_TABLE_ADDR,
- .boot_info = EFI_INVALID_TABLE_ADDR,
- .hcdp = EFI_INVALID_TABLE_ADDR,
- .uga = EFI_INVALID_TABLE_ADDR,
- .uv_systab = EFI_INVALID_TABLE_ADDR,
- .fw_vendor = EFI_INVALID_TABLE_ADDR,
- .runtime = EFI_INVALID_TABLE_ADDR,
- .config_table = EFI_INVALID_TABLE_ADDR,
- .get_time = xen_efi_get_time,
- .set_time = xen_efi_set_time,
- .get_wakeup_time = xen_efi_get_wakeup_time,
- .set_wakeup_time = xen_efi_set_wakeup_time,
- .get_variable = xen_efi_get_variable,
- .get_next_variable = xen_efi_get_next_variable,
- .set_variable = xen_efi_set_variable,
- .query_variable_info = xen_efi_query_variable_info,
- .update_capsule = xen_efi_update_capsule,
- .query_capsule_caps = xen_efi_query_capsule_caps,
- .get_next_high_mono_count = xen_efi_get_next_high_mono_count,
- .reset_system = xen_efi_reset_system,
- .set_virtual_address_map = NULL, /* Not used under Xen. */
- .flags = 0 /* Initialized later. */
-};
-
static efi_system_table_t __init *xen_efi_probe(void)
{
struct xen_platform_op op = {
@@ -102,7 +70,18 @@ static efi_system_table_t __init *xen_efi_probe(void)
/* Here we know that Xen runs on EFI platform. */
- efi = efi_xen;
+ efi.get_time = xen_efi_get_time;
+ efi.set_time = xen_efi_set_time;
+ efi.get_wakeup_time = xen_efi_get_wakeup_time;
+ efi.set_wakeup_time = xen_efi_set_wakeup_time;
+ efi.get_variable = xen_efi_get_variable;
+ efi.get_next_variable = xen_efi_get_next_variable;
+ efi.set_variable = xen_efi_set_variable;
+ efi.query_variable_info = xen_efi_query_variable_info;
+ efi.update_capsule = xen_efi_update_capsule;
+ efi.query_capsule_caps = xen_efi_query_capsule_caps;
+ efi.get_next_high_mono_count = xen_efi_get_next_high_mono_count;
+ efi.reset_system = xen_efi_reset_system;
efi_systab_xen.tables = info->cfg.addr;
efi_systab_xen.nr_tables = info->cfg.nent;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] x86/xen/efi: Init only efi struct members used by Xen
2017-06-22 10:51 ` [PATCH v2 2/2] x86/xen/efi: Init only efi struct members used by Xen Daniel Kiper
@ 2017-06-22 19:25 ` Boris Ostrovsky
0 siblings, 0 replies; 4+ messages in thread
From: Boris Ostrovsky @ 2017-06-22 19:25 UTC (permalink / raw)
To: Daniel Kiper, linux-efi, linux-kernel, x86, stable, xen-devel
Cc: jgross, tglx, mingo, hpa, matt, ard.biesheuvel, andrew.cooper3
On 06/22/2017 06:51 AM, Daniel Kiper wrote:
> Current approach, wholesale efi struct initialization from efi_xen, is not
> good. Usually if new member is defined then it is properly initialized in
> drivers/firmware/efi/efi.c but not in arch/x86/xen/efi.c. As I saw it happened
> a few times until now. So, let's initialize only efi struct members used by
> Xen to avoid such issues in the future.
>
> Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-06-22 19:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-22 10:51 [PATCH v2 0/2] xen/efi: Fixes Daniel Kiper
2017-06-22 10:51 ` [PATCH v2 1/2] efi: Process MEMATTR table only if EFI_MEMMAP Daniel Kiper
2017-06-22 10:51 ` [PATCH v2 2/2] x86/xen/efi: Init only efi struct members used by Xen Daniel Kiper
2017-06-22 19:25 ` Boris Ostrovsky
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox