1. 17 3月, 2011 1 次提交
    • S
      xen: use freeze/restore/thaw PM events for suspend/resume/chkpt · b3e96c0c
      Shriram Rajagopalan 提交于
      Use PM_FREEZE, PM_THAW and PM_RESTORE power events for
      suspend/resume/checkpoint functionality, instead of PM_SUSPEND
      and PM_RESUME. Use of these pm events fixes the Xen Guest hangup
      when taking checkpoints. When a suspend event is cancelled
      (while taking checkpoints once/continuously), we use PM_THAW
      instead of PM_RESUME. PM_RESTORE is used when suspend is not
      cancelled. See Documentation/power/devices.txt and linux/pm.h
      for more info about freeze, thaw and restore. The sequence of
      pm events in a suspend-resume scenario is shown below.
      
              dpm_suspend_start(PMSG_FREEZE);
      
                      dpm_suspend_noirq(PMSG_FREEZE);
      
                             sysdev_suspend(PMSG_FREEZE);
                             cancelled = suspend_hypercall()
                             sysdev_resume();
      
                     dpm_resume_noirq(cancelled ? PMSG_THAW : PMSG_RESTORE);
      
             dpm_resume_end(cancelled ? PMSG_THAW : PMSG_RESTORE);
      Acked-by: NIan Campbell <ian.campbell@citrix.com>
      Signed-off-by: NShriram Rajagopalan <rshriram@cs.ubc.ca>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      b3e96c0c
  2. 26 2月, 2011 10 次提交
  3. 17 2月, 2011 1 次提交
  4. 02 12月, 2010 1 次提交
  5. 21 8月, 2010 1 次提交
  6. 23 7月, 2010 2 次提交
    • S
      xen: Add suspend/resume support for PV on HVM guests. · 016b6f5f
      Stefano Stabellini 提交于
      Suspend/resume requires few different things on HVM: the suspend
      hypercall is different; we don't need to save/restore memory related
      settings; except the shared info page and the callback mechanism.
      Signed-off-by: NStefano Stabellini <stefano.stabellini@eu.citrix.com>
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      016b6f5f
    • S
      xen: Xen PCI platform device driver. · 183d03cc
      Stefano Stabellini 提交于
      Add the xen pci platform device driver that is responsible
      for initializing the grant table and xenbus in PV on HVM mode.
      Few changes to xenbus and grant table are necessary to allow the delayed
      initialization in HVM mode.
      Grant table needs few additional modifications to work in HVM mode.
      
      The Xen PCI platform device raises an irq every time an event has been
      delivered to us. However these interrupts are only delivered to vcpu 0.
      The Xen PCI platform interrupt handler calls xen_hvm_evtchn_do_upcall
      that is a little wrapper around __xen_evtchn_do_upcall, the traditional
      Xen upcall handler, the very same used with traditional PV guests.
      
      When running on HVM the event channel upcall is never called while in
      progress because it is a normal Linux irq handler (and we cannot switch
      the irq chip wholesale to the Xen PV ones as we are running QEMU and
      might have passed in PCI devices), therefore we cannot be sure that
      evtchn_upcall_pending is 0 when returning.
      For this reason if evtchn_upcall_pending is set by Xen we need to loop
      again on the event channels set pending otherwise we might loose some
      event channel deliveries.
      Signed-off-by: NStefano Stabellini <stefano.stabellini@eu.citrix.com>
      Signed-off-by: NSheng Yang <sheng@linux.intel.com>
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      183d03cc
  7. 25 5月, 2010 1 次提交
  8. 07 5月, 2010 1 次提交
    • T
      stop_machine: reimplement using cpu_stop · 3fc1f1e2
      Tejun Heo 提交于
      Reimplement stop_machine using cpu_stop.  As cpu stoppers are
      guaranteed to be available for all online cpus,
      stop_machine_create/destroy() are no longer necessary and removed.
      
      With resource management and synchronization handled by cpu_stop, the
      new implementation is much simpler.  Asking the cpu_stop to execute
      the stop_cpu() state machine on all online cpus with cpu hotplug
      disabled is enough.
      
      stop_machine itself doesn't need to manage any global resources
      anymore, so all per-instance information is rolled into struct
      stop_machine_data and the mutex and all static data variables are
      removed.
      
      The previous implementation created and destroyed RT workqueues as
      necessary which made stop_machine() calls highly expensive on very
      large machines.  According to Dimitri Sivanich, preventing the dynamic
      creation/destruction makes booting faster more than twice on very
      large machines.  cpu_stop resources are preallocated for all online
      cpus and should have the same effect.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Acked-by: NRusty Russell <rusty@rustcorp.com.au>
      Acked-by: NPeter Zijlstra <peterz@infradead.org>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Dimitri Sivanich <sivanich@sgi.com>
      3fc1f1e2
  9. 30 3月, 2010 1 次提交
    • T
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo 提交于
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Guess-its-ok-by: NChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  10. 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
  11. 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
  12. 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
  13. 09 4月, 2009 1 次提交
  14. 31 3月, 2009 3 次提交
  15. 23 2月, 2009 1 次提交
  16. 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
  17. 24 10月, 2008 1 次提交
  18. 22 10月, 2008 1 次提交
  19. 25 8月, 2008 1 次提交
  20. 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
  21. 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
  22. 02 6月, 2008 1 次提交
  23. 27 5月, 2008 3 次提交