Resent-Date: Mon, 26 Apr 1999 10:25:03 +0200 (MET DST)
To: linux-m68k@lists.linux-m68k.org
Subject: Linux 2.2.6
X-Yow: Life is selling REVOLUTIONARY HAIR PRODUCTS!
From: Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
Date: 26 Apr 1999 10:24:26 +0200
Resent-From: linux-m68k@phil.uni-sb.de

Hi!

This patch fixes some dirty parts that don't fit into the quality of the
linux kernel source, and brings sys_ptrace up-to-date.

Andreas.

--- linux/arch/m68k/kernel/ints.c.~1~	Sun Apr 25 03:34:39 1999
+++ linux/arch/m68k/kernel/ints.c	Sun Apr 25 10:51:36 1999
@@ -39,8 +39,7 @@
 #include <asm/machdep.h>
 
 #ifdef CONFIG_Q40
-unsigned long q40_probe_irq_on (void);
-int q40_probe_irq_off (unsigned long irqs);
+#include <asm/q40ints.h>
 #endif
 
 /* table for system interrupt handlers */
@@ -188,23 +187,19 @@
 unsigned long probe_irq_on (void)
 {
 #ifdef CONFIG_Q40
-	if MACH_IS_Q40
+	if (MACH_IS_Q40)
 		return q40_probe_irq_on();
 #endif
-#ifndef MACH_Q40_ONLY
 	return 0;
-#endif
 }
 
 int probe_irq_off (unsigned long irqs)
 {
 #ifdef CONFIG_Q40
-	if MACH_IS_Q40
+	if (MACH_IS_Q40)
 		return q40_probe_irq_off(irqs);
 #endif
-#ifndef MACH_Q40_ONLY
 	return 0;
-#endif
 }
 
 static void dummy_enable_irq(unsigned int irq)
--- linux/arch/m68k/kernel/ptrace.c.~1~	Mon Jan 11 18:31:07 1999
+++ linux/arch/m68k/kernel/ptrace.c	Fri Mar 26 21:38:09 1999
@@ -312,6 +312,7 @@
 asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
 {
 	struct task_struct *child;
+	unsigned long flags;
 	int ret;
 
 	lock_kernel();
@@ -343,21 +344,22 @@
 		    (current->uid != child->uid) ||
 	 	    (current->gid != child->egid) ||
 		    (current->gid != child->sgid) ||
+	 	    (!cap_issubset(child->cap_permitted, current->cap_permitted)) ||
 	 	    (current->gid != child->gid)) && !capable(CAP_SYS_PTRACE))
 			goto out;
 		/* the same process cannot be attached many times */
 		if (child->flags & PF_PTRACED)
 			goto out;
 		child->flags |= PF_PTRACED;
