10 Jul, 2007

38 commits


04 Jul, 2007

1 commit

  • The clock_was_set() call in seconds_overflow() which happens only when
    leap seconds are inserted / deleted is wrong in two aspects:

    1. it results in a call to on_each_cpu() with interrupts disabled
    2. it is potential deadlock source vs. call_lock in smp_call_function()

    The only possible side effect of the removal might be, that an absolute
    CLOCK_REALTIME timer fires 1 second too late, in the rare case of leap
    second deletion and an absolute CLOCK_REALTIME timer which expires in
    the affected time frame. It will never fire too early.

    This was probably observed by the reporter of a June 30th -> July 1st
    hang: http://lkml.org/lkml/2007/7/3/103

    A similar problem was observed by Dave Jones, who provided a screen shot
    with a lockdep back trace, which allowed to analyse the problem.

    Signed-off-by: Thomas Gleixner
    Acked-by: Ingo Molnar
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     

02 Jul, 2007

1 commit

  • Commit 52ade9b3b97fd3bea42842a056fe0786c28d0555 changed the suspend code
    ordering to execute pm_ops->prepare() after the device model per-device
    .suspend() calls in order to fix some ACPI-related issues. Unfortunately, it
    broke the at91 platform which assumed that pm_ops->prepare() would be called
    before suspending devices.

    at91 used pm_ops->prepare() to get notified of the target system sleep state,
    so that it could use this information while suspending devices. However, with
    the current suspend code ordering pm_ops->prepare() is called too late for
    this purpose. Thus, at91 needs an additional method in 'struct pm_ops' that
    will be used for notifying the platform of the target system sleep state.
    Moreover, in the future such a method will also be needed by ACPI.

    This patch adds the .set_target() method to 'struct pm_ops' and makes the
    suspend code call it, if implemented, before executing the device model
    per-device .suspend() calls. It also modifies the at91 code to use
    pm_ops->set_target() instead of pm_ops->prepare().

    Signed-off-by: Rafael J. Wysocki
    Acked-by: David Brownell
    Cc: Pavel Machek
    Cc: Johannes Berg
    Cc: Len Brown
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki