linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Serge Hallyn <serue@us.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: Hubertus Franke <frankeh@watson.ibm.com>,
	Cedric Le Goater <clg@fr.ibm.com>,
	Dave Hansen <haveblue@us.ibm.com>,
	Serge E Hallyn <serue@us.ibm.com>
Subject: RFC [patch 31/34] PID Virtualization Implementation of low level virtualization functions
Date: Tue, 17 Jan 2006 08:33:29 -0600	[thread overview]
Message-ID: <20060117143329.386499000@sergelap> (raw)
In-Reply-To: 20060117143258.150807000@sergelap

[-- Attachment #1: G5-virtfunct-impl.patch --]
[-- Type: text/plain, Size: 3906 bytes --]

We finally utilize the pid space implementation to obtain a real virtualizaton
inside the pid/vpid conversion functions. Care has been taken to retain
the fast path (either in global context or in the same pidspace) as inline, 
while the exception case (typically involves checking for container root)
is handled separately.

Signed-off-by: Hubertus Franke <frankeh@watson.ibm.com>
---
 include/linux/sched.h |   49 +++++++++++++++++++++++++++++++++++++++++++------
 kernel/container.c    |   28 ++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+), 6 deletions(-)

Index: linux-2.6.15/include/linux/sched.h
===================================================================
--- linux-2.6.15.orig/include/linux/sched.h	2006-01-17 08:37:08.000000000 -0500
+++ linux-2.6.15/include/linux/sched.h	2006-01-17 08:37:09.000000000 -0500
@@ -870,9 +870,25 @@
  *  pid domain translation functions:
  *	- from kernel to user pid domain
  */
+
+extern pid_t __pid_to_vpid_ctx_excp(pid_t pid, int psid_pid,
+				     const struct task_struct *ctx);
+
 static inline pid_t pid_to_vpid_ctx(pid_t pid, const struct task_struct *ctx)
 {
-	return pid;
+	int psid_pid, psid_ctx;
+
+	if (!ctx->container)
+		return pid;
+
+	psid_ctx = pid_to_pidspace(ctx->__pid);
+	psid_pid = pid_to_pidspace(pid);
+	pid      = pidspace_pid_to_vpid(pid);
+
+	if (likely(psid_ctx == psid_pid))
+		return pid;
+
+	return __pid_to_vpid_ctx_excp(pid, psid_pid, ctx);
 }
 
 static inline pid_t pid_to_vpid(pid_t pid)
@@ -884,9 +900,11 @@
 {
 	int isgrp = (pid < 0) ;
 
-	if (isgrp) pid = -pid;
+	if (isgrp)
+		pid = -pid;
 	pid = pid_to_vpid_ctx(pid, ctx);
-	if (isgrp) pid = -pid;
+	if (isgrp && pid != -1)
+		pid = -pid;
 	return pid;
 }
 
@@ -895,13 +913,32 @@
 	return pgid_to_vpgid_ctx(pid, current);
 }
 
+extern pid_t __vpid_to_pid_excp(pid_t pid);
+
 static inline pid_t vpid_to_pid(pid_t pid)
 {
-	return pid;
+	if (!current->container)
+		return pid;
+
+	if (pid == 1)
+		return current->container->init_pid;
+
+	if (!pid_to_pidspace(pid)) {
+		int psid = pid_to_pidspace(current->__pid);
+		return pidspace_vpid_to_pid(psid, pid);
+	}
+	return __vpid_to_pid_excp(pid);
 }
 
 static inline pid_t vpgid_to_pgid(pid_t pid)
 {
+	int isgrp = (pid < 0) ;
+
+	if (isgrp)
+		pid = -pid;
+	pid = vpid_to_pid(pid);
+	if (isgrp && pid != -1)
+		pid = -pid;
 	return pid;
 }
 
@@ -931,7 +968,7 @@
 static inline pid_t task_vpid_ctx(const struct task_struct *p,
 				   const struct task_struct *ctx)
 {
-	return task_pid(p);
+	return pid_to_vpid_ctx(task_pid(p), ctx);
 }
 
 static inline pid_t task_vpid(const struct task_struct *p)
