Thread (2 messages) 2 messages, 2 authors, 2019-05-16

Re: [PATCH RFC 0/5] mm: process_vm_mmap() -- syscall for duplication a process mapping

From: Jann Horn <jannh@google.com>
Date: 2019-05-16 13:32:35
Also in: linux-mm, lkml

On Wed, May 15, 2019 at 5:11 PM Kirill Tkhai [off-list ref] wrote:
This patchset adds a new syscall, which makes possible
to clone a mapping from a process to another process.
The syscall supplements the functionality provided
by process_vm_writev() and process_vm_readv() syscalls,
and it may be useful in many situation.
[...]
The proposed syscall aims to introduce an interface, which
supplements currently existing process_vm_writev() and
process_vm_readv(), and allows to solve the problem with
anonymous memory transfer. The above example may be rewritten as:

        void *buf;

        buf = mmap(NULL, n * PAGE_SIZE, PROT_READ|PROT_WRITE,
                   MAP_PRIVATE|MAP_ANONYMOUS, ...);
        recv(sock, buf, n * PAGE_SIZE, 0);

        /* Sign of @pid is direction: "from @pid task to current" or vice versa. */
        process_vm_mmap(-pid, buf, n * PAGE_SIZE, remote_addr, PVMMAP_FIXED);
        munmap(buf, n * PAGE_SIZE);
In this specific example, an alternative would be to splice() from the
socket into /proc/$pid/mem, or something like that, right?
proc_mem_operations has no ->splice_read() at the moment, and it'd
need that to be more efficient, but that could be built without
creating new UAPI, right?

But I guess maybe your workload is not that simple? What do you
actually do with the received data between receiving it and shoving it
over into the other process?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help