linux/arch/x86/platform
Matt Fleming 47997d756a x86/rtc: Don't recursively acquire rtc_lock
A deadlock was introduced on x86 in commit ef68c8f87e ("x86:
Serialize EFI time accesses on rtc_lock") because efi_get_time()
and friends can be called with rtc_lock already held by
read_persistent_time(), e.g.:

 timekeeping_init()
    read_persistent_clock()     <-- acquire rtc_lock
        efi_get_time()
            phys_efi_get_time() <-- acquire rtc_lock <DEADLOCK>

To fix this let's push the locking down into the get_wallclock()
and set_wallclock() implementations.  Only the clock
implementations that access the x86 RTC directly need to acquire
rtc_lock, so it makes sense to push the locking down into the
rtc, vrtc and efi code.

The virtualization implementations don't require rtc_lock to be
held because they provide their own serialization.

Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Acked-by: Jan Beulich <jbeulich@novell.com>
Acked-by: Avi Kivity <avi@redhat.com> [for the virtualization aspect]
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Josh Boyer <jwboyer@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2011-09-21 16:16:09 +02:00
..
ce4100 x86: ce4100: Configure IOAPIC pins for USB and SATA to level type 2011-04-28 11:38:30 +02:00
efi Merge branch 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-07-22 17:03:14 -07:00
iris x86: platform: Move iris to x86/platform where it belongs 2010-11-20 10:37:05 +01:00
mrst x86/rtc: Don't recursively acquire rtc_lock 2011-09-21 16:16:09 +02:00
olpc x86, olpc: Wait for last byte of EC command to be accepted 2011-08-05 23:47:55 +02:00
scx200 x86: Move scx200 to platform 2010-10-27 14:30:01 +02:00
sfi Merge branch 'linus' into x86/apic-cleanups 2011-01-07 14:14:15 +01:00
uv x86, UV: Correct failed topology memory leak 2011-06-21 14:50:33 +02:00
visws x86: visws: Fixup irq overhaul fallout 2011-04-04 16:51:15 +02:00
Makefile x86: platform: Move iris to x86/platform where it belongs 2010-11-20 10:37:05 +01:00