-		if (child->p_pptr != current) {
-			unsigned long flags;
 
-			write_lock_irqsave(&tasklist_lock, flags);
+		write_lock_irqsave(&tasklist_lock, flags);
+		if (child->p_pptr != current) {
 			REMOVE_LINKS(child);
 			child->p_pptr = current;
 			SET_LINKS(child);
-			write_unlock_irqrestore(&tasklist_lock, flags);
 		}
+		write_unlock_irqrestore(&tasklist_lock, flags);
+
 		send_sig(SIGSTOP, child, 1);
 		ret = 0;
 		goto out;
@@ -502,7 +504,6 @@
 		}
 
 		case PTRACE_DETACH: { /* detach a process that was attached. */
-			unsigned long flags;
 			long tmp;
 
 			ret = -EIO;
--- linux/arch/m68k/kernel/setup.c.~1~	Sun Apr 25 03:34:40 1999
+++ linux/arch/m68k/kernel/setup.c	Sun Apr 25 10:42:11 1999
@@ -419,7 +419,7 @@
 int rs_init(void)
 {
 #ifdef CONFIG_SERIAL
-  if MACH_IS_Q40
+  if (MACH_IS_Q40)
     return serial_rs_init();
 #endif
 #ifdef M68K_SERIAL  
@@ -429,7 +429,7 @@
 int register_serial(struct serial_struct *p)
 {
 #ifdef CONFIG_SERIAL
-  if MACH_IS_Q40
+  if (MACH_IS_Q40)
     return serial_register_serial(p);
 #endif
 #ifdef M68K_SERIAL
@@ -439,7 +439,7 @@
 void unregister_serial(int i)
 {
 #ifdef CONFIG_SERIAL
-  if MACH_IS_Q40
+  if (MACH_IS_Q40)
     serial_unregister_serial(i);
 #endif
 #ifdef M68K_SERIAL
@@ -449,10 +449,10 @@
 long serial_console_init(long kmem_start, long kmem_end)
 {
 #ifdef CONFIG_SERIAL
-  if MACH_IS_Q40
+  if (MACH_IS_Q40)
     return ser_console_init(kmem_start, kmem_end);
 #endif
-#ifdef M68K_SERIAL
+#if defined(M68K_SERIAL) && defined(CONFIG_SERIAL_CONSOLE)
   return m68k_serial_console_init(kmem_start, kmem_end);
 #endif
 }
--- linux/include/asm-m68k/keyboard.h.~1~	Sun Apr 25 03:40:45 1999
+++ linux/include/asm-m68k/keyboard.h	Sun Apr 25 10:50:20 1999
@@ -23,45 +23,49 @@
 static __inline__ int kbd_setkeycode(unsigned int scancode,
 				     unsigned int keycode)
 {
-    if MACH_IS_Q40
+#ifdef CONFIG_Q40
+    if (MACH_IS_Q40)
         return q40kbd_setkeycode(scancode,keycode);
-    else
-        return -EOPNOTSUPP;
+#endif
+    return -EOPNOTSUPP;
 }
 
 static __inline__ int kbd_getkeycode(unsigned int scancode)
 {
-    if MACH_IS_Q40
+#ifdef CONFIG_Q40
+    if (MACH_IS_Q40)
         return q40kbd_getkeycode(scancode);
-    else
-        return scancode > 127 ? -EINVAL : scancode;
+#endif
+    return scancode > 127 ? -EINVAL : scancode;
 }
 
 static __inline__ int kbd_pretranslate(unsigned char scancode, char raw_mode)
 {
-    if MACH_IS_Q40
+#ifdef CONFIG_Q40
+    if (MACH_IS_Q40)
         return q40kbd_pretranslate(scancode,raw_mode);
-    else
-        return 1;
+#endif
+    return 1;
 }
 
 static __inline__ int kbd_translate(unsigned char scancode,
 				    unsigned char *keycode, char raw_mode)
 {
-    if MACH_IS_Q40
+#ifdef CONFIG_Q40
+    if (MACH_IS_Q40)
         return q40kbd_translate(scancode,keycode,raw_mode);
-    else{
-        *keycode = scancode;
-        return 1;
-    }
+#endif
+    *keycode = scancode;
+    return 1;
 }
 
 static __inline__ char kbd_unexpected_up(unsigned char keycode)
 {
-    if MACH_IS_Q40
+#ifdef CONFIG_Q40
+    if (MACH_IS_Q40)
         return q40kbd_unexpected_up(keycode);
-    else
-        return 0200;
+#endif
+    return 0200;
 }
 
 static __inline__ void kbd_leds(unsigned char leds)
--- linux/include/asm-m68k/q40ints.h.~1~	Fri Feb 19 18:17:17 1999
+++ linux/include/asm-m68k/q40ints.h	Sun Apr 25 10:51:20 1999
@@ -24,3 +24,6 @@
 #define IRQ10_MASK       (1<<5)
 #define IRQ14_MASK       (1<<6)
 #define IRQ15_MASK       (1<<7)
+
+extern unsigned long q40_probe_irq_on (void);
+extern int q40_probe_irq_off (unsigned long irqs);

-- 
Andreas Schwab                                      "And now for something
schwab@issan.cs.uni-dortmund.de                      completely different"
schwab@gnu.org

