linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
diff for duplicates of <20190520035254.57579-6-minchan@kernel.org>

diff --git a/a/1.txt b/N1/1.txt
index a09f012..8d0b21e 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,191 +1,30 @@
-There is some usecase that centralized userspace daemon want to give
-a memory hint like MADV_[COOL|COLD] to other process. Android's
-ActivityManagerService is one of them.
 
-It's similar in spirit to madvise(MADV_WONTNEED), but the information
-required to make the reclaim decision is not known to the app. Instead,
-it is known to the centralized userspace daemon(ActivityManagerService),
-and that daemon must be able to initiate reclaim on its own without
-any app involvement.
-
-To solve the issue, this patch introduces new syscall process_madvise(2)
-which works based on pidfd so it could give a hint to the exeternal
-process.
-
-int process_madvise(int pidfd, void *addr, size_t length, int advise);
-
-All advises madvise provides can be supported in process_madvise, too.
-Since it could affect other process's address range, only privileged
-process(CAP_SYS_PTRACE) or something else(e.g., being the same UID)
-gives it the right to ptrrace the process could use it successfully.
-
-Please suggest better idea if you have other idea about the permission.
-
-* from v1r1
-  * use ptrace capability - surenb, dancol
-
-Signed-off-by: Minchan Kim <minchan@kernel.org>
----
- arch/x86/entry/syscalls/syscall_32.tbl |  1 +
- arch/x86/entry/syscalls/syscall_64.tbl |  1 +
- include/linux/proc_fs.h                |  1 +
- include/linux/syscalls.h               |  2 ++
- include/uapi/asm-generic/unistd.h      |  2 ++
- kernel/signal.c                        |  2 +-
- kernel/sys_ni.c                        |  1 +
- mm/madvise.c                           | 45 ++++++++++++++++++++++++++
- 8 files changed, 54 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
-index 4cd5f982b1e5..5b9dd55d6b57 100644
---- a/arch/x86/entry/syscalls/syscall_32.tbl
-+++ b/arch/x86/entry/syscalls/syscall_32.tbl
-@@ -438,3 +438,4 @@
- 425	i386	io_uring_setup		sys_io_uring_setup		__ia32_sys_io_uring_setup
- 426	i386	io_uring_enter		sys_io_uring_enter		__ia32_sys_io_uring_enter
- 427	i386	io_uring_register	sys_io_uring_register		__ia32_sys_io_uring_register
-+428	i386	process_madvise		sys_process_madvise		__ia32_sys_process_madvise
-diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
-index 64ca0d06259a..0e5ee78161c9 100644
---- a/arch/x86/entry/syscalls/syscall_64.tbl
-+++ b/arch/x86/entry/syscalls/syscall_64.tbl
-@@ -355,6 +355,7 @@
- 425	common	io_uring_setup		__x64_sys_io_uring_setup
- 426	common	io_uring_enter		__x64_sys_io_uring_enter
- 427	common	io_uring_register	__x64_sys_io_uring_register
-+428	common	process_madvise		__x64_sys_process_madvise
- 
- #
- # x32-specific system call numbers start at 512 to avoid cache impact
-diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
-index 52a283ba0465..f8545d7c5218 100644
---- a/include/linux/proc_fs.h
-+++ b/include/linux/proc_fs.h
-@@ -122,6 +122,7 @@ static inline struct pid *tgid_pidfd_to_pid(const struct file *file)
- 
- #endif /* CONFIG_PROC_FS */
- 
-+extern struct pid *pidfd_to_pid(const struct file *file);
- struct net;
- 
- static inline struct proc_dir_entry *proc_net_mkdir(
-diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
-index e2870fe1be5b..21c6c9a62006 100644
---- a/include/linux/syscalls.h
-+++ b/include/linux/syscalls.h
-@@ -872,6 +872,8 @@ asmlinkage long sys_munlockall(void);
- asmlinkage long sys_mincore(unsigned long start, size_t len,
- 				unsigned char __user * vec);
- asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior);
-+asmlinkage long sys_process_madvise(int pid_fd, unsigned long start,
-+				size_t len, int behavior);
- asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
- 			unsigned long prot, unsigned long pgoff,
- 			unsigned long flags);
-diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
-index dee7292e1df6..7ee82ce04620 100644
---- a/include/uapi/asm-generic/unistd.h
-+++ b/include/uapi/asm-generic/unistd.h
-@@ -832,6 +832,8 @@ __SYSCALL(__NR_io_uring_setup, sys_io_uring_setup)
- __SYSCALL(__NR_io_uring_enter, sys_io_uring_enter)
- #define __NR_io_uring_register 427
- __SYSCALL(__NR_io_uring_register, sys_io_uring_register)
-+#define __NR_process_madvise 428
-+__SYSCALL(__NR_process_madvise, sys_process_madvise)
- 
- #undef __NR_syscalls
- #define __NR_syscalls 428
-diff --git a/kernel/signal.c b/kernel/signal.c
-index 1c86b78a7597..04e75daab1f8 100644
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -3620,7 +3620,7 @@ static int copy_siginfo_from_user_any(kernel_siginfo_t *kinfo, siginfo_t *info)
- 	return copy_siginfo_from_user(kinfo, info);
- }
- 
--static struct pid *pidfd_to_pid(const struct file *file)
-+struct pid *pidfd_to_pid(const struct file *file)
- {
- 	if (file->f_op == &pidfd_fops)
- 		return file->private_data;
-diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
-index 4d9ae5ea6caf..5277421795ab 100644
---- a/kernel/sys_ni.c
-+++ b/kernel/sys_ni.c
-@@ -278,6 +278,7 @@ COND_SYSCALL(mlockall);
- COND_SYSCALL(munlockall);
- COND_SYSCALL(mincore);
- COND_SYSCALL(madvise);
-+COND_SYSCALL(process_madvise);
- COND_SYSCALL(remap_file_pages);
- COND_SYSCALL(mbind);
- COND_SYSCALL_COMPAT(mbind);
-diff --git a/mm/madvise.c b/mm/madvise.c
-index 119e82e1f065..af02aa17e5c1 100644
---- a/mm/madvise.c
-+++ b/mm/madvise.c
-@@ -9,6 +9,7 @@
- #include <linux/mman.h>
- #include <linux/pagemap.h>
- #include <linux/page_idle.h>
-+#include <linux/proc_fs.h>
- #include <linux/syscalls.h>
- #include <linux/mempolicy.h>
- #include <linux/page-isolation.h>
-@@ -16,6 +17,7 @@
- #include <linux/hugetlb.h>
- #include <linux/falloc.h>
- #include <linux/sched.h>
-+#include <linux/sched/mm.h>
- #include <linux/ksm.h>
- #include <linux/fs.h>
- #include <linux/file.h>
-@@ -1140,3 +1142,46 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
- {
- 	return madvise_core(current, start, len_in, behavior);
- }
-+
-+SYSCALL_DEFINE4(process_madvise, int, pidfd, unsigned long, start,
-+		size_t, len_in, int, behavior)
-+{
-+	int ret;
-+	struct fd f;
-+	struct pid *pid;
-+	struct task_struct *tsk;
-+	struct mm_struct *mm;
-+
-+	f = fdget(pidfd);
-+	if (!f.file)
-+		return -EBADF;
-+
-+	pid = pidfd_to_pid(f.file);
-+	if (IS_ERR(pid)) {
-+		ret = PTR_ERR(pid);
-+		goto err;
-+	}
-+
-+	ret = -EINVAL;
-+	rcu_read_lock();
-+	tsk = pid_task(pid, PIDTYPE_PID);
-+	if (!tsk) {
-+		rcu_read_unlock();
-+		goto err;
-+	}
-+	get_task_struct(tsk);
-+	rcu_read_unlock();
-+	mm = mm_access(tsk, PTRACE_MODE_ATTACH_REALCREDS);
-+	if (!mm || IS_ERR(mm)) {
-+		ret = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;
-+		if (ret == -EACCES)
-+			ret = -EPERM;
-+		goto err;
-+	}
-+	ret = madvise_core(tsk, start, len_in, behavior);
-+	mmput(mm);
-+	put_task_struct(tsk);
-+err:
-+	fdput(f);
-+	return ret;
-+}
--- 
-2.21.0.1020.gf2820cf01a-goog
\ No newline at end of file
+On Mon, 20 May 2019 12:52:52 +0900 Minchan Kim wrote:
+> --- a/arch/x86/entry/syscalls/syscall_64.tbl
+> +++ b/arch/x86/entry/syscalls/syscall_64.tbl
+> @@ -355,6 +355,7 @@
+>  425	common	io_uring_setup		__x64_sys_io_uring_setup
+>  426	common	io_uring_enter		__x64_sys_io_uring_enter
+>  427	common	io_uring_register	__x64_sys_io_uring_register
+> +428	common	process_madvise		__x64_sys_process_madvise
+>  
+Much better if something similar is added for arm64.
+
+>  #
+>  # x32-specific system call numbers start at 512 to avoid cache impact
+> --- a/include/uapi/asm-generic/unistd.h
+> +++ b/include/uapi/asm-generic/unistd.h
+> @@ -832,6 +832,8 @@ __SYSCALL(__NR_io_uring_setup, sys_io_uring_setup)
+>  __SYSCALL(__NR_io_uring_enter, sys_io_uring_enter)
+>  #define __NR_io_uring_register 427
+>  __SYSCALL(__NR_io_uring_register, sys_io_uring_register)
+> +#define __NR_process_madvise 428
+> +__SYSCALL(__NR_process_madvise, sys_process_madvise)
+>  
+>  #undef __NR_syscalls
+>  #define __NR_syscalls 428
+
+Seems __NR_syscalls needs to increment by one.
+
+BR
+Hillf
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index 543b7e9..a6764e9 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -2,19 +2,20 @@
   "ref\00020190520035254.57579-1-minchan\@kernel.org\0"
 ]
 [
-  "From\0Minchan Kim <minchan\@kernel.org>\0"
+  "From\0Hillf Danton <hdanton\@sina.com>\0"
 ]
 [
-  "Subject\0[RFC 5/7] mm: introduce external memory hinting API\0"
+  "Subject\0Re: [RFC 5/7] mm: introduce external memory hinting API\0"
 ]
 [
-  "Date\0Mon, 20 May 2019 12:52:52 +0900\0"
+  "Date\0Wed, 29 May 2019 11:41:23 +0800\0"
 ]
 [
-  "To\0Andrew Morton <akpm\@linux-foundation.org>\0"
+  "To\0Minchan Kim <minchan\@kernel.org>\0"
 ]
 [
-  "Cc\0LKML <linux-kernel\@vger.kernel.org>",
+  "Cc\0Andrew Morton <akpm\@linux-foundation.org>",
+  " LKML <linux-kernel\@vger.kernel.org>",
   " linux-mm <linux-mm\@kvack.org>",
   " Michal Hocko <mhocko\@suse.com>",
   " Johannes Weiner <hannes\@cmpxchg.org>",
@@ -24,8 +25,7 @@
   " Daniel Colascione <dancol\@google.com>",
   " Shakeel Butt <shakeelb\@google.com>",
   " Sonny Rao <sonnyrao\@google.com>",
-  " Brian Geffon <bgeffon\@google.com>",
-  " Minchan Kim <minchan\@kernel.org>\0"
+  " Brian Geffon <bgeffon\@google.com>\0"
 ]
 [
   "\0000:1\0"
@@ -34,197 +34,36 @@
   "b\0"
 ]
 [
-  "There is some usecase that centralized userspace daemon want to give\n",
-  "a memory hint like MADV_[COOL|COLD] to other process. Android's\n",
-  "ActivityManagerService is one of them.\n",
   "\n",
-  "It's similar in spirit to madvise(MADV_WONTNEED), but the information\n",
-  "required to make the reclaim decision is not known to the app. Instead,\n",
-  "it is known to the centralized userspace daemon(ActivityManagerService),\n",
-  "and that daemon must be able to initiate reclaim on its own without\n",
-  "any app involvement.\n",
+  "On Mon, 20 May 2019 12:52:52 +0900 Minchan Kim wrote:\n",
+  "> --- a/arch/x86/entry/syscalls/syscall_64.tbl\n",
+  "> +++ b/arch/x86/entry/syscalls/syscall_64.tbl\n",
+  "> \@\@ -355,6 +355,7 \@\@\n",
+  ">  425\tcommon\tio_uring_setup\t\t__x64_sys_io_uring_setup\n",
+  ">  426\tcommon\tio_uring_enter\t\t__x64_sys_io_uring_enter\n",
+  ">  427\tcommon\tio_uring_register\t__x64_sys_io_uring_register\n",
+  "> +428\tcommon\tprocess_madvise\t\t__x64_sys_process_madvise\n",
+  ">  \n",
+  "Much better if something similar is added for arm64.\n",
   "\n",
-  "To solve the issue, this patch introduces new syscall process_madvise(2)\n",
-  "which works based on pidfd so it could give a hint to the exeternal\n",
-  "process.\n",
+  ">  #\n",
+  ">  # x32-specific system call numbers start at 512 to avoid cache impact\n",
+  "> --- a/include/uapi/asm-generic/unistd.h\n",
+  "> +++ b/include/uapi/asm-generic/unistd.h\n",
+  "> \@\@ -832,6 +832,8 \@\@ __SYSCALL(__NR_io_uring_setup, sys_io_uring_setup)\n",
+  ">  __SYSCALL(__NR_io_uring_enter, sys_io_uring_enter)\n",
+  ">  #define __NR_io_uring_register 427\n",
+  ">  __SYSCALL(__NR_io_uring_register, sys_io_uring_register)\n",
+  "> +#define __NR_process_madvise 428\n",
+  "> +__SYSCALL(__NR_process_madvise, sys_process_madvise)\n",
+  ">  \n",
+  ">  #undef __NR_syscalls\n",
+  ">  #define __NR_syscalls 428\n",
   "\n",
-  "int process_madvise(int pidfd, void *addr, size_t length, int advise);\n",
+  "Seems __NR_syscalls needs to increment by one.\n",
   "\n",
-  "All advises madvise provides can be supported in process_madvise, too.\n",
-  "Since it could affect other process's address range, only privileged\n",
-  "process(CAP_SYS_PTRACE) or something else(e.g., being the same UID)\n",
-  "gives it the right to ptrrace the process could use it successfully.\n",
-  "\n",
-  "Please suggest better idea if you have other idea about the permission.\n",
-  "\n",
-  "* from v1r1\n",
-  "  * use ptrace capability - surenb, dancol\n",
-  "\n",
-  "Signed-off-by: Minchan Kim <minchan\@kernel.org>\n",
-  "---\n",
-  " arch/x86/entry/syscalls/syscall_32.tbl |  1 +\n",
-  " arch/x86/entry/syscalls/syscall_64.tbl |  1 +\n",
-  " include/linux/proc_fs.h                |  1 +\n",
-  " include/linux/syscalls.h               |  2 ++\n",
-  " include/uapi/asm-generic/unistd.h      |  2 ++\n",
-  " kernel/signal.c                        |  2 +-\n",
-  " kernel/sys_ni.c                        |  1 +\n",
-  " mm/madvise.c                           | 45 ++++++++++++++++++++++++++\n",
-  " 8 files changed, 54 insertions(+), 1 deletion(-)\n",
-  "\n",
-  "diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl\n",
-  "index 4cd5f982b1e5..5b9dd55d6b57 100644\n",
-  "--- a/arch/x86/entry/syscalls/syscall_32.tbl\n",
-  "+++ b/arch/x86/entry/syscalls/syscall_32.tbl\n",
-  "\@\@ -438,3 +438,4 \@\@\n",
-  " 425\ti386\tio_uring_setup\t\tsys_io_uring_setup\t\t__ia32_sys_io_uring_setup\n",
-  " 426\ti386\tio_uring_enter\t\tsys_io_uring_enter\t\t__ia32_sys_io_uring_enter\n",
-  " 427\ti386\tio_uring_register\tsys_io_uring_register\t\t__ia32_sys_io_uring_register\n",
-  "+428\ti386\tprocess_madvise\t\tsys_process_madvise\t\t__ia32_sys_process_madvise\n",
-  "diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl\n",
-  "index 64ca0d06259a..0e5ee78161c9 100644\n",
-  "--- a/arch/x86/entry/syscalls/syscall_64.tbl\n",
-  "+++ b/arch/x86/entry/syscalls/syscall_64.tbl\n",
-  "\@\@ -355,6 +355,7 \@\@\n",
-  " 425\tcommon\tio_uring_setup\t\t__x64_sys_io_uring_setup\n",
-  " 426\tcommon\tio_uring_enter\t\t__x64_sys_io_uring_enter\n",
-  " 427\tcommon\tio_uring_register\t__x64_sys_io_uring_register\n",
-  "+428\tcommon\tprocess_madvise\t\t__x64_sys_process_madvise\n",
-  " \n",
-  " #\n",
-  " # x32-specific system call numbers start at 512 to avoid cache impact\n",
-  "diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h\n",
-  "index 52a283ba0465..f8545d7c5218 100644\n",
-  "--- a/include/linux/proc_fs.h\n",
-  "+++ b/include/linux/proc_fs.h\n",
-  "\@\@ -122,6 +122,7 \@\@ static inline struct pid *tgid_pidfd_to_pid(const struct file *file)\n",
-  " \n",
-  " #endif /* CONFIG_PROC_FS */\n",
-  " \n",
-  "+extern struct pid *pidfd_to_pid(const struct file *file);\n",
-  " struct net;\n",
-  " \n",
-  " static inline struct proc_dir_entry *proc_net_mkdir(\n",
-  "diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h\n",
-  "index e2870fe1be5b..21c6c9a62006 100644\n",
-  "--- a/include/linux/syscalls.h\n",
-  "+++ b/include/linux/syscalls.h\n",
-  "\@\@ -872,6 +872,8 \@\@ asmlinkage long sys_munlockall(void);\n",
-  " asmlinkage long sys_mincore(unsigned long start, size_t len,\n",
-  " \t\t\t\tunsigned char __user * vec);\n",
-  " asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior);\n",
-  "+asmlinkage long sys_process_madvise(int pid_fd, unsigned long start,\n",
-  "+\t\t\t\tsize_t len, int behavior);\n",
-  " asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,\n",
-  " \t\t\tunsigned long prot, unsigned long pgoff,\n",
-  " \t\t\tunsigned long flags);\n",
-  "diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h\n",
-  "index dee7292e1df6..7ee82ce04620 100644\n",
-  "--- a/include/uapi/asm-generic/unistd.h\n",
-  "+++ b/include/uapi/asm-generic/unistd.h\n",
-  "\@\@ -832,6 +832,8 \@\@ __SYSCALL(__NR_io_uring_setup, sys_io_uring_setup)\n",
-  " __SYSCALL(__NR_io_uring_enter, sys_io_uring_enter)\n",
-  " #define __NR_io_uring_register 427\n",
-  " __SYSCALL(__NR_io_uring_register, sys_io_uring_register)\n",
-  "+#define __NR_process_madvise 428\n",
-  "+__SYSCALL(__NR_process_madvise, sys_process_madvise)\n",
-  " \n",
-  " #undef __NR_syscalls\n",
-  " #define __NR_syscalls 428\n",
-  "diff --git a/kernel/signal.c b/kernel/signal.c\n",
-  "index 1c86b78a7597..04e75daab1f8 100644\n",
-  "--- a/kernel/signal.c\n",
-  "+++ b/kernel/signal.c\n",
-  "\@\@ -3620,7 +3620,7 \@\@ static int copy_siginfo_from_user_any(kernel_siginfo_t *kinfo, siginfo_t *info)\n",
-  " \treturn copy_siginfo_from_user(kinfo, info);\n",
-  " }\n",
-  " \n",
-  "-static struct pid *pidfd_to_pid(const struct file *file)\n",
-  "+struct pid *pidfd_to_pid(const struct file *file)\n",
-  " {\n",
-  " \tif (file->f_op == &pidfd_fops)\n",
-  " \t\treturn file->private_data;\n",
-  "diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c\n",
-  "index 4d9ae5ea6caf..5277421795ab 100644\n",
-  "--- a/kernel/sys_ni.c\n",
-  "+++ b/kernel/sys_ni.c\n",
-  "\@\@ -278,6 +278,7 \@\@ COND_SYSCALL(mlockall);\n",
-  " COND_SYSCALL(munlockall);\n",
-  " COND_SYSCALL(mincore);\n",
-  " COND_SYSCALL(madvise);\n",
-  "+COND_SYSCALL(process_madvise);\n",
-  " COND_SYSCALL(remap_file_pages);\n",
-  " COND_SYSCALL(mbind);\n",
-  " COND_SYSCALL_COMPAT(mbind);\n",
-  "diff --git a/mm/madvise.c b/mm/madvise.c\n",
-  "index 119e82e1f065..af02aa17e5c1 100644\n",
-  "--- a/mm/madvise.c\n",
-  "+++ b/mm/madvise.c\n",
-  "\@\@ -9,6 +9,7 \@\@\n",
-  " #include <linux/mman.h>\n",
-  " #include <linux/pagemap.h>\n",
-  " #include <linux/page_idle.h>\n",
-  "+#include <linux/proc_fs.h>\n",
-  " #include <linux/syscalls.h>\n",
-  " #include <linux/mempolicy.h>\n",
-  " #include <linux/page-isolation.h>\n",
-  "\@\@ -16,6 +17,7 \@\@\n",
-  " #include <linux/hugetlb.h>\n",
-  " #include <linux/falloc.h>\n",
-  " #include <linux/sched.h>\n",
-  "+#include <linux/sched/mm.h>\n",
-  " #include <linux/ksm.h>\n",
-  " #include <linux/fs.h>\n",
-  " #include <linux/file.h>\n",
-  "\@\@ -1140,3 +1142,46 \@\@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)\n",
-  " {\n",
-  " \treturn madvise_core(current, start, len_in, behavior);\n",
-  " }\n",
-  "+\n",
-  "+SYSCALL_DEFINE4(process_madvise, int, pidfd, unsigned long, start,\n",
-  "+\t\tsize_t, len_in, int, behavior)\n",
-  "+{\n",
-  "+\tint ret;\n",
-  "+\tstruct fd f;\n",
-  "+\tstruct pid *pid;\n",
-  "+\tstruct task_struct *tsk;\n",
-  "+\tstruct mm_struct *mm;\n",
-  "+\n",
-  "+\tf = fdget(pidfd);\n",
-  "+\tif (!f.file)\n",
-  "+\t\treturn -EBADF;\n",
-  "+\n",
-  "+\tpid = pidfd_to_pid(f.file);\n",
-  "+\tif (IS_ERR(pid)) {\n",
-  "+\t\tret = PTR_ERR(pid);\n",
-  "+\t\tgoto err;\n",
-  "+\t}\n",
-  "+\n",
-  "+\tret = -EINVAL;\n",
-  "+\trcu_read_lock();\n",
-  "+\ttsk = pid_task(pid, PIDTYPE_PID);\n",
-  "+\tif (!tsk) {\n",
-  "+\t\trcu_read_unlock();\n",
-  "+\t\tgoto err;\n",
-  "+\t}\n",
-  "+\tget_task_struct(tsk);\n",
-  "+\trcu_read_unlock();\n",
-  "+\tmm = mm_access(tsk, PTRACE_MODE_ATTACH_REALCREDS);\n",
-  "+\tif (!mm || IS_ERR(mm)) {\n",
-  "+\t\tret = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;\n",
-  "+\t\tif (ret == -EACCES)\n",
-  "+\t\t\tret = -EPERM;\n",
-  "+\t\tgoto err;\n",
-  "+\t}\n",
-  "+\tret = madvise_core(tsk, start, len_in, behavior);\n",
-  "+\tmmput(mm);\n",
-  "+\tput_task_struct(tsk);\n",
-  "+err:\n",
-  "+\tfdput(f);\n",
-  "+\treturn ret;\n",
-  "+}\n",
-  "-- \n",
-  "2.21.0.1020.gf2820cf01a-goog"
+  "BR\n",
+  "Hillf"
 ]
 
-173a57d141fc539d322b0aeeb4bb72e2ef2eba521a5c1e206a8da733ac4f4494
+e13bdae142ee8c368f9d474aec2045ad6bc24b899450aad5da5abd7cdb7c18f7

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).