1. 13 1月, 2010 1 次提交
    • I
      xen: fix hang on suspend. · c5cae661
      Ian Campbell 提交于
      In 65f63384 "xen: improve error handling in do_suspend" I said:
          - xs_suspend()/xs_resume() and dpm_suspend_noirq()/dpm_resume_noirq() were not
            nested in the obvious way.
      and changed the ordering of the calls as so:
          BEFORE		AFTER
          xs_suspend		dpm_suspend_noirq
          dpm_suspend_noirq	xs_suspend
          *SUSPEND*		*SUSPEND*
          dpm_resume_noirq	dpm_resume_noirq
          xs_resume		xs_resume
      Clearly this is not an improvement and I was talking rubbish.
      
      In particular the new ordering is susceptible to a hang if a xenstore write is
      in progress at the point at which the suspend kicks in. When the suspend
      process calls xs_suspend it tries to take the request_mutex but if a write is
      in progress it could be looping in xenbus_xs.c:read_reply() waiting for
      something to arrive on &xs_state.reply_list while holding the request_mutex
      (taken in the caller of read_reply).
      
      However if we have done dpm_suspend_noirq before xs_suspend then we won't get
      any more xenstore interrupts and process_msg() will never be woken up to add
      anything to the reply_list.
      
      Fix this by calling xs_suspend before dpm_suspend_noirq. If dpm_suspend_noirq
      fails then make sure we go through the xs_suspend_cancel() code path.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      Acked-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      Cc: Stable Kernel <stable@kernel.org>
      c5cae661
  2. 04 12月, 2009 3 次提交
    • I
      xen: explicitly create/destroy stop_machine workqueues outside suspend/resume region. · b4606f21
      Ian Campbell 提交于
      I have observed cases where the implicit stop_machine_destroy() done by
      stop_machine() hangs while destroying the workqueues, specifically in
      kthread_stop(). This seems to be because timer ticks are not restarted
      until after stop_machine() returns.
      
      Fortunately stop_machine provides a facility to pre-create/post-destroy
      the workqueues so use this to ensure that workqueues are only destroyed
      after everything is really up and running again.
      
      I only actually observed this failure with 2.6.30. It seems that newer
      kernels are somehow more robust against doing kthread_stop() without timer
      interrupts (I tried some backports of some likely looking candidates but
      did not track down the commit which added this robustness). However this
      change seems like a reasonable belt&braces thing to do.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      Cc: Stable Kernel <stable@kernel.org>
      b4606f21
    • I
      xen: improve error handling in do_suspend. · 65f63384
      Ian Campbell 提交于
      The existing error handling has a few issues:
      - If freeze_processes() fails it exits with shutting_down = SHUTDOWN_SUSPEND.
      - If dpm_suspend_noirq() fails it exits without resuming xenbus.
      - If stop_machine() fails it exits without resuming xenbus or calling
        dpm_resume_end().
      - xs_suspend()/xs_resume() and dpm_suspend_noirq()/dpm_resume_noirq() were not
        nested in the obvious way.
      
      Fix by ensuring each failure case goto's the correct label. Treat a failure of
      stop_machine() as a cancelled suspend in order to follow the correct resume
      path.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      Cc: Stable Kernel <stable@kernel.org>
      65f63384
    • J
      xen: don't call dpm_resume_noirq() with interrupts disabled. · 922cc38a
      Jeremy Fitzhardinge 提交于
      dpm_resume_noirq() takes a mutex, so it can't be called from a no-interrupt
      context.  Don't call it from within the stop-machine function, but just
      afterwards, since we're resuming anyway, regardless of what happened.
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      Cc: Stable Kernel <stable@kernel.org>
      922cc38a
  3. 13 6月, 2009 2 次提交
    • A
      PM core: rename suspend and resume functions · d1616302
      Alan Stern 提交于
      This patch (as1241) renames a bunch of functions in the PM core.
      Rather than go through a boring list of name changes, suffice it to
      say that in the end we have a bunch of pairs of functions:
      
      	device_resume_noirq	dpm_resume_noirq
      	device_resume		dpm_resume
      	device_complete		dpm_complete
      	device_suspend_noirq	dpm_suspend_noirq
      	device_suspend		dpm_suspend
      	device_prepare		dpm_prepare
      
      in which device_X does the X operation on a single device and dpm_X
      invokes device_X for all devices in the dpm_list.
      
      In addition, the old dpm_power_up and device_resume_noirq have been
      combined into a single function (dpm_resume_noirq).
      
      Lastly, dpm_suspend_start and dpm_resume_end are the renamed versions
      of the former top-level device_suspend and device_resume routines.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Acked-by: NMagnus Damm <damm@igel.co.jp>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      d1616302
    • M
      PM: Rename device_power_down/up() · e39a71ef
      Magnus Damm 提交于
      Rename the functions performing "_noirq" dev_pm_ops
      operations from device_power_down() and device_power_up()
      to device_suspend_noirq() and device_resume_noirq().
      
      The new function names are chosen to show that the functions
      are responsible for calling the _noirq() versions to finalize
      the suspend/resume operation. The current function names do
      not perform power down/up anymore so the names may be misleading.
      
      Global function renames:
      - device_power_down() -> device_suspend_noirq()
      - device_power_up() -> device_resume_noirq()
      
      Static function renames:
      - suspend_device_noirq() -> __device_suspend_noirq()
      - resume_device_noirq() -> __device_resume_noirq()
      Signed-off-by: NMagnus Damm <damm@igel.co.jp>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Acked-by: NLen Brown <lenb@kernel.org>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      e39a71ef
  4. 09 4月, 2009 1 次提交
  5. 31 3月, 2009 3 次提交
  6. 23 2月, 2009 1 次提交
  7. 12 1月, 2009 1 次提交
    • R
      cpumask: convert misc driver functions · f7df8ed1
      Rusty Russell 提交于
      Impact: use new cpumask API.
      
      Convert misc driver functions to use struct cpumask.
      
      To Do:
        - Convert iucv_buffer_cpumask to cpumask_var_t.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NMike Travis <travis@sgi.com>
      Acked-by: NDean Nelson <dcn@sgi.com>
      Cc: Robert Richter <robert.richter@amd.com>
      Cc: oprofile-list@lists.sf.net
      Cc: Jeremy Fitzhardinge <jeremy@xensource.com>
      Cc: Chris Wright <chrisw@sous-sol.org>
      Cc: virtualization@lists.osdl.org
      Cc: xen-devel@lists.xensource.com
      Cc: Ursula Braun <ursula.braun@de.ibm.com>
      Cc: linux390@de.ibm.com
      Cc: linux-s390@vger.kernel.org
      f7df8ed1
  8. 24 10月, 2008 1 次提交
  9. 22 10月, 2008 1 次提交
  10. 25 8月, 2008 1 次提交
  11. 18 7月, 2008 1 次提交
    • S
      linux-next: pci tree build failure · 55ca089e
      Stephen Rothwell 提交于
      Today's linux-next build (x86_64 allmodconfig) failed like this:
      
       drivers/xen/manage.c: In function 'xen_suspend':
       drivers/xen/manage.c:66: error: too few arguments to function 'device_power_up'
       drivers/xen/manage.c: In function 'do_suspend':
       drivers/xen/manage.c:117: error: too few arguments to function 'device_resume'
      
      Caused by commit 1eede070 ("Introduce new
      top level suspend and hibernation callbacks") interacting with new
      usages ...
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Cc: Jeremy Fitzhardinge <jeremy@goop.org>
      Acked-by: NRafael J. Wysocki <rjw@sisk.pl>
      Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      55ca089e
  12. 16 7月, 2008 1 次提交
    • I
      xen: add xen_arch_resume()/xen_timer_resume hook for ia64 support · ad55db9f
      Isaku Yamahata 提交于
      add xen_timer_resume() hook.
      
      Timer resume should be done after event channel is resumed.
      add xen_arch_resume() hook when ipi becomes usable after resume.
      After resume, some cpu specific resource must be reinitialized
      on ia64 that can't be set by another cpu.
      
      However available hooks is run once on only one cpu so that ipi has
      to be used.
      
      During stop_machine_run() ipi can't be used because interrupt is masked.
      So add another hook after stop_machine_run().
      Another approach might be use resume hook which is run by
      device_resume(). However device_resume() may be executed on
      suspend error recovery path.
      
      So it is necessary to determine whether it is executed on real resume path
      or error recovery path.
      Signed-off-by: NIsaku Yamahata <yamahata@valinux.co.jp>
      Cc: Stephen Tweedie <sct@redhat.com>
      Cc: Eduardo Habkost <ehabkost@redhat.com>
      Cc: Mark McLoughlin <markmc@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      ad55db9f
  13. 02 6月, 2008 1 次提交
  14. 27 5月, 2008 3 次提交
  15. 11 10月, 2007 1 次提交
  16. 18 7月, 2007 1 次提交