patch-2.2.16 linux/fs/proc/array.c

Next file: linux/fs/proc/generic.c
Previous file: linux/fs/ntfs/support.c
Back to the patch index
Back to the overall index

diff -urN v2.2.15/linux/fs/proc/array.c linux/fs/proc/array.c
@@ -276,7 +276,8 @@
 		"disk_wblk %u %u %u %u\n"
 		"page %u %u\n"
 #ifdef CONFIG_ARCH_S390
-                "swap %u %u\n",
+                "swap %u %u\n"
+		"intr 1 0",
 #else
 		"swap %u %u\n"
 		"intr %u",
@@ -291,7 +292,8 @@
 		"disk_wblk %u %u %u %u\n"
 		"page %u %u\n"
 #ifdef CONFIG_ARCH_S390           
-                "swap %u %u\n",   
+                "swap %u %u\n"
+		"intr 1 0",   
 #else                             
 		"swap %u %u\n"
 		"intr %u",
@@ -649,6 +651,26 @@
 			fp = rw->ins[6] + bias;
 		} while (++count < 16);
 	}
+#elif defined (__s390__)
+        {
+                unsigned long ksp, backchain, ip;
+                unsigned long stack_page;
+                int count = 0;
+
+                stack_page = (unsigned long)p;
+                ksp = p->tss.ksp;
+                if (!stack_page || ksp < stack_page || ksp >= 8188+stack_page)
+                        return 0;
+                backchain = (*(unsigned long *) ksp) & 0x7fffffff;
+                do {
+                        if (backchain < stack_page || backchain >= 8188+stack_page)
+                                return 0;
+                        ip = (*(unsigned long *) (backchain+56)) & 0x7fffffff;
+                        if (ip < first_sched || ip >= last_sched)
+                                return ip;
+                        backchain = (*(unsigned long *) backchain) & 0x7fffffff;
+                } while (count++ < 16);
+        }
 #endif
 
 	return 0;
@@ -1464,7 +1486,7 @@
 		case PROC_PID_CPU:
 			return 0;	
 	}
-	if ((current->fsuid == euid && ok) || capable(CAP_DAC_OVERRIDE))
+	if(capable(CAP_DAC_OVERRIDE) || (current->fsuid == euid && ok))
 		return 0;
 	return 1;
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)