@@ -963,7 +1000,7 @@
 
 static inline pid_t virt_process_group(const struct task_struct *p)
 {
-	return process_group(p);
+	return pid_to_vpid(process_group(p));
 }
 
 static inline unsigned int task_pidspace_id(const struct task_struct *p)
Index: linux-2.6.15/kernel/container.c
===================================================================
--- linux-2.6.15.orig/kernel/container.c	2006-01-17 08:37:08.000000000 -0500
+++ linux-2.6.15/kernel/container.c	2006-01-17 08:37:09.000000000 -0500
@@ -138,3 +138,31 @@
 	return rc;
 }
 
+pid_t __pid_to_vpid_ctx_excp(pid_t pid, int pidspace_id,
+			     const struct task_struct *ctx)
+{
+	/* figure out whether pid .. virtual to pidspace_id_pid space
+	 * is meaningful to ctx (which is in differnt pidspace_id).
+	 * since a container's init_proc resides physically in psdi=0
+	 */
+	if (unlikely(ctx == ctx->container->init_proc)) {
+		if (pidspace_id != ctx->container->pidspace_id)
+			pid = -1;
+		return pid;
+	}
+	if (pid == ctx->container->init_pid)
+		return 1;
+	return -1;
+}
+
+pid_t __vpid_to_pid_excp(pid_t pid)
+{
+	/* we only let realpid pass as vpid if it marks the top of
+	 * current is the init_proc and vpid == init_pid
+	 */
+	if (current->container->pidspace_id == pid_to_pidspace(pid))
+		return pid;
+	return -1;
+}
+
+

