]> git.pld-linux.org Git - packages/kernel.git/blob - linux-2.4.21-uml-o1.patch
- obsolete
[packages/kernel.git] / linux-2.4.21-uml-o1.patch
1 diff -urN linux-2.4.20-uml/arch/um/include/2_5compat.h linux-2.4.20-uml-o1/arch/um/include/2_5compat.h
2 --- linux-2.4.20-uml/arch/um/include/2_5compat.h        Sat Mar 15 18:34:03 2003
3 +++ linux-2.4.20-uml-o1/arch/um/include/2_5compat.h     Sat Mar 15 20:46:24 2003
4 @@ -32,8 +31,7 @@
5  
6  #define IS_WRITE(req) ((req)->cmd == WRITE)
7  
8 -#define SET_PRI(task) \
9 -       do { (task)->nice = 20; (task)->counter = -100; } while(0);
10 +#define SET_PRI(task) do { } while(0)
11  
12  #else
13  
14 diff -u um/arch/um/include/kern_util.h um/arch/um/include/kern_util.h
15 --- um/arch/um/include/kern_util.h
16 +++ um/arch/um/include/kern_util.h
17 @@ -106,7 +106,7 @@
18  extern void arch_switch(void);
19  extern void free_irq(unsigned int, void *);
20  extern int um_in_interrupt(void);
21 -extern int cpu(void);
22 +extern int um_cpu(void);
23  #endif
24  
25  /*
26 diff -urN linux-2.4.20-uml/arch/um/include/user_util.h linux-2.4.20-uml-o1/arch/um/include/user_util.h
27 --- linux-2.4.20-uml/arch/um/include/user_util.h        Sat Mar 15 18:34:03 2003
28 +++ linux-2.4.20-uml-o1/arch/um/include/user_util.h     Sat Mar 15 19:58:20 2003
29 @@ -89,6 +89,7 @@
30  extern int arch_fixup(unsigned long address, void *sc_ptr);
31  extern int can_do_skas(void);
32  extern void arch_init_thread(void);
33 +extern void forward_pending_sigio(int target);
34  
35  #endif
36  
37 diff -urN linux-2.4.20-uml/arch/um/kernel/irq.c linux-2.4.20-uml-o1/arch/um/kernel/irq.c
38 --- linux-2.4.20-uml/arch/um/kernel/irq.c       Sat Mar 15 18:34:03 2003
39 +++ linux-2.4.20-uml-o1/arch/um/kernel/irq.c    Sat Mar 15 20:30:22 2003
40 @@ -151,10 +151,12 @@
41  
42         status = 1;     /* Force the "do bottom halves" bit */
43  
44 -       if (!(action->flags & SA_INTERRUPT))
45 -               __sti();
46 -
47         do {
48 +               if (!(action->flags & SA_INTERRUPT))
49 +                       __sti();
50 +               else
51 +                       __cli();
52 +
53                 status |= action->flags;
54                 action->handler(irq, action->dev_id, regs);
55                 action = action->next;
56 diff -urN linux-2.4.20-uml/arch/um/kernel/process.c linux-2.4.20-uml-o1/arch/um/kernel/process.c
57 --- linux-2.4.20-uml/arch/um/kernel/process.c   Sat Mar 15 18:34:03 2003
58 +++ linux-2.4.20-uml-o1/arch/um/kernel/process.c        Sat Mar 15 19:59:12 2003
59 @@ -275,6 +275,16 @@
60  #endif
61  }
62  
63 +void forward_pending_sigio(int target)
64 +{
65 +       sigset_t sigs;
66 +
67 +       if(sigpending(&sigs)) 
68 +               panic("forward_pending_sigio : sigpending failed");
69 +       if(sigismember(&sigs, SIGIO))
70 +               kill(target, SIGIO);
71 +}
72 +
73  /*
74   * Overrides for Emacs so that we follow Linus's tabbing style.
75   * Emacs will notice this stuff at the end of the file and automatically
76 diff -u um/arch/um/kernel/process_kern.c um/arch/um/kernel/process_kern.c
77 --- um/arch/um/kernel/process_kern.c
78 +++ um/arch/um/kernel/process_kern.c
79 @@ -124,7 +124,7 @@
80  {
81         struct task_struct *task = t;
82  
83 -       cpu_tasks[task->processor] = ((struct cpu_task) 
84 +       cpu_tasks[task->cpu] = ((struct cpu_task) 
85                 { external_pid(task), task });
86  }
87  
88 @@ -360,7 +360,7 @@
89  int smp_sigio_handler(void)
90  {
91  #ifdef CONFIG_SMP
92 -       int cpu = current->processor;
93 +       int cpu = current->cpu;
94  
95         IPI_handler(cpu);
96         if(cpu != 0)
97 @@ -374,9 +374,9 @@
98         return(in_interrupt());
99  }
100  
101 -int cpu(void)
102 +int um_cpu(void)
103  {
104 -        return(current->processor);
105 +        return(current->cpu);
106  }
107  
108  /*
109 --- linux-2.4.20/arch/um/kernel/reboot.c~       Sun Mar 16 01:41:54 2003
110 +++ linux-2.4.20/arch/um/kernel/reboot.c        Sun Mar 16 03:05:25 2003
111 @@ -14,15 +14,9 @@
112  #ifdef CONFIG_SMP
113  static void kill_idlers(int me)
114  {
115 -       struct task_struct *p;
116 -       int i;
117 -
118 -       for(i = 0; i < sizeof(init_tasks)/sizeof(init_tasks[0]); i++){
119 -               p = init_tasks[i];
120 -               if((p != NULL) && (p->thread.mode.tt.extern_pid != me) &&
121 -                  (p->thread.mode.tt.extern_pid != -1))
122 -                       os_kill_process(p->thread.mode.tt.extern_pid, 0);
123 -       }
124 +       if((init_task.thread.mode.tt.extern_pid != me) &&
125 +          (init_task.thread.mode.tt.extern_pid != -1))
126 +               os_kill_process(init_task.thread.mode.tt.extern_pid, 0);
127  }
128  #endif
129  
130 diff -urN linux-2.4.20-uml/arch/um/kernel/skas/process_kern.c linux-2.4.20-uml-o1/arch/um/kernel/skas/process_kern.c
131 --- linux-2.4.20-uml/arch/um/kernel/skas/process_kern.c Sat Mar 15 18:34:03 2003
132 +++ linux-2.4.20-uml-o1/arch/um/kernel/skas/process_kern.c      Sat Mar 15 20:03:07 2003
133 @@ -47,7 +47,7 @@
134         return(current->thread.prev_sched);
135  }
136  
137 -extern void schedule_tail(struct task_struct *prev);
138 +asmlinkage void schedule_tail(task_t *prev);
139  
140  void new_thread_handler(int sig)
141  {
142 @@ -60,8 +60,10 @@
143         thread_wait(&current->thread.mode.skas.switch_buf, 
144                     current->thread.mode.skas.fork_buf);
145  
146 +#ifdef CONFIG_SMP
147         if(current->thread.prev_sched != NULL)
148                 schedule_tail(current->thread.prev_sched);
149 +#endif
150         current->thread.prev_sched = NULL;
151  
152         n = run_kernel_thread(fn, arg, &current->thread.exec_buf);
153 @@ -91,8 +93,10 @@
154                     current->thread.mode.skas.fork_buf);
155         
156         force_flush_all();
157 +#ifdef CONFIG_SMP
158         if(current->thread.prev_sched != NULL)
159                 schedule_tail(current->thread.prev_sched);
160 +#endif
161         current->thread.prev_sched = NULL;
162         unblock_signals();
163  
164 @@ -137,7 +137,7 @@
165  
166  void init_idle_skas(void)
167  {
168 -       cpu_tasks[current->processor].pid = os_getpid();
169 +       cpu_tasks[current->cpu].pid = os_getpid();
170  }
171  
172  extern void start_kernel(void);
173 diff -u um/arch/um/kernel/skas/trap_user.c um/arch/um/kernel/skas/trap_user.c
174 --- um/arch/um/kernel/skas/trap_user.c
175 +++ um/arch/um/kernel/skas/trap_user.c
176 @@ -42,7 +42,7 @@
177         struct signal_info *info;
178  
179         if(sig == SIGVTALRM)
180 -               missed_ticks[cpu()]++;
181 +               missed_ticks[um_cpu()]++;
182         regs->skas.is_user = 1;
183         regs->skas.fault_addr = 0;
184         regs->skas.fault_type = 0;
185 --- linux-2.4.20/arch/um/kernel/smp.c~  Sat Mar 15 23:38:50 2003
186 +++ linux-2.4.20/arch/um/kernel/smp.c   Sun Mar 16 01:27:45 2003
187 @@ -30,6 +30,8 @@
188  
189  /* Per CPU bogomips and other parameters */
190  
191 +unsigned long cache_decay_ticks = HZ/100;
192 +
193  /* The only piece used here is the ipi pipe, which is set before SMP is
194   * started and never changed.
195   */
196 @@ -97,7 +97,7 @@
197   
198         printk(KERN_INFO "Stopping all CPUs...");
199         for(i = 0; i < ncpus; i++){
200 -               if(i == current->processor)
201 +               if(i == current->cpu)
202                         continue;
203                 write(cpu_data[i].ipi_pipe[1], "S", 1);
204         }
205 @@ -121,10 +121,9 @@
206         int cpu, err;
207  
208         set_current(current);
209 -       del_from_runqueue(current);
210         unhash_process(current);
211  
212 -       cpu = current->processor;
213 +       cpu = current->cpu;
214         err = os_pipe(cpu_data[cpu].ipi_pipe, 1, 1);
215         if(err)
216                 panic("CPU#%d failed to create IPI pipe, errno = %d", cpu, 
217 @@ -134,8 +134,8 @@
218                      current->thread.mode.tt.extern_pid);
219   
220         wmb();
221 -       if (test_and_set_bit(current->processor, &smp_callin_map)) {
222 -               printk("huh, CPU#%d already present??\n", current->processor);
223 +       if (test_and_set_bit(current->cpu, &smp_callin_map)) {
224 +               printk("huh, CPU#%d already present??\n", current->cpu);
225                 BUG();
226         }
227  
228 @@ -142,7 +142,6 @@
229         while (!atomic_read(&smp_commenced))
230                 cpu_relax();
231  
232 -       init_idle();
233         cpu_idle();
234         return(0);
235  }
236 @@ -161,10 +160,8 @@
237  
238         cpu_tasks[cpu].pid = new_task->thread.mode.tt.extern_pid;
239         cpu_tasks[cpu].task = new_task;
240 -       init_tasks[cpu] = new_task;
241 -       new_task->processor = cpu;
242 +       init_idle(new_task, cpu);
243         new_task->cpus_allowed = 1 << cpu;
244 -       new_task->cpus_runnable = new_task->cpus_allowed;
245         CHOOSE_MODE(write(new_task->thread.mode.tt.switch_pipe[1], &c, 
246                           sizeof(c)),
247                     ({ panic("skas mode doesn't support SMP"); }));
248 @@ -296,7 +296,7 @@
249         info = _info;
250  
251         for (i=0;i<NR_CPUS;i++)
252 -               if (i != current->processor && test_bit(i, &cpu_online_map))
253 +               if (i != current->cpu && test_bit(i, &cpu_online_map))
254                         write(cpu_data[i].ipi_pipe[1], "C", 1);
255  
256         while (atomic_read(&scf_started) != cpus)
257 diff -urN linux-2.4.20-uml/arch/um/kernel/sys_call_table.c linux-2.4.20-uml-o1/arch/um/kernel/sys_call_table.c
258 --- linux-2.4.20-uml/arch/um/kernel/sys_call_table.c    Sat Mar 15 18:34:03 2003
259 +++ linux-2.4.20-uml-o1/arch/um/kernel/sys_call_table.c Sat Mar 15 19:41:51 2003
260 @@ -153,6 +153,7 @@
261  extern syscall_handler_t sys_sched_getparam;
262  extern syscall_handler_t sys_sched_setscheduler;
263  extern syscall_handler_t sys_sched_getscheduler;
264 +extern syscall_handler_t sys_sched_yield;
265  extern syscall_handler_t sys_sched_get_priority_max;
266  extern syscall_handler_t sys_sched_get_priority_min;
267  extern syscall_handler_t sys_sched_rr_get_interval;
268 @@ -261,7 +262,7 @@
269  
270         /* declared differently in kern_util.h */
271         [ __NR_execve ] = (syscall_handler_t *) sys_execve,
272 -       [ __NR_chdir ] = sys_chdir,
273 +       [ __NR_chdir ] = (syscall_handler_t *) sys_chdir,
274         [ __NR_time ] = um_time,
275         [ __NR_mknod ] = sys_mknod,
276         [ __NR_chmod ] = sys_chmod,
277 @@ -306,15 +307,15 @@
278         [ __NR_umount2 ] = sys_umount,
279         [ __NR_lock ] = sys_ni_syscall,
280         [ __NR_ioctl ] = sys_ioctl,
281 -       [ __NR_fcntl ] = sys_fcntl,
282 +       [ __NR_fcntl ] = (syscall_handler_t *) sys_fcntl,
283         [ __NR_mpx ] = sys_ni_syscall,
284         [ __NR_setpgid ] = sys_setpgid,
285         [ __NR_ulimit ] = sys_ni_syscall,
286         [ __NR_oldolduname ] = sys_olduname,
287         [ __NR_umask ] = sys_umask,
288 -       [ __NR_chroot ] = sys_chroot,
289 +       [ __NR_chroot ] = (syscall_handler_t *) sys_chroot,
290         [ __NR_ustat ] = sys_ustat,
291 -       [ __NR_dup2 ] = sys_dup2,
292 +       [ __NR_dup2 ] = (syscall_handler_t *) sys_dup2,
293         [ __NR_getppid ] = sys_getppid,
294         [ __NR_getpgrp ] = sys_getpgrp,
295         [ __NR_setsid ] = (syscall_handler_t *) sys_setsid,
296 --- linux-2.4.20/arch/um/kernel/time_kern.c~    Sat Mar 15 23:38:50 2003
297 +++ linux-2.4.20/arch/um/kernel/time_kern.c     Sun Mar 16 01:20:23 2003
298 @@ -37,7 +37,7 @@
299  
300  void timer_irq(union uml_pt_regs *regs)
301  {
302 -       int cpu = current->processor, ticks = missed_ticks[cpu];
303 +       int cpu = current->cpu, ticks = missed_ticks[cpu];
304  
305          if(!timer_irq_inited) return;
306         missed_ticks[cpu] = 0;
307 @@ -123,7 +123,7 @@
308  #ifdef CONFIG_SMP
309         update_process_times(user_context(UPT_SP(regs)));
310  #endif
311 -       if(current->processor == 0)
312 +       if(current->cpu == 0)
313                 timer_irq(regs);
314  }
315  
316 diff -u um/arch/um/kernel/trap_user.c um/arch/um/kernel/trap_user.c
317 --- um/arch/um/kernel/trap_user.c
318 +++ um/arch/um/kernel/trap_user.c
319 @@ -107,7 +107,7 @@
320  void alarm_handler(int sig, struct sigcontext sc)
321  {
322         if(!timer_irq_inited) return;
323 -       missed_ticks[cpu()]++;
324 +       missed_ticks[um_cpu()]++;
325  
326         if(sig == SIGALRM)
327                 switch_timers(0);
328 --- linux-2.4.20/arch/um/kernel/tt/exec_kern.c~ Sat Mar 15 23:38:50 2003
329 +++ linux-2.4.20/arch/um/kernel/tt/exec_kern.c  Sun Mar 16 01:12:57 2003
330 @@ -46,7 +46,7 @@
331                 do_exit(SIGKILL);
332         }
333  
334 -       if(current->processor == 0)
335 +       if(current->cpu == 0)
336                 forward_interrupts(new_pid);
337         current->thread.request.op = OP_EXEC;
338         current->thread.request.u.exec.pid = new_pid;
339 diff -urN linux-2.4.20-uml/arch/um/kernel/tt/process_kern.c linux-2.4.20-uml-o1/arch/um/kernel/tt/process_kern.c
340 --- linux-2.4.20-uml/arch/um/kernel/tt/process_kern.c   Sat Mar 15 18:34:04 2003
341 +++ linux-2.4.20-uml-o1/arch/um/kernel/tt/process_kern.c        Sat Mar 15 20:06:05 2003
342 @@ -29,10 +29,6 @@
343         unsigned long flags;
344         int err, vtalrm, alrm, prof, cpu;
345         char c;
346 -       /* jailing and SMP are incompatible, so this doesn't need to be 
347 -        * made per-cpu 
348 -        */
349 -       static int reading;
350  
351         from = prev;
352         to = next;
353 @@ -35,7 +35,7 @@
354  
355         to->thread.prev_sched = from;
356  
357 -       cpu = from->processor;
358 +       cpu = from->cpu;
359         if(cpu == 0)
360                 forward_interrupts(to->thread.mode.tt.extern_pid);
361  #ifdef CONFIG_SMP
362 @@ -51,15 +47,15 @@
363         alrm = change_sig(SIGALRM, 0);
364         prof = change_sig(SIGPROF, 0);
365  
366 +       forward_pending_sigio(to->thread.mode.tt.extern_pid);
367 +
368         c = 0;
369         set_current(to);
370  
371 -       reading = 0;
372         err = os_write_file(to->thread.mode.tt.switch_pipe[1], &c, sizeof(c));
373         if(err != sizeof(c))
374                 panic("write of switch_pipe failed, errno = %d", -err);
375  
376 -       reading = 1;
377         if(from->state == TASK_ZOMBIE)
378                 os_kill_process(os_getpid(), 0);
379  
380 @@ -67,24 +63,6 @@
381         if(err != sizeof(c))
382                 panic("read of switch_pipe failed, errno = %d", -err);
383  
384 -       /* This works around a nasty race with 'jail'.  If we are switching
385 -        * between two threads of a threaded app and the incoming process 
386 -        * runs before the outgoing process reaches the read, and it makes
387 -        * it all the way out to userspace, then it will have write-protected 
388 -        * the outgoing process stack.  Then, when the outgoing process 
389 -        * returns from the write, it will segfault because it can no longer
390 -        * write its own stack.  So, in order to avoid that, the incoming 
391 -        * thread sits in a loop yielding until 'reading' is set.  This 
392 -        * isn't entirely safe, since there may be a reschedule from a timer
393 -        * happening between setting 'reading' and sleeping in read.  But,
394 -        * it should get a whole quantum in which to reach the read and sleep,
395 -        * which should be enough.
396 -        */
397 -
398 -       if(jail){
399 -               while(!reading) sched_yield();
400 -       }
401 -
402         change_sig(SIGVTALRM, vtalrm);
403         change_sig(SIGALRM, alrm);
404         change_sig(SIGPROF, prof);
405 @@ -108,7 +86,7 @@
406         close(current->thread.mode.tt.switch_pipe[1]);
407  }
408  
409 -extern void schedule_tail(struct task_struct *prev);
410 +asmlinkage void schedule_tail(task_t *prev);
411  
412  static void new_thread_handler(int sig)
413  {
414 @@ -126,8 +104,10 @@
415         set_cmdline("(kernel thread)");
416         force_flush_all();
417  
418 +#ifdef CONFIG_SMP
419         if(current->thread.prev_sched != NULL)
420                 schedule_tail(current->thread.prev_sched);
421 +#endif
422         current->thread.prev_sched = NULL;
423  
424         change_sig(SIGUSR1, 1);
425 @@ -169,8 +149,10 @@
426                                1, 0, 1);
427         task_protections((unsigned long) current);
428  
429 +#ifdef CONFIG_SMP
430         if(current->thread.prev_sched != NULL)
431                 schedule_tail(current->thread.prev_sched);
432 +#endif
433         current->thread.prev_sched = NULL;
434  
435         free_page(current->thread.temp_stack);
436 @@ -281,7 +281,7 @@
437                 pid = thread->request.u.exec.pid;
438                 do_exec(thread->mode.tt.extern_pid, pid);
439                 thread->mode.tt.extern_pid = pid;
440 -               cpu_tasks[task->processor].pid = pid;
441 +               cpu_tasks[task->cpu].pid = pid;
442                 break;
443         case OP_FORK:
444                 attach_process(thread->request.u.fork.pid);
445 diff -urN linux-2.4.20-uml/include/asm-um/cache.h linux-2.4.20-uml-o1/include/asm-um/cache.h
446 --- linux-2.4.20-uml/include/asm-um/cache.h     Sat Mar 15 18:34:04 2003
447 +++ linux-2.4.20-uml-o1/include/asm-um/cache.h  Sat Mar 15 20:23:30 2003
448 @@ -1,6 +1,7 @@
449  #ifndef __UM_CACHE_H
450  #define __UM_CACHE_H
451  
452 -#define        L1_CACHE_BYTES  32
453 +#define L1_CACHE_SHIFT  (5)
454 +#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
455  
456  #endif
457 diff -urN linux-2.4.20-uml/include/asm-um/fixmap.h linux-2.4.20-uml-o1/include/asm-um/fixmap.h
458 --- linux-2.4.20-uml/include/asm-um/fixmap.h    Sat Mar 15 18:34:04 2003
459 +++ linux-2.4.20-uml-o1/include/asm-um/fixmap.h Sat Mar 15 20:44:39 2003
460 @@ -2,7 +2,9 @@
461  #define __UM_FIXMAP_H
462  
463  #include <linux/config.h>
464 +#ifdef CONFIG_HIGHMEM
465  #include <asm/kmap_types.h>
466 +#endif
467  
468  /*
469   * Here we define all the compile-time 'special' virtual
470 diff -urN linux-2.4.20-uml/include/asm-um/page.h linux-2.4.20-uml-o1/include/asm-um/page.h
471 --- linux-2.4.20-uml/include/asm-um/page.h      Sat Mar 15 18:34:04 2003
472 +++ linux-2.4.20-uml-o1/include/asm-um/page.h   Sat Mar 15 19:47:48 2003
473 @@ -50,4 +50,7 @@
474  extern struct page *arch_validate(struct page *page, int mask, int order);
475  #define HAVE_ARCH_VALIDATE
476  
477 +#define VM_DATA_DEFAULT_FLAGS  (VM_READ | VM_WRITE | VM_EXEC | \
478 +                                VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
479 +
480  #endif
481 diff -urN linux-2.4.20-uml/include/asm-um/smp.h linux-2.4.20-uml-o1/include/asm-um/smp.h
482 --- linux-2.4.20-uml/include/asm-um/smp.h       Sat Mar 15 18:34:04 2003
483 +++ linux-2.4.20-uml-o1/include/asm-um/smp.h    Sat Mar 15 19:50:18 2003
484 @@ -6,7 +6,7 @@
485  #include "linux/config.h"
486  #include "asm/current.h"
487  
488 -#define smp_processor_id() (current->processor)
489 +#define smp_processor_id() (current->cpu)
490  #define cpu_logical_map(n) (n)
491  #define cpu_number_map(n) (n)
492  #define PROC_CHANGE_PENALTY    15 /* Pick a number, any number */
This page took 0.396605 seconds and 3 git commands to generate.