From: Matt Fleming <matt@codeblueprint.co.uk> To: Ingo Molnar <mingo@kernel.org>, "H . Peter Anvin" <hpa@zytor.com>, Thomas Gleixner <tglx@linutronix.de> Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org, Ard Biesheuvel <ard.biesheuvel@linaro.org>, Matt Fleming <matt@codeblueprint.co.uk> Subject: [PATCH 03/14] efi: runtime-wrappers: Add a nonblocking version of QueryVariableInfo Date: Mon, 1 Feb 2016 22:06:57 +0000 [thread overview] Message-ID: <1454364428-494-4-git-send-email-matt@codeblueprint.co.uk> (raw) In-Reply-To: <1454364428-494-1-git-send-email-matt@codeblueprint.co.uk> From: Ard Biesheuvel <ard.biesheuvel@linaro.org> This introduces a new runtime wrapper for the QueryVariableInfo() UEFI Runtime Service, which gives up immediately rather than spins on failure to grab the efi_runtime spinlock. This is required in the non-blocking path of the efi-pstore code. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk> --- drivers/firmware/efi/runtime-wrappers.c | 22 ++++++++++++++++++++++ include/linux/efi.h | 1 + 2 files changed, 23 insertions(+) diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c index 228bbf910461..e9f2867f0d91 100644 --- a/drivers/firmware/efi/runtime-wrappers.c +++ b/drivers/firmware/efi/runtime-wrappers.c @@ -230,6 +230,27 @@ static efi_status_t virt_efi_query_variable_info(u32 attr, return status; } +static efi_status_t +virt_efi_query_variable_info_nonblocking(u32 attr, + u64 *storage_space, + u64 *remaining_space, + u64 *max_variable_size) +{ + unsigned long flags; + efi_status_t status; + + if (efi.runtime_version < EFI_2_00_SYSTEM_TABLE_REVISION) + return EFI_UNSUPPORTED; + + if (!spin_trylock_irqsave(&efi_runtime_lock, flags)) + return EFI_NOT_READY; + + status = efi_call_virt(query_variable_info, attr, storage_space, + remaining_space, max_variable_size); + spin_unlock_irqrestore(&efi_runtime_lock, flags); + return status; +} + static efi_status_t virt_efi_get_next_high_mono_count(u32 *count) { unsigned long flags; @@ -300,6 +321,7 @@ void efi_native_runtime_setup(void) efi.get_next_high_mono_count = virt_efi_get_next_high_mono_count; efi.reset_system = virt_efi_reset_system; efi.query_variable_info = virt_efi_query_variable_info; + efi.query_variable_info_nonblocking = virt_efi_query_variable_info_nonblocking; efi.update_capsule = virt_efi_update_capsule; efi.query_capsule_caps = virt_efi_query_capsule_caps; } diff --git a/include/linux/efi.h b/include/linux/efi.h index 8706e0aabedc..ad1e177ba48e 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -849,6 +849,7 @@ extern struct efi { efi_set_variable_t *set_variable; efi_set_variable_t *set_variable_nonblocking; efi_query_variable_info_t *query_variable_info; + efi_query_variable_info_t *query_variable_info_nonblocking; efi_update_capsule_t *update_capsule; efi_query_capsule_caps_t *query_capsule_caps; efi_get_next_high_mono_count_t *get_next_high_mono_count; -- 2.6.2
WARNING: multiple messages have this Message-ID (diff)
From: Matt Fleming <matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org> To: Ingo Molnar <mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, "H . Peter Anvin" <hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>, Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org> Cc: linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>, Matt Fleming <matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org> Subject: [PATCH 03/14] efi: runtime-wrappers: Add a nonblocking version of QueryVariableInfo Date: Mon, 1 Feb 2016 22:06:57 +0000 [thread overview] Message-ID: <1454364428-494-4-git-send-email-matt@codeblueprint.co.uk> (raw) In-Reply-To: <1454364428-494-1-git-send-email-matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org> From: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> This introduces a new runtime wrapper for the QueryVariableInfo() UEFI Runtime Service, which gives up immediately rather than spins on failure to grab the efi_runtime spinlock. This is required in the non-blocking path of the efi-pstore code. Signed-off-by: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> Signed-off-by: Matt Fleming <matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org> --- drivers/firmware/efi/runtime-wrappers.c | 22 ++++++++++++++++++++++ include/linux/efi.h | 1 + 2 files changed, 23 insertions(+) diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c index 228bbf910461..e9f2867f0d91 100644 --- a/drivers/firmware/efi/runtime-wrappers.c +++ b/drivers/firmware/efi/runtime-wrappers.c @@ -230,6 +230,27 @@ static efi_status_t virt_efi_query_variable_info(u32 attr, return status; } +static efi_status_t +virt_efi_query_variable_info_nonblocking(u32 attr, + u64 *storage_space, + u64 *remaining_space, + u64 *max_variable_size) +{ + unsigned long flags; + efi_status_t status; + + if (efi.runtime_version < EFI_2_00_SYSTEM_TABLE_REVISION) + return EFI_UNSUPPORTED; + + if (!spin_trylock_irqsave(&efi_runtime_lock, flags)) + return EFI_NOT_READY; + + status = efi_call_virt(query_variable_info, attr, storage_space, + remaining_space, max_variable_size); + spin_unlock_irqrestore(&efi_runtime_lock, flags); + return status; +} + static efi_status_t virt_efi_get_next_high_mono_count(u32 *count) { unsigned long flags; @@ -300,6 +321,7 @@ void efi_native_runtime_setup(void) efi.get_next_high_mono_count = virt_efi_get_next_high_mono_count; efi.reset_system = virt_efi_reset_system; efi.query_variable_info = virt_efi_query_variable_info; + efi.query_variable_info_nonblocking = virt_efi_query_variable_info_nonblocking; efi.update_capsule = virt_efi_update_capsule; efi.query_capsule_caps = virt_efi_query_capsule_caps; } diff --git a/include/linux/efi.h b/include/linux/efi.h index 8706e0aabedc..ad1e177ba48e 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -849,6 +849,7 @@ extern struct efi { efi_set_variable_t *set_variable; efi_set_variable_t *set_variable_nonblocking; efi_query_variable_info_t *query_variable_info; + efi_query_variable_info_t *query_variable_info_nonblocking; efi_update_capsule_t *update_capsule; efi_query_capsule_caps_t *query_capsule_caps; efi_get_next_high_mono_count_t *get_next_high_mono_count; -- 2.6.2
next prev parent reply other threads:[~2016-02-01 22:07 UTC|newest] Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-02-01 22:06 [GIT PULL 00/14] EFI changes for v4.6 Matt Fleming 2016-02-01 22:06 ` [PATCH 01/14] efi: Expose non-blocking set_variable() wrapper to efivars Matt Fleming 2016-02-03 11:31 ` [tip:efi/core] " tip-bot for Ard Biesheuvel 2016-02-01 22:06 ` [PATCH 02/14] efi: Remove redundant efi_set_variable_nonblocking prototype Matt Fleming 2016-02-01 22:06 ` Matt Fleming 2016-02-03 11:31 ` [tip:efi/core] efi: Remove redundant efi_set_variable_nonblocking () prototype tip-bot for Ard Biesheuvel 2016-02-01 22:06 ` Matt Fleming [this message] 2016-02-01 22:06 ` [PATCH 03/14] efi: runtime-wrappers: Add a nonblocking version of QueryVariableInfo Matt Fleming 2016-02-03 11:31 ` [tip:efi/core] efi/runtime-wrappers: Add a nonblocking version of QueryVariableInfo() tip-bot for Ard Biesheuvel 2016-02-01 22:06 ` [PATCH 04/14] efi: Add nonblocking option to efi_query_variable_store() Matt Fleming 2016-02-03 11:32 ` [tip:efi/core] " tip-bot for Ard Biesheuvel 2016-02-01 22:06 ` [PATCH 05/14] efi: runtime-wrappers: Remove out of date comment regarding in_nmi() Matt Fleming 2016-02-03 11:32 ` [tip:efi/core] efi/runtime-wrappers: " tip-bot for Ard Biesheuvel 2016-02-01 22:07 ` [PATCH 06/14] efi: runtime-wrapper: Get rid of the rtc_lock spinlock Matt Fleming 2016-02-01 22:07 ` Matt Fleming 2016-02-03 11:32 ` [tip:efi/core] efi: Runtime-wrapper: " tip-bot for Ard Biesheuvel 2016-02-01 22:07 ` [PATCH 07/14] efi: runtime-wrappers: Run UEFI Runtime Services with interrupts enabled Matt Fleming 2016-02-03 9:43 ` Ingo Molnar 2016-02-03 9:57 ` Ard Biesheuvel 2016-02-03 9:57 ` Ard Biesheuvel 2016-02-03 10:58 ` Ingo Molnar 2016-02-03 11:33 ` Ard Biesheuvel 2016-02-03 12:01 ` Matt Fleming 2016-02-04 13:58 ` [PATCH] efi: runtime-wrappers: run " Ard Biesheuvel 2016-02-08 15:16 ` Matt Fleming 2016-02-08 19:37 ` Andy Lutomirski 2016-02-09 16:52 ` Ard Biesheuvel 2016-02-09 16:52 ` Ard Biesheuvel 2016-02-11 16:03 ` Matt Fleming 2016-02-11 16:04 ` Matt Fleming 2016-02-01 22:07 ` [PATCH 08/14] efivars: Use to_efivar_entry Matt Fleming 2016-02-03 11:33 ` [tip:efi/core] " tip-bot for Geliang Tang 2016-02-01 22:07 ` [PATCH 09/14] x86/efi-bgrt: Don't ignore the BGRT if the 'valid' bit is 0 Matt Fleming 2016-02-03 11:33 ` [tip:efi/core] x86/efi/bgrt: " tip-bot for Môshe van der Sterre 2016-02-01 22:07 ` [PATCH 10/14] efi: Make checkpatch complain less about efi.h GUID additions Matt Fleming 2016-02-01 22:07 ` Matt Fleming 2016-02-03 10:33 ` Ingo Molnar 2016-02-03 10:33 ` Ingo Molnar 2016-02-03 10:44 ` Matt Fleming 2016-02-03 10:50 ` Ingo Molnar 2016-02-03 10:50 ` Ingo Molnar 2016-02-03 11:18 ` Matt Fleming 2016-02-03 11:27 ` Ingo Molnar 2016-02-03 11:27 ` Ingo Molnar 2016-02-03 11:09 ` Joe Perches 2016-02-01 22:07 ` [PATCH 11/14] x86/efi: Show actual ending addresses in efi_print_memmap Matt Fleming 2016-02-02 8:49 ` Laszlo Ersek 2016-02-03 11:33 ` [tip:efi/core] " tip-bot for Robert Elliott 2016-02-01 22:07 ` [PATCH 12/14] efi: Add NV memory attribute Matt Fleming 2016-02-02 8:54 ` Laszlo Ersek 2016-02-02 8:54 ` Laszlo Ersek 2016-02-03 11:34 ` [tip:efi/core] " tip-bot for Robert Elliott 2016-02-01 22:07 ` [PATCH 13/14] efi: Add Persistent Memory type name Matt Fleming 2016-02-02 8:56 ` Laszlo Ersek 2016-02-03 11:34 ` [tip:efi/core] " tip-bot for Robert Elliott 2016-02-01 22:07 ` [PATCH 14/14] x86/efi: Print size in binary units in efi_print_memmap Matt Fleming 2016-02-02 9:22 ` Laszlo Ersek 2016-02-03 10:40 ` Ingo Molnar 2016-02-03 11:28 ` Matt Fleming 2016-02-03 12:36 ` Andy Shevchenko 2016-02-03 15:25 ` Elliott, Robert (Persistent Memory) 2016-02-03 15:25 ` Elliott, Robert (Persistent Memory) 2016-02-09 12:20 ` Ingo Molnar 2016-02-09 12:53 ` Laszlo Ersek 2016-02-09 12:53 ` Laszlo Ersek 2016-02-09 13:14 ` Ingo Molnar 2016-02-09 13:14 ` Ingo Molnar
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1454364428-494-4-git-send-email-matt@codeblueprint.co.uk \ --to=matt@codeblueprint.co.uk \ --cc=ard.biesheuvel@linaro.org \ --cc=hpa@zytor.com \ --cc=linux-efi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@kernel.org \ --cc=tglx@linutronix.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.