From: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org
Cc: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: [PATCH v2 6/7] efi: runtime-wrapper: get rid of the rtc_lock spinlock
Date: Tue, 1 Dec 2015 11:50:19 +0100 [thread overview]
Message-ID: <1448967020-20190-7-git-send-email-ard.biesheuvel@linaro.org> (raw)
In-Reply-To: <1448967020-20190-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
The rtc_lock spinlock aims to serialize access to the CMOS RTC between
the UEFI firmware and the kernel drivers that use it directly. However,
x86 is the only arch that performs such direct accesses, and that never
uses the time related UEFI runtime services. Since no other UEFI enlightened
architectures have a legcay CMOS RTC anyway, we can remove the rtc_lock
spinlock entirely.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
---
drivers/firmware/efi/runtime-wrappers.c | 32 +++++---------------
1 file changed, 8 insertions(+), 24 deletions(-)
diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c
index 311f415bff51..7b8b2f2702ca 100644
--- a/drivers/firmware/efi/runtime-wrappers.c
+++ b/drivers/firmware/efi/runtime-wrappers.c
@@ -61,24 +61,14 @@
*/
static DEFINE_SPINLOCK(efi_runtime_lock);
-/*
- * As per commit ef68c8f87ed1 ("x86: Serialize EFI time accesses on rtc_lock"),
- * the EFI specification requires that callers of the time related runtime
- * functions serialize with other CMOS accesses in the kernel, as the EFI time
- * functions may choose to also use the legacy CMOS RTC.
- */
-__weak DEFINE_SPINLOCK(rtc_lock);
-
static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc)
{
unsigned long flags;
efi_status_t status;
- spin_lock_irqsave(&rtc_lock, flags);
- spin_lock(&efi_runtime_lock);
+ spin_lock_irqsave(&efi_runtime_lock, flags);
status = efi_call_virt(get_time, tm, tc);
- spin_unlock(&efi_runtime_lock);
- spin_unlock_irqrestore(&rtc_lock, flags);
+ spin_unlock_irqrestore(&efi_runtime_lock, flags);
return status;
}
@@ -87,11 +77,9 @@ static efi_status_t virt_efi_set_time(efi_time_t *tm)
unsigned long flags;
efi_status_t status;
- spin_lock_irqsave(&rtc_lock, flags);
- spin_lock(&efi_runtime_lock);
+ spin_lock_irqsave(&efi_runtime_lock, flags);
status = efi_call_virt(set_time, tm);
- spin_unlock(&efi_runtime_lock);
- spin_unlock_irqrestore(&rtc_lock, flags);
+ spin_unlock_irqrestore(&efi_runtime_lock, flags);
return status;
}
@@ -102,11 +90,9 @@ static efi_status_t virt_efi_get_wakeup_time(efi_bool_t *enabled,
unsigned long flags;
efi_status_t status;
- spin_lock_irqsave(&rtc_lock, flags);
- spin_lock(&efi_runtime_lock);
+ spin_lock_irqsave(&efi_runtime_lock, flags);
status = efi_call_virt(get_wakeup_time, enabled, pending, tm);
- spin_unlock(&efi_runtime_lock);
- spin_unlock_irqrestore(&rtc_lock, flags);
+ spin_unlock_irqrestore(&efi_runtime_lock, flags);
return status;
}
@@ -115,11 +101,9 @@ static efi_status_t virt_efi_set_wakeup_time(efi_bool_t enabled, efi_time_t *tm)
unsigned long flags;
efi_status_t status;
- spin_lock_irqsave(&rtc_lock, flags);
- spin_lock(&efi_runtime_lock);
+ spin_lock_irqsave(&efi_runtime_lock, flags);
status = efi_call_virt(set_wakeup_time, enabled, tm);
- spin_unlock(&efi_runtime_lock);
- spin_unlock_irqrestore(&rtc_lock, flags);
+ spin_unlock_irqrestore(&efi_runtime_lock, flags);
return status;
}
--
1.9.1
next prev parent reply other threads:[~2015-12-01 10:50 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-01 10:50 [PATCH v2 0/7] efi: run UEFI services with interrupts enabled Ard Biesheuvel
[not found] ` <1448967020-20190-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-12-01 10:50 ` [PATCH v2 1/7] efi: expose non-blocking set_variable() wrapper to efivars Ard Biesheuvel
2015-12-01 10:50 ` [PATCH v2 2/7] efi: remove redundant efi_set_variable_nonblocking prototype Ard Biesheuvel
2015-12-01 10:50 ` [PATCH v2 3/7] efi: runtime-wrappers: add a nonblocking version of QueryVariableInfo Ard Biesheuvel
2015-12-01 10:50 ` [PATCH v2 4/7] efi: add nonblocking option to efi_query_variable_store() Ard Biesheuvel
[not found] ` <1448967020-20190-5-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-12-08 13:44 ` Matt Fleming
2015-12-01 10:50 ` [PATCH v2 5/7] efi: runtime-wrappers: remove out of date comment regarding in_nmi() Ard Biesheuvel
2015-12-01 10:50 ` Ard Biesheuvel [this message]
[not found] ` <1448967020-20190-7-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-12-08 12:48 ` [PATCH v2 6/7] efi: runtime-wrapper: get rid of the rtc_lock spinlock Matt Fleming
[not found] ` <20151208124854.GC2518-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2015-12-08 13:11 ` Ard Biesheuvel
2015-12-01 10:50 ` [PATCH v2 7/7] efi: runtime-wrappers: run UEFI Runtime Services with interrupts enabled Ard Biesheuvel
[not found] ` <1448967020-20190-8-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-12-08 13:53 ` Matt Fleming
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=1448967020-20190-7-git-send-email-ard.biesheuvel@linaro.org \
--to=ard.biesheuvel-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
--cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).