]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/fix_tosa_apm.patch
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / linux / openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107 / fix_tosa_apm.patch
1
2 #
3 # Patch managed by http://www.holgerschurig.de/patcher.html
4 #
5
6 --- linux/arch/arm/mach-pxa/sharpsl_apm.c~fix_tosa_apm.patch
7 +++ linux/arch/arm/mach-pxa/sharpsl_apm.c
8 @@ -254,6 +254,8 @@
9         int             magic;
10         struct apm_user *       next;
11         int             suser: 1;
12 +        int             reader: 1;
13 +        int             writer: 1;
14         int             suspend_wait: 1;
15         int             suspend_result;
16         int             suspends_pending;
17 @@ -1596,12 +1598,12 @@
18  {
19         struct apm_user *       as;
20  
21 -       DPRINTK("event=%d\n",event);
22 +       DPRINTK("event=%d, sender=%p\n",event,sender);
23  
24         if (user_list == NULL)
25                 return;
26         for (as = user_list; as != NULL; as = as->next) {
27 -               if (as == sender)
28 +               if ((as == sender) || (!as->reader))
29                         continue;
30                 as->event_head = (as->event_head + 1) % APM_MAX_EVENTS;
31                 if (as->event_head == as->event_tail) {
32 @@ -1611,8 +1613,8 @@
33                         as->event_tail = (as->event_tail + 1) % APM_MAX_EVENTS;
34                 }
35                 as->events[as->event_head] = event;
36 -               if (!as->suser)
37 -                       continue;
38 +                if ((!as->suser) || (!as->writer))
39 +                        continue;
40                 switch (event) {
41                 case APM_SYS_SUSPEND:
42                 case APM_USER_SUSPEND:
43 @@ -1630,9 +1632,8 @@
44  #ifdef SHARPSL_NEW_IDLE
45         current->nice = save_nice;
46         current->counter = save_counter;
47 -#else
48 -       wake_up_interruptible(&apm_waitqueue);
49  #endif
50 +       wake_up_interruptible(&apm_waitqueue);
51  }
52  
53  static unsigned long get_cmos_time(void)
54 @@ -2532,6 +2533,8 @@
55          * privileged operation -- cevans
56          */
57         as->suser = capable(CAP_SYS_ADMIN);
58 +        as->writer = (filp->f_mode & FMODE_WRITE) == FMODE_WRITE;
59 +        as->reader = (filp->f_mode & FMODE_READ) == FMODE_READ;
60         as->next = user_list;
61         user_list = as;
62         filp->private_data = as;
63 @@ -3000,6 +3003,9 @@
64  #endif
65  #endif
66  
67 +        suspends_pending = 0;
68 +        standbys_pending = 0;
69 +
70         apm_proc = create_proc_info_entry("apm", 0, NULL, apm_get_info);
71         if (apm_proc)
72                 SET_MODULE_OWNER(apm_proc);