diff --git a/kernel.spec b/kernel.spec index 1043f687d..fb26d2c68 100644 --- a/kernel.spec +++ b/kernel.spec @@ -717,6 +717,7 @@ Patch12029: crypto-register-cryptd-first.patch Patch12303: dmar-disable-when-ricoh-multifunction.patch +Patch13002: revert-efi-rtclock.patch Patch13003: efi-dont-map-boot-services-on-32bit.patch Patch13004: iwlagn-revert-max-aggregate-size.patch @@ -1321,6 +1322,7 @@ ApplyPatch crypto-register-cryptd-first.patch # rhbz#605888 ApplyPatch dmar-disable-when-ricoh-multifunction.patch +ApplyPatch revert-efi-rtclock.patch ApplyPatch efi-dont-map-boot-services-on-32bit.patch ApplyPatch iwlagn-revert-max-aggregate-size.patch @@ -2035,6 +2037,9 @@ fi # ||----w | # || || %changelog +* Tue Aug 30 2011 Dave Jones +- Revert "x86: Serialize EFI time accesses on rtc_lock" (rhbz 732755) + * Tue Aug 30 2011 Josh Boyer - Add patch to fix rhbz 606017 diff --git a/revert-efi-rtclock.patch b/revert-efi-rtclock.patch new file mode 100644 index 000000000..87ecaa11a --- /dev/null +++ b/revert-efi-rtclock.patch @@ -0,0 +1,76 @@ +diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c +index 3ae4128..e17c6d2 100644 +--- a/arch/x86/platform/efi/efi.c ++++ b/arch/x86/platform/efi/efi.c +@@ -89,50 +89,26 @@ early_param("add_efi_memmap", setup_add_efi_memmap); + + 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); +- status = efi_call_virt2(get_time, tm, tc); +- spin_unlock_irqrestore(&rtc_lock, flags); +- return status; ++ return efi_call_virt2(get_time, tm, tc); + } + + 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); +- status = efi_call_virt1(set_time, tm); +- spin_unlock_irqrestore(&rtc_lock, flags); +- return status; ++ return efi_call_virt1(set_time, tm); + } + + static efi_status_t virt_efi_get_wakeup_time(efi_bool_t *enabled, + efi_bool_t *pending, + efi_time_t *tm) + { +- unsigned long flags; +- efi_status_t status; +- +- spin_lock_irqsave(&rtc_lock, flags); +- status = efi_call_virt3(get_wakeup_time, +- enabled, pending, tm); +- spin_unlock_irqrestore(&rtc_lock, flags); +- return status; ++ return efi_call_virt3(get_wakeup_time, ++ enabled, pending, tm); + } + + 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); +- status = efi_call_virt2(set_wakeup_time, +- enabled, tm); +- spin_unlock_irqrestore(&rtc_lock, flags); +- return status; ++ return efi_call_virt2(set_wakeup_time, ++ enabled, tm); + } + + static efi_status_t virt_efi_get_variable(efi_char16_t *name, +@@ -232,14 +208,11 @@ static efi_status_t __init phys_efi_set_virtual_address_map( + static efi_status_t __init phys_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); + efi_call_phys_prelog(); + status = efi_call_phys2(efi_phys.get_time, tm, tc); + efi_call_phys_epilog(); +- spin_unlock_irqrestore(&rtc_lock, flags); + return status; + } +