|
@@ -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;
|
|
|
}
|
|
|
|