mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 15:51:46 +00:00
efi/x86: Remove support for EFI time and counter services in mixed mode
Mixed mode calls at runtime are rather tricky with vmap'ed stacks, as we can no longer assume that data passed in by the callers of the EFI runtime wrapper routines is contiguous in physical memory. We need to fix this, but before we do, let's drop the implementations of routines that we know are never used on x86, i.e., the RTC related ones. Given that UEFI rev2.8 permits any runtime service to return EFI_UNSUPPORTED at runtime, let's return that instead. As get_next_high_mono_count() is never used at all, even on other architectures, let's make that return EFI_UNSUPPORTED too. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: linux-efi@vger.kernel.org Cc: Ingo Molnar <mingo@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20200221084849.26878-3-ardb@kernel.org
This commit is contained in:
parent
63056e8b5e
commit
f80c9f6476
@ -568,85 +568,25 @@ efi_thunk_set_virtual_address_map(unsigned long memory_map_size,
|
|||||||
|
|
||||||
static efi_status_t efi_thunk_get_time(efi_time_t *tm, efi_time_cap_t *tc)
|
static efi_status_t efi_thunk_get_time(efi_time_t *tm, efi_time_cap_t *tc)
|
||||||
{
|
{
|
||||||
efi_status_t status;
|
return EFI_UNSUPPORTED;
|
||||||
u32 phys_tm, phys_tc;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock(&rtc_lock);
|
|
||||||
spin_lock_irqsave(&efi_runtime_lock, flags);
|
|
||||||
|
|
||||||
phys_tm = virt_to_phys_or_null(tm);
|
|
||||||
phys_tc = virt_to_phys_or_null(tc);
|
|
||||||
|
|
||||||
status = efi_thunk(get_time, phys_tm, phys_tc);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&efi_runtime_lock, flags);
|
|
||||||
spin_unlock(&rtc_lock);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static efi_status_t efi_thunk_set_time(efi_time_t *tm)
|
static efi_status_t efi_thunk_set_time(efi_time_t *tm)
|
||||||
{
|
{
|
||||||
efi_status_t status;
|
return EFI_UNSUPPORTED;
|
||||||
u32 phys_tm;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock(&rtc_lock);
|
|
||||||
spin_lock_irqsave(&efi_runtime_lock, flags);
|
|
||||||
|
|
||||||
phys_tm = virt_to_phys_or_null(tm);
|
|
||||||
|
|
||||||
status = efi_thunk(set_time, phys_tm);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&efi_runtime_lock, flags);
|
|
||||||
spin_unlock(&rtc_lock);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static efi_status_t
|
static efi_status_t
|
||||||
efi_thunk_get_wakeup_time(efi_bool_t *enabled, efi_bool_t *pending,
|
efi_thunk_get_wakeup_time(efi_bool_t *enabled, efi_bool_t *pending,
|
||||||
efi_time_t *tm)
|
efi_time_t *tm)
|
||||||
{
|
{
|
||||||
efi_status_t status;
|
return EFI_UNSUPPORTED;
|
||||||
u32 phys_enabled, phys_pending, phys_tm;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock(&rtc_lock);
|
|
||||||
spin_lock_irqsave(&efi_runtime_lock, flags);
|
|
||||||
|
|
||||||
phys_enabled = virt_to_phys_or_null(enabled);
|
|
||||||
phys_pending = virt_to_phys_or_null(pending);
|
|
||||||
phys_tm = virt_to_phys_or_null(tm);
|
|
||||||
|
|
||||||
status = efi_thunk(get_wakeup_time, phys_enabled,
|
|
||||||
phys_pending, phys_tm);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&efi_runtime_lock, flags);
|
|
||||||
spin_unlock(&rtc_lock);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static efi_status_t
|
static efi_status_t
|
||||||
efi_thunk_set_wakeup_time(efi_bool_t enabled, efi_time_t *tm)
|
efi_thunk_set_wakeup_time(efi_bool_t enabled, efi_time_t *tm)
|
||||||
{
|
{
|
||||||
efi_status_t status;
|
return EFI_UNSUPPORTED;
|
||||||
u32 phys_tm;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock(&rtc_lock);
|
|
||||||
spin_lock_irqsave(&efi_runtime_lock, flags);
|
|
||||||
|
|
||||||
phys_tm = virt_to_phys_or_null(tm);
|
|
||||||
|
|
||||||
status = efi_thunk(set_wakeup_time, enabled, phys_tm);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&efi_runtime_lock, flags);
|
|
||||||
spin_unlock(&rtc_lock);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long efi_name_size(efi_char16_t *name)
|
static unsigned long efi_name_size(efi_char16_t *name)
|
||||||
@ -770,18 +710,7 @@ efi_thunk_get_next_variable(unsigned long *name_size,
|
|||||||
static efi_status_t
|
static efi_status_t
|
||||||
efi_thunk_get_next_high_mono_count(u32 *count)
|
efi_thunk_get_next_high_mono_count(u32 *count)
|
||||||
{
|
{
|
||||||
efi_status_t status;
|
return EFI_UNSUPPORTED;
|
||||||
u32 phys_count;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&efi_runtime_lock, flags);
|
|
||||||
|
|
||||||
phys_count = virt_to_phys_or_null(count);
|
|
||||||
status = efi_thunk(get_next_high_mono_count, phys_count);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&efi_runtime_lock, flags);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user