vserver 1.9.3
[linux-2.6.git] / include / linux / vs_cvirt.h
index 07c3e86..616706e 100644 (file)
@@ -21,43 +21,76 @@ static inline struct new_utsname *vx_new_utsname(void)
 /* pid faking stuff */
 
 
-#define vx_map_tgid(v,p) \
-       __vx_map_tgid((v), (p), __FILE__, __LINE__)
+#define vx_info_map_pid(v,p) \
+       __vx_info_map_pid((v), (p), __FUNC__, __FILE__, __LINE__)
+#define vx_map_pid(p)  vx_info_map_pid(current->vx_info, p)
+#define vx_map_tgid(p) vx_map_pid(p)
 
-static inline int __vx_map_tgid(struct vx_info *vxi, int pid,
-       char *file, int line)
+static inline int __vx_info_map_pid(struct vx_info *vxi, int pid,
+       const char *func, const char *file, int line)
 {
-       if (vxi && __vx_flags(vxi->vx_flags, VXF_INFO_INIT, 0)) {
-               vxlprintk(VXD_CBIT(cvirt, 2),
+       if (vx_info_flags(vxi, VXF_INFO_INIT, 0)) {
+               vxfprintk(VXD_CBIT(cvirt, 2),
                        "vx_map_tgid: %p/%llx: %d -> %d",
-                       vxi, vxi->vx_flags, pid,
-                       (pid == vxi->vx_initpid)?1:pid,
-                       file, line);
+                       vxi, (long long)vxi->vx_flags, pid,
+                       (pid && pid == vxi->vx_initpid)?1:pid,
+                       func, file, line);
+               if (pid == 0)
+                       return 0;
                if (pid == vxi->vx_initpid)
                        return 1;
        }
        return pid;
 }
 
-#define vx_rmap_tgid(v,p) \
-       __vx_rmap_tgid((v), (p), __FILE__, __LINE__)
+#define vx_info_rmap_pid(v,p) \
+       __vx_info_rmap_pid((v), (p), __FUNC__, __FILE__, __LINE__)
+#define vx_rmap_pid(p) vx_info_rmap_pid(current->vx_info, p)
+#define vx_rmap_tgid(p) vx_rmap_pid(p)
 
-static inline int __vx_rmap_tgid(struct vx_info *vxi, int pid,
-       char *file, int line)
+static inline int __vx_info_rmap_pid(struct vx_info *vxi, int pid,
+       const char *func, const char *file, int line)
 {
-       if (vxi && __vx_flags(vxi->vx_flags, VXF_INFO_INIT, 0)) {
-               vxlprintk(VXD_CBIT(cvirt, 2),
+       if (vx_info_flags(vxi, VXF_INFO_INIT, 0)) {
+               vxfprintk(VXD_CBIT(cvirt, 2),
                        "vx_rmap_tgid: %p/%llx: %d -> %d",
-                       vxi, vxi->vx_flags, pid,
+                       vxi, (long long)vxi->vx_flags, pid,
                        (pid == 1)?vxi->vx_initpid:pid,
-                       file, line);
+                       func, file, line);
                if ((pid == 1) && vxi->vx_initpid)
                        return vxi->vx_initpid;
+               if (pid == vxi->vx_initpid)
+                       return ~0U;
        }
        return pid;
 }
 
 
+static inline void vx_activate_task(struct task_struct *p)
+{
+       struct vx_info *vxi;
+
+       // if ((vxi = task_get_vx_info(p))) {
+       if ((vxi = p->vx_info)) {
+               vx_update_load(vxi);
+               atomic_inc(&vxi->cvirt.nr_running);
+               // put_vx_info(vxi);
+       }
+}
+
+static inline void vx_deactivate_task(struct task_struct *p)
+{
+       struct vx_info *vxi;
+
+       // if ((vxi = task_get_vx_info(p))) {
+       if ((vxi = p->vx_info)) {
+               vx_update_load(vxi);
+               atomic_dec(&vxi->cvirt.nr_running);
+               // put_vx_info(vxi);
+       }
+}
+
+
 #else
 #warning duplicate inclusion
 #endif