Author: baggins                      Date: Tue Oct  4 17:51:49 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- fixes for vs2.0.1pre2

---- Files affected:
SOURCES:
   delta-rkill_debug-feat01.diff (NONE -> 1.1)  (NEW), delta-rkill-fix02.diff 
(NONE -> 1.1)  (NEW), delta-ppc-fix01.diff (NONE -> 1.1)  (NEW), 
delta-rkill-fix01.diff (NONE -> 1.1)  (NEW), delta-rkill-feat01.diff (NONE -> 
1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/delta-rkill_debug-feat01.diff
diff -u /dev/null SOURCES/delta-rkill_debug-feat01.diff:1.1
--- /dev/null   Tue Oct  4 19:51:49 2005
+++ SOURCES/delta-rkill_debug-feat01.diff       Tue Oct  4 19:51:44 2005
@@ -0,0 +1,36 @@
+diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/helper.c 
linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/helper.c
+--- linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/helper.c      2005-09-28 
03:10:59 +0200
++++ linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/helper.c       2005-09-28 
03:06:41 +0200
+@@ -105,6 +105,9 @@ long vs_reboot(unsigned int cmd, void * 
+       struct vx_info *vxi = current->vx_info;
+       long ret = 0;
+ 
++      vxdprintk(VXD_CBIT(misc, 5),
++              "vs_reboot(%p[#%d],%d)",
++              vxi, vxi?vxi->vx_id:0, cmd);
+       if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) {
+               switch (cmd) {
+               case LINUX_REBOOT_CMD_RESTART:
+diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/signal.c 
linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/signal.c
+--- linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/signal.c      2005-09-16 
01:19:15 +0200
++++ linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/signal.c       2005-09-28 
03:06:06 +0200
+@@ -26,6 +26,9 @@ int vx_info_kill(struct vx_info *vxi, in
+       unsigned long priv = 0;
+ 
+       retval = -ESRCH;
++      vxdprintk(VXD_CBIT(misc, 4),
++              "vx_info_kill(%p[#%d],%d,%d)*",
++              vxi, vxi->vx_id, pid, sig);
+       read_lock(&tasklist_lock);
+       switch (pid) {
+       case  0:
+@@ -61,6 +64,9 @@ int vx_info_kill(struct vx_info *vxi, in
+               break;
+       }
+       read_unlock(&tasklist_lock);
++      vxdprintk(VXD_CBIT(misc, 4),
++              "vx_info_kill(%p[#%d],%d,%d) = %d",
++              vxi, vxi->vx_id, pid, sig, retval);
+       return retval;
+ }
+ 

================================================================
Index: SOURCES/delta-rkill-fix02.diff
diff -u /dev/null SOURCES/delta-rkill-fix02.diff:1.1
--- /dev/null   Tue Oct  4 19:51:49 2005
+++ SOURCES/delta-rkill-fix02.diff      Tue Oct  4 19:51:44 2005
@@ -0,0 +1,25 @@
+--- ./kernel/vserver/helper.c  2005-09-14 23:08:50 +0200
++++ ./kernel/vserver/helper.c  2005-09-28 02:11:32 +0200
+@@ -103,12 +103,18 @@ long vs_reboot_helper(struct vx_info *vx
+ long vs_reboot(unsigned int cmd, void * arg)
+ {
+       struct vx_info *vxi = current->vx_info;
+-      long ret;
++      long ret = 0;
+ 
+       if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) {
+-              vx_info_kill(vxi, 0, SIGKILL);
+-              vx_info_kill(vxi, 1, SIGKILL);
+-              return 0;
++              switch (cmd) {
++              case LINUX_REBOOT_CMD_RESTART:
++              case LINUX_REBOOT_CMD_HALT:
++              case LINUX_REBOOT_CMD_POWER_OFF:
++                      vx_info_kill(vxi, 0, SIGKILL);
++                      vx_info_kill(vxi, 1, SIGKILL);
++              default:
++                      break;
++              }
+       } else {
+               ret = vs_reboot_helper(vxi, cmd, arg);
+       }

================================================================
Index: SOURCES/delta-ppc-fix01.diff
diff -u /dev/null SOURCES/delta-ppc-fix01.diff:1.1
--- /dev/null   Tue Oct  4 19:51:49 2005
+++ SOURCES/delta-ppc-fix01.diff        Tue Oct  4 19:51:44 2005
@@ -0,0 +1,28 @@
+diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc/kernel/misc.S 
linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc/kernel/misc.S
+--- linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc/kernel/misc.S        2005-09-15 
03:51:33 +0200
++++ linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc/kernel/misc.S        2005-09-29 
16:56:40 +0200
+@@ -1134,8 +1134,8 @@ _GLOBAL(kernel_thread)
+       stw     r31,12(r1)
+       mr      r30,r3          /* function */
+       mr      r31,r4          /* argument */
+-      ori     r3,r5,CLONE_VM|CLONE_KTHREAD    /* flags */
+-      oris    r3,r3,CLONE_UNTRACED>>16
++      ori     r3,r5,CLONE_VM  /* flags */
++      oris    r3,r3,(CLONE_UNTRACED|CLONE_KTHREAD)>>16
+       li      r4,0            /* new sp (unused) */
+       li      r0,__NR_clone
+       sc
+diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc64/kernel/misc.S 
linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc64/kernel/misc.S
+--- linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc64/kernel/misc.S      2005-09-15 
03:48:14 +0200
++++ linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc64/kernel/misc.S      2005-09-29 
16:56:31 +0200
+@@ -658,8 +658,8 @@ _GLOBAL(kernel_thread)
+       stdu    r1,-STACK_FRAME_OVERHEAD(r1)
+       mr      r29,r3
+       mr      r30,r4
+-      ori     r3,r5,(CLONE_VM|CLONE_KTHREAD)  /* flags */
+-      oris    r3,r3,(CLONE_UNTRACED>>16)
++      ori     r3,r5,CLONE_VM  /* flags */
++      oris    r3,r3,(CLONE_UNTRACED|CLONE_KTHREAD)>>16
+       li      r4,0            /* new sp (unused) */
+       li      r0,__NR_clone
+       sc

================================================================
Index: SOURCES/delta-rkill-fix01.diff
diff -u /dev/null SOURCES/delta-rkill-fix01.diff:1.1
--- /dev/null   Tue Oct  4 19:51:49 2005
+++ SOURCES/delta-rkill-fix01.diff      Tue Oct  4 19:51:44 2005
@@ -0,0 +1,25 @@
+--- linux-2.6.13-rc7-vs2.1.0-pre5/kernel/vserver/helper.c      2005-08-26 
04:06:10 +0200
++++ linux-2.6.13.1-vs2.1.0-rc2.1/kernel/vserver/helper.c       2005-09-14 
23:08:50 +0200
+@@ -16,6 +16,7 @@
+ #include <linux/reboot.h>
+ #include <linux/vs_context.h>
+ #include <linux/vs_network.h>
++#include <linux/vserver/signal_cmd.h>
+ 
+ #include <asm/uaccess.h>
+ #include <asm/unistd.h>
+@@ -106,11 +107,12 @@ long vs_reboot(unsigned int cmd, void * 
+ 
+       if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) {
+               vx_info_kill(vxi, 0, SIGKILL);
+-
++              vx_info_kill(vxi, 1, SIGKILL);
++              return 0;
+       } else {
+               ret = vs_reboot_helper(vxi, cmd, arg);
+       }
+-      return ret;
++      return ret;
+ }
+ 
+ 

================================================================
Index: SOURCES/delta-rkill-feat01.diff
diff -u /dev/null SOURCES/delta-rkill-feat01.diff:1.1
--- /dev/null   Tue Oct  4 19:51:49 2005
+++ SOURCES/delta-rkill-feat01.diff     Tue Oct  4 19:51:44 2005
@@ -0,0 +1,189 @@
+--- linux-2.6.13-rc7-vs2.1.0-pre4/include/linux/vserver/context.h      
2005-08-24 20:59:58 +0200
++++ linux-2.6.13-rc7-vs2.1.0-pre5/include/linux/vserver/context.h      
2005-08-26 01:23:45 +0200
+@@ -36,7 +36,8 @@
+ #define VXF_STATE_SETUP               (1ULL<<32)
+ #define VXF_STATE_INIT                (1ULL<<33)
+ 
+-#define VXF_STATE_HELPER      (1ULL<<36)
++#define VXF_SC_HELPER         (1ULL<<36)
++#define VXF_REBOOT_KILL               (1ULL<<37)
+ 
+ #define VXF_FORK_RSS          (1ULL<<48)
+ #define VXF_PROLIFIC          (1ULL<<49)
+only in patch2:
+unchanged:
+--- linux-2.6.13-rc7-vs2.1.0-pre4/include/linux/vserver/network.h      
2005-08-24 20:59:58 +0200
++++ linux-2.6.13-rc7-vs2.1.0-pre5/include/linux/vserver/network.h      
2005-08-26 01:26:23 +0200
+@@ -15,7 +15,7 @@
+ 
+ #define NXF_STATE_SETUP               (1ULL<<32)
+ 
+-#define NXF_STATE_HELPER      (1ULL<<36)
++#define NXF_SC_HELPER         (1ULL<<36)
+ 
+ #define NXF_ONE_TIME          (0x0001ULL<<32)
+ 
+only in patch2:
+unchanged:
+--- linux-2.6.13-rc7-vs2.1.0-pre4/kernel/vserver/helper.c      2005-08-24 
20:59:58 +0200
++++ linux-2.6.13-rc7-vs2.1.0-pre5/kernel/vserver/helper.c      2005-08-26 
04:06:10 +0200
+@@ -52,7 +52,7 @@ int do_vshelper(char *name, char *argv[]
+  *      envp [*] = type-specific parameters
+  */
+ 
+-long vs_reboot(unsigned int cmd, void * arg)
++long vs_reboot_helper(struct vx_info *vxi, int cmd, void *arg)
+ {
+       char id_buf[8], cmd_buf[16];
+       char uid_buf[16], pid_buf[16];
+@@ -63,7 +63,7 @@ long vs_reboot(unsigned int cmd, void * 
+                       "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
+                       uid_buf, pid_buf, cmd_buf, 0};
+ 
+-      snprintf(id_buf, sizeof(id_buf)-1, "%d", vx_current_xid());
++      snprintf(id_buf, sizeof(id_buf)-1, "%d", vxi->vx_id);
+ 
+       snprintf(cmd_buf, sizeof(cmd_buf)-1, "VS_CMD=%08x", cmd);
+       snprintf(uid_buf, sizeof(uid_buf)-1, "VS_UID=%d", current->uid);
+@@ -99,6 +99,21 @@ long vs_reboot(unsigned int cmd, void * 
+ }
+ 
+ 
++long vs_reboot(unsigned int cmd, void * arg)
++{
++      struct vx_info *vxi = current->vx_info;
++      long ret;
++
++      if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) {
++              vx_info_kill(vxi, 0, SIGKILL);
++
++      } else {
++              ret = vs_reboot_helper(vxi, cmd, arg);
++      }
++      return ret;
++}
++
++
+ /*
+  *      argv [0] = vshelper_path;
+  *      argv [1] = action: "startup", "shutdown"
+@@ -114,7 +129,7 @@ long vs_state_change(struct vx_info *vxi
+       char *envp[] = {"HOME=/", "TERM=linux",
+                       "PATH=/sbin:/usr/sbin:/bin:/usr/bin", cmd_buf, 0};
+ 
+-      if (!vx_info_flags(vxi, VXF_STATE_HELPER, 0))
++      if (!vx_info_flags(vxi, VXF_SC_HELPER, 0))
+               return 0;
+ 
+       snprintf(id_buf, sizeof(id_buf)-1, "%d", vxi->vx_id);
+@@ -151,7 +166,7 @@ long vs_net_change(struct nx_info *nxi, 
+       char *envp[] = {"HOME=/", "TERM=linux",
+                       "PATH=/sbin:/usr/sbin:/bin:/usr/bin", cmd_buf, 0};
+ 
+-      if (!nx_info_flags(nxi, NXF_STATE_HELPER, 0))
++      if (!nx_info_flags(nxi, NXF_SC_HELPER, 0))
+               return 0;
+ 
+       snprintf(id_buf, sizeof(id_buf)-1, "%d", nxi->nx_id);
+only in patch2:
+unchanged:
+--- linux-2.6.13-rc7-vs2.1.0-pre4/kernel/vserver/signal.c      2005-08-24 
20:59:58 +0200
++++ linux-2.6.13-rc7-vs2.1.0-pre5/kernel/vserver/signal.c      2005-08-26 
03:28:14 +0200
+@@ -19,37 +19,26 @@
+ #include <linux/vserver/signal_cmd.h>
+ 
+ 
+-int vc_ctx_kill(uint32_t id, void __user *data)
++int vx_info_kill(struct vx_info *vxi, int pid, int sig)
+ {
+       int retval, count=0;
+-      struct vcmd_ctx_kill_v0 vc_data;
+       struct task_struct *p;
+-      struct vx_info *vxi;
+       unsigned long priv = 0;
+ 
+-      if (!vx_check(0, VX_ADMIN))
+-              return -ENOSYS;
+-      if (copy_from_user (&vc_data, data, sizeof(vc_data)))
+-              return -EFAULT;
+-
+-      vxi = locate_vx_info(id);
+-      if (!vxi)
+-              return -ESRCH;
+-
+       retval = -ESRCH;
+       read_lock(&tasklist_lock);
+-      switch (vc_data.pid) {
++      switch (pid) {
+       case  0:
+               priv = 1;
+       case -1:
+               for_each_process(p) {
+                       int err = 0;
+ 
+-                      if (vx_task_xid(p) != id || p->pid <= 1 ||
+-                              (vc_data.pid && vxi->vx_initpid == p->pid))
++                      if (vx_task_xid(p) != vxi->vx_id || p->pid <= 1 ||
++                              (pid && vxi->vx_initpid == p->pid))
+                               continue;
+ 
+-                      err = group_send_sig_info(vc_data.sig, (void*)priv, p);
++                      err = group_send_sig_info(sig, (void*)priv, p);
+                       ++count;
+                       if (err != -EPERM)
+                               retval = err;
+@@ -58,20 +47,39 @@ int vc_ctx_kill(uint32_t id, void __user
+ 
+       case 1:
+               if (vxi->vx_initpid) {
+-                      vc_data.pid = vxi->vx_initpid;
++                      pid = vxi->vx_initpid;
+                       priv = 1;
+               }
+               /* fallthrough */
+       default:
+-              p = find_task_by_real_pid(vc_data.pid);
++              p = find_task_by_real_pid(pid);
+               if (p) {
+-                      if ((id == -1) || (vx_task_xid(p) == id))
+-                              retval = group_send_sig_info(vc_data.sig,
++                      if (vx_task_xid(p) == vxi->vx_id)
++                              retval = group_send_sig_info(sig,
+                                       (void*)priv, p);
+               }
+               break;
+       }
+       read_unlock(&tasklist_lock);
++      return retval;
++}
++
++int vc_ctx_kill(uint32_t id, void __user *data)
++{
++      int retval;
++      struct vcmd_ctx_kill_v0 vc_data;
++      struct vx_info *vxi;
++
++      if (!vx_check(0, VX_ADMIN))
++              return -ENOSYS;
++      if (copy_from_user (&vc_data, data, sizeof(vc_data)))
++              return -EFAULT;
++
++      vxi = locate_vx_info(id);
++      if (!vxi)
++              return -ESRCH;
++
++      retval = vx_info_kill(vxi, vc_data.pid, vc_data.sig);
+       put_vx_info(vxi);
+       return retval;
+ }
+diff -NurpP --minimal linux-2.6.13.2/include/linux/vserver/signal_cmd.h 
linux-2.6.13.2-vs2.0.1-pre2/include/linux/vserver/signal_cmd.h
+--- linux-2.6.13.2/include/linux/vserver/signal_cmd.h  1970-01-01 01:00:00 
+0100
++++ linux-2.6.13.2-vs2.0.1-pre2/include/linux/vserver/signal_cmd.h     
2005-09-26 16:14:25 +0200
+@@ -17,6 +17,7 @@
+ 
+ #ifdef        __KERNEL__
+ 
++extern int vx_info_kill(struct vx_info *vxi, int pid, int sig);
+ extern int vc_ctx_kill(uint32_t, void __user *);
+ extern int vc_wait_exit(uint32_t, void __user *);
+ 
================================================================
_______________________________________________
pld-cvs-commit mailing list
pld-cvs-commit@lists.pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to