]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/io/server/src/pm.cc
update
[l4.git] / l4 / pkg / io / server / src / pm.cc
1 #include "debug.h"
2 #include "pm.h"
3
4 #include <cerrno>
5
6
7 Pm::Pm_list Pm::_online(true);
8 Pm::Pm_list Pm::_suspended(true);
9
10 int
11 Pm::pm_suspend_all()
12 {
13   while (Pm *c = _online.front())
14     {
15       int res = c->pm_suspend();
16       if (res < 0)
17         {
18           d_printf(DBG_ERR, "error: pm_suspend failed for %p: %d, aborting\n", c, res);
19           return res;
20         }
21
22       if (_online.front() == c || c->pm_is_online())
23         {
24           d_printf(DBG_ERR, "error: pm_suspend failed for %p, not dequeued from online list, aborting\n", c);
25           return -EBUSY;
26         }
27     }
28   return 0;
29 }
30
31 int
32 Pm::pm_resume_all()
33 {
34   while (Pm *c = _suspended.front())
35     {
36       int res = c->pm_resume();
37       if (res < 0)
38         d_printf(DBG_ERR, "error: pm_resume failed for %p: %d\n", c, res);
39
40       if (_suspended.front() == c)
41         {
42           d_printf(DBG_ERR, "error: pm_resume failed for %p, not dequeued from suspended list\n", c);
43           _suspended.remove(c);
44           c->pm_set_state(Pm_failed);
45         }
46     }
47   return 0;
48 }