--


  parent reply	other threads:[~2006-01-17 15:00 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-17 14:32 RFC [patch 00/34] PID Virtualization Overview Serge Hallyn
2006-01-17 14:32 ` RFC [patch 01/34] PID Virtualization Change pid accesses: drivers Serge Hallyn
2006-01-17 14:33 ` RFC [patch 02/34] PID Virtualization Change pid accesses: most archs Serge Hallyn
2006-01-17 14:33 ` RFC [patch 03/34] PID Virtualization Change pid accesses: filesystems Serge Hallyn
2006-01-17 14:33 ` RFC [patch 04/34] PID Virtualization Change pid accesses: include/ Serge Hallyn
2006-01-17 14:33 ` RFC [patch 05/34] PID Virtualization Change pid accesses: ipc Serge Hallyn
2006-01-17 14:33 ` RFC [patch 06/34] PID Virtualization Change pid accesses: kernel/ Serge Hallyn
2006-01-17 14:33 ` RFC [patch 07/34] PID Virtualization Change pid accesses: lib/ Serge Hallyn
2006-01-17 14:33 ` RFC [patch 08/34] PID Virtualization Change pid accesses: mm/ Serge Hallyn
2006-01-17 14:33 ` RFC [patch 09/34] PID Virtualization Change pid accesses: net/ Serge Hallyn
2006-01-17 14:33 ` RFC [patch 10/34] PID Virtualization Change pid accesses: security/ Serge Hallyn
2006-01-17 14:33 ` RFC [patch 11/34] PID Virtualization Change pid accesses: sound/ Serge Hallyn
2006-01-17 14:33 ` RFC [patch 12/34] PID Virtualization Change pid accesses: ia64 and mips Serge Hallyn
2006-01-17 14:33 ` RFC [patch 13/34] PID Virtualization Define new task_pid api Serge Hallyn
2006-01-17 15:32   ` Arjan van de Ven
2006-01-17 15:56     ` Serge E. Hallyn
2006-01-17 16:02       ` Arjan van de Ven
2006-01-17 16:03       ` Alan Cox
2006-01-17 17:16         ` Kyle Moffett
2006-01-17 17:25         ` Dave Hansen
2006-01-18  4:54           ` Greg KH
2006-01-18  4:55           ` Greg KH
2006-01-18 16:23             ` Dave Hansen
2006-01-20 17:00               ` Eric W. Biederman
2006-01-20 20:18                 ` Hubertus Franke
2006-01-21 10:25                   ` Eric W. Biederman
2006-01-23 18:38                     ` Hubertus Franke
2006-01-23 18:48                       ` Eric W. Biederman
2006-01-21 14:42                   ` Eric W. Biederman
2006-01-22  6:43                     ` Kyle Moffett
2006-01-22 15:48                       ` Eric W. Biederman
2006-01-22 15:55                         ` Arjan van de Ven
2006-01-22 16:24                           ` Eric W. Biederman
2006-01-26 20:01                             ` Herbert Poetzl
2006-01-27  9:04                               ` Eric W. Biederman
2006-01-27 12:27                                 ` Kyle Moffett
2006-01-27 13:15                                   ` Eric W. Biederman
2006-01-23 18:50                     ` Hubertus Franke
2006-01-23 19:28                       ` Eric W. Biederman
2006-01-23 21:11                         ` Alan Cox
2006-01-23 21:30                           ` Eric W. Biederman
2006-01-23 22:15                             ` Hubertus Franke
2006-01-24  6:56                               ` Arjan van de Ven
2006-01-24 19:34                               ` Eric W. Biederman
2006-01-24 21:09                                 ` Hubertus Franke
2006-01-24  0:22                             ` Alan Cox
2006-01-24 19:26                               ` Eric W. Biederman
2006-01-24 21:11                                 ` Alan Cox
2006-01-24 21:15                                   ` Arjan van de Ven
2006-01-25  9:58                                     ` Eric W. Biederman
2006-01-25 15:10                                       ` Trond Myklebust
2006-01-25 18:01                                         ` Eric W. Biederman
2006-01-25 19:30                                           ` Trond Myklebust
2006-01-25 21:59                                             ` Eric W. Biederman
2006-01-25  9:13                                   ` Eric W. Biederman
2006-01-25  9:51                                   ` Eric W. Biederman
2006-01-26 20:23                                     ` Herbert Poetzl
2006-01-27  8:28                                       ` Eric W. Biederman
     [not found]                       ` <m1k6cqlmfe.fsf_-_@ebiederm.dsl.xmission.com>
2006-01-23 21:57                         ` RFC: [PATCH] pids as weak references Dave Hansen
2006-01-31 21:02                   ` RFC [patch 13/34] PID Virtualization Define new task_pid api Linus Torvalds
2006-02-01  0:01                     ` Hubertus Franke
2006-02-01  4:18                     ` Eric W. Biederman
2006-02-01  4:39                       ` Linus Torvalds
2006-02-01  7:14                         ` Eric W. Biederman
2006-02-01 16:41                         ` Dave Hansen
2006-02-02  5:14                         ` Herbert Poetzl
2006-02-01 16:29                       ` Greg
2006-02-01 16:44                         ` Eric W. Biederman
2006-02-02 13:50                           ` Greg
2006-02-02 14:09                             ` Eric W. Biederman
2006-02-02 14:48                     ` Kirill Korotaev
2006-02-02 15:13                       ` Eric W. Biederman
2006-02-02 15:26                         ` Kirill Korotaev
2006-02-02 15:51                           ` Eric W. Biederman
2006-02-02 16:05                             ` Kirill Korotaev
2006-02-02 16:27                               ` Eric W. Biederman
2006-02-02 21:32                                 ` Cedric Le Goater
2006-02-02 21:43                                   ` Hubertus Franke
2006-02-02 21:46                                   ` Eric W. Biederman
2006-02-03 10:07                                     ` Kirill Korotaev
2006-02-03 10:52                                 ` Kirill Korotaev
2006-02-03 11:09                                   ` Eric W. Biederman
2006-02-03 15:45                                   ` Dave Hansen
2006-02-03 16:35                                     ` Kirill Korotaev
2006-02-02 21:10                             ` Cedric Le Goater
2006-02-02 21:24                               ` Eric W. Biederman
2006-02-06 20:15                         ` Pavel Machek
2006-02-06 20:34                           ` Eric W. Biederman
2006-02-06 20:36                           ` Kirill Korotaev
2006-02-06 20:40                             ` Eric W. Biederman
2006-02-02 14:49           ` Kirill Korotaev
2006-01-17 14:33 ` RFC [patch 14/34] PID Virtualization const parameter for process group Serge Hallyn
2006-01-17 14:33 ` RFC [patch 15/34] PID Virtualization task virtual pid access functions Serge Hallyn
2006-01-17 14:33 ` RFC [patch 16/34] PID Virtualization return virtual pids where required Serge Hallyn
2006-01-17 14:33 ` RFC [patch 17/34] PID Virtualization return virtual process group ids Serge Hallyn
2006-01-17 14:33 ` RFC [patch 18/34] PID Virtualization code enhancements for virtual pids in /proc Serge Hallyn
2006-01-17 14:33 ` RFC [patch 19/34] PID Virtualization Define pid_to_vpid functions Serge Hallyn
2006-01-17 14:33 ` RFC [patch 20/34] PID Virtualization Use pid_to_vpid conversion functions Serge Hallyn
2006-01-17 14:33 ` RFC [patch 21/34] PID Virtualization file owner pid virtualization Serge Hallyn
2006-01-17 14:33 ` RFC [patch 22/34] PID Virtualization define vpid_to_pid functions Serge Hallyn
2006-01-17 14:33 ` RFC [patch 23/34] PID Virtualization Use " Serge Hallyn
2006-01-17 14:33 ` RFC [patch 24/34] PID Virtualization use vpgid_to_pgid function Serge Hallyn
2006-01-17 14:33 ` RFC [patch 25/34] PID Virtualization Context for pid_to_vpid conversition functions Serge Hallyn
2006-01-17 14:33 ` RFC [patch 26/34] PID Virtualization Documentation Serge Hallyn
2006-01-17 14:33 ` RFC [patch 27/34] PID Virtualization pidspace Serge Hallyn
2006-01-17 14:33 ` RFC [patch 28/34] PID Virtualization container object and functions Serge Hallyn
2006-01-17 14:33 ` RFC [patch 29/34] PID Virtualization container attach/detach calls Serge Hallyn
2006-01-17 14:33 ` RFC [patch 30/34] PID Virtualization /proc/container filesystem Serge Hallyn
2006-01-17 14:33 ` Serge Hallyn [this message]
2006-01-17 14:33 ` RFC [patch 32/34] PID Virtualization Handle special case vpid return cases Serge Hallyn
2006-01-17 14:33 ` RFC [patch 33/34] PID Virtualization per container /proc filesystem Serge Hallyn
2006-01-17 14:33 ` RFC [patch 34/34] PID Virtualization pidspace parent : signal behavior Serge Hallyn
2006-01-17 16:19 ` RFC [patch 00/34] PID Virtualization Overview Suleiman Souhlal
2006-01-17 17:08   ` Dave Hansen
2006-01-17 18:09     ` Suleiman Souhlal
2006-01-17 18:12       ` Dave Hansen
2006-01-17 18:29         ` Alan Cox
2006-01-18 19:01           ` Dave Hansen
2006-01-18 19:28             ` Arjan van de Ven
2006-01-18 19:38               ` Dave Hansen
2006-01-18 19:50                 ` Arjan van de Ven
2006-01-18 22:54                 ` Alan Cox
2006-01-19  7:15                   ` Arjan van de Ven
2006-01-20  5:11                     ` Eric W. Biederman
2006-01-20 20:23                       ` Serge E. Hallyn
2006-01-20 20:33                         ` Hubertus Franke
2006-01-21 10:34                           ` Eric W. Biederman
2006-01-20 19:53                   ` RFC: Multiple instances of kernel namespaces Eric W. Biederman
2006-01-20 20:13                     ` Serge E. Hallyn
2006-01-20 20:22                       ` Hubertus Franke
     [not found]                         ` <20060120203555.GC13265@sergelap.austin.ibm.com>
2006-01-20 21:47                           ` Hubertus Franke
2006-01-21 10:04                       ` Eric W. Biederman
2006-01-26 19:47                         ` Herbert Poetzl
2006-01-26 20:13                           ` Eric W. Biederman
2006-01-26 20:27                             ` Herbert Poetzl
2006-01-21 10:31             ` RFC [patch 00/34] PID Virtualization Overview Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060117143329.386499000@sergelap \
    --to=serue@us.ibm.com \
    --cc=clg@fr.ibm.com \
    --cc=frankeh@watson.ibm.com \
    --cc=haveblue@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).