]> git.pld-linux.org Git - packages/kernel.git/blame - linux-2.4.20-uml-o1.patch
- added description of djurban's branch
[packages/kernel.git] / linux-2.4.20-uml-o1.patch
CommitLineData
77993d39
JR
1diff -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
b3bed06d
JR
27diff -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 /*
77993d39
JR
39diff -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
50diff -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;
69diff -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
b3bed06d
JR
89diff -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
77993d39
JR
143diff -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
b3bed06d
JR
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);
186diff -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)
77993d39
JR
270diff -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,
b3bed06d
JR
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
329diff -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;
77993d39
JR
352diff -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;
b3bed06d
JR
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
77993d39
JR
375@@ -51,15 +47,15 @@
376 alrm = change_sig(SIGALRM, 0);
377 prof = change_sig(SIGPROF, 0);
378
b3bed06d 379+ forward_pending_sigio(to->thread.mode.tt.extern_pid);
77993d39
JR
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);
b3bed06d
JR
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);
77993d39
JR
458diff -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
470diff -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
483diff -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
494diff -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 0.186443 seconds and 4 git commands to generate.