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