From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41203C3601A for ; Fri, 4 Apr 2025 02:20:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 84542280010; Thu, 3 Apr 2025 22:20:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7F2E328000B; Thu, 3 Apr 2025 22:20:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 69468280010; Thu, 3 Apr 2025 22:20:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 3FC6128000B for ; Thu, 3 Apr 2025 22:20:01 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id CADA7161BDC for ; Fri, 4 Apr 2025 02:20:02 +0000 (UTC) X-FDA: 83294756244.05.15FD02F Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf10.hostedemail.com (Postfix) with ESMTP id AAC94C0005 for ; Fri, 4 Apr 2025 02:20:00 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b="nVX/7zKw"; spf=pass (imf10.hostedemail.com: domain of anthony.yznaga@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=anthony.yznaga@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743733200; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Bl6JEql6MB9CDGJQFpauhei0hhqynyHJJWlm3XmR/I8=; b=226xaXaXnS9AQJhQvS7SRv62Kau8H+Jrnky7kiuJE7r27jvtvlYU8cIWcj/FvFqa/NfZ/m eMM73N7R21DAgYOkf8oYmT/+8zxMZY6ln/tGwL6eyjesVQkHMMv2R5ECSzBYUIxBBnVZsV PwWD++QEK9BD6KmNcbRJS1OZI8RusU8= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b="nVX/7zKw"; spf=pass (imf10.hostedemail.com: domain of anthony.yznaga@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=anthony.yznaga@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743733200; a=rsa-sha256; cv=none; b=e7kMS1H6/VsVRW0/p9ysBqhvLHrYcYjlhOrAryb5P08VceA8L9D40HI0Zr/2DLUCWMPnxC Qs2rQ/cPkPod2i8XWJo1RCm+wM6h8slpS9Mn43CbvEtoJ1yGgX7GC+WQhoDkj8sQYDKeKC zZyKdpXaPjnTb7n63WjdJXMYc0UKRzE= Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5341N6uL019296; Fri, 4 Apr 2025 02:19:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2023-11-20; bh=Bl6JE ql6MB9CDGJQFpauhei0hhqynyHJJWlm3XmR/I8=; b=nVX/7zKwS3gvI5qsECKtH NDs4jsDPlOmEiOijuVxA7pDbWh0oA9B2JvEmGCr0PVxf8/XX+eB4Pkri3RebMNQa Z74UOgbSpazeIGDFw5Yl8aTiKz2Lb0Akk5JnGojhJ2ZNT9+kjz6Wq1bdZ5jr3z94 YDjCmXcWktK7zefv1mjhACAlIqskyaqbT0M03ydZbNJjoxQRi9nQz9EWBNMJYpeH 39adnsY7ZXuemdSz+ihLqXYWCY8cGte6S7eY68F2eCCdxfNGdnqR0aXrdmLWu7R7 MpXRALsgtYLWZmVKTssUkKVLKkWA8Qm2fulI2+F7oarjKxE6ialYmpq7svcFWdo7 w== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45p8r9ntk8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 04 Apr 2025 02:19:47 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5340Wvcw017307; Fri, 4 Apr 2025 02:19:46 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45t2pspjh4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 04 Apr 2025 02:19:46 +0000 Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 5342H8h8030074; Fri, 4 Apr 2025 02:19:45 GMT Received: from localhost.localdomain (ca-dev60.us.oracle.com [10.129.136.27]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 45t2pspj73-17; Fri, 04 Apr 2025 02:19:45 +0000 From: Anthony Yznaga To: akpm@linux-foundation.org, willy@infradead.org, markhemm@googlemail.com, viro@zeniv.linux.org.uk, david@redhat.com, khalid@kernel.org Cc: anthony.yznaga@oracle.com, andreyknvl@gmail.com, dave.hansen@intel.com, luto@kernel.org, brauner@kernel.org, arnd@arndb.de, ebiederm@xmission.com, catalin.marinas@arm.com, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mhiramat@kernel.org, rostedt@goodmis.org, vasily.averin@linux.dev, xhao@linux.alibaba.com, pcc@google.com, neilb@suse.de, maz@kernel.org Subject: [PATCH v2 16/20] mm/mshare: Add an ioctl for mapping objects in an mshare region Date: Thu, 3 Apr 2025 19:18:58 -0700 Message-ID: <20250404021902.48863-17-anthony.yznaga@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250404021902.48863-1-anthony.yznaga@oracle.com> References: <20250404021902.48863-1-anthony.yznaga@oracle.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-04_01,2025-04-03_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 mlxscore=0 spamscore=0 adultscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504040014 X-Proofpoint-GUID: x4FlRSVJiVrDyZtaVnRO1ABhBBdbOkij X-Proofpoint-ORIG-GUID: x4FlRSVJiVrDyZtaVnRO1ABhBBdbOkij X-Rspamd-Queue-Id: AAC94C0005 X-Rspamd-Server: rspam05 X-Rspam-User: X-Stat-Signature: aeniqkq66jj7ocrwxxdbqa75h3e1f5ga X-HE-Tag: 1743733200-858545 X-HE-Meta: U2FsdGVkX19VXCSBCcc1qZX1GM9InAsVKuMU7/IXDzBStddhSnDxn2cRgsFcV0RlyXzgE5D8XJi9tArIb+YKU0uBDc8khzKf5D9CMSeyXYmq7qQHbtLPDQOxdvM9l3rzxj/FBePSH2EMBOhASYcQ6L1eJiohSyrYIv9pNGIG6Gn6ORbtdsvusK3fPLk5a9Ez/O0xFPXomDv6ReJeqnAyxjjpboQZ0SbGmAiDFc18CXKlhpsFIFdrUeiOBV5Wi8kXTJiJm+H1MEaQ32OhTy9acfG0+7GbL7jwgrr4ZErXabN3oaeKexWy2GUgSSlANXvNP2WI9jinYs+g6UVPThPOUg8t8g6nfIx29L5xR6pFMPv7UfPkx545o8E9i+lDl5RjvrBAr3smxTwTtQFJWKCvNQXv2+L+XYBn1eB5F2vvOKioivjkyDUD/wWAEW9i1JDAi/pJDg7ZoTUVWDT1DJRSjNOA2qHvES748b7n9cyo1fsXAPpMuN7q6V1szPIepbgG+0H3HiWigdSb/Q+o1N/0boPzyOePb+ReYUZdYmhC3k/wlg1nofOAniZ7emgT1X7xiY5QgnO+beWkXwJONkfOPNnPYfR2HdqLZpiW6m70VqpSAWrgB8YPGW+nw3iG+ytVLqpP0z34OzzJ8zMmgnSTDOKelL38TN68WNsRWpFaByppgr/RPD+flVHT3nsReqKSgRcVPzNA0Q1PHtGVoWypl0D0vN/bttpdLsNcdV4lTAvpT4TnjQcmEyebquFNWMB1g7X+x6r6ZoqdH+pqjuZzzAGf2lu3PH9V6XhA3BfuwxE92b1PdYx5+kLz4Iy7RRm5V92TU+PrcEwQKSSQ2BQxlYzLH/yTI3g9oZj/JsXPnYWZBI/qrmZ+tG3JA/nSLWqMLAoegooKFH12f4Aoj1m6ZtVnWwrhhyq7bLrGu90Tr74zCWCeKy7H6tjAQ25a6oPMDRVTvkVLlCc6HrZhiap Z3pPvZTQ XG9I5APayJoIsnRcIV4/fFbebFK2+pQTJSfTDG4+PK5L/Q+/K5SHK3J9a/K+t+AvU7znv+YALgOJsI7Nnq9SagGfeqL/KXxNdgpPPIg2hc6L+xyYADVVxLBgF4n9uokLTpaE5fBtCjh4+BwI3KwandZ8w+Dj+3n5r/BraI5Z62X37XZfNkaIimBsm+Rk35YepwmqgUcCpRbP3kxF3auyeb5Vwb0GKHnMV/h6UTzm38IhNbrq+diag6s96Z2yfsbFkHPmBRLceln9M1hoTSQcV3xIR2NhV6YCU2BxT4MG8BBu1vvzkySGuuDTsk9NeCAy8xYmEKYhYFWHH4HJp6vnSMhxjqY7m8cCr/X2BHo6bp3o2+2o9avPBllh2vbLRqQcoSzXYYXFYUPkXtYONJiRZ6BvQ+DR6yQhms7Qf X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Khalid Aziz Reserve a range of ioctls for msharefs and add an ioctl for mapping objects within an mshare region. The arguments are the same as mmap() except that the start of the mapping is specified as an offset into the mshare region instead of as an address. For now system-selected addresses are disallowed so MAP_FIXED must be specified. Only shared anonymous memory is supported initially. Signed-off-by: Khalid Aziz Signed-off-by: Anthony Yznaga --- .../userspace-api/ioctl/ioctl-number.rst | 1 + include/uapi/linux/msharefs.h | 31 ++++++++ mm/mshare.c | 74 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 include/uapi/linux/msharefs.h diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst index 3d1cd7ad9d67..250dd58ebdba 100644 --- a/Documentation/userspace-api/ioctl/ioctl-number.rst +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst @@ -306,6 +306,7 @@ Code Seq# Include File Comments 'v' 20-27 arch/powerpc/include/uapi/asm/vas-api.h VAS API 'v' C0-FF linux/meye.h conflict! 'w' all CERN SCI driver +'x' 00-1F linux/msharefs.h msharefs filesystem 'y' 00-1F packet based user level communications 'z' 00-3F CAN bus card conflict! diff --git a/include/uapi/linux/msharefs.h b/include/uapi/linux/msharefs.h new file mode 100644 index 000000000000..ad129beeef62 --- /dev/null +++ b/include/uapi/linux/msharefs.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * msharefs defines a memory region that is shared across processes. + * ioctl is used on files created under msharefs to set various + * attributes on these shared memory regions + * + * + * Copyright (C) 2024 Oracle Corp. All rights reserved. + * Author: Khalid Aziz + */ + +#ifndef _UAPI_LINUX_MSHAREFS_H +#define _UAPI_LINUX_MSHAREFS_H + +#include +#include + +/* + * msharefs specific ioctl commands + */ +#define MSHAREFS_CREATE_MAPPING _IOW('x', 0, struct mshare_create) + +struct mshare_create { + __u64 region_offset; + __u64 size; + __u64 offset; + __u32 prot; + __u32 flags; + __u32 fd; +}; +#endif diff --git a/mm/mshare.c b/mm/mshare.c index 4ddaa0d41070..be0aaa894963 100644 --- a/mm/mshare.c +++ b/mm/mshare.c @@ -10,6 +10,7 @@ * * Copyright (C) 2024 Oracle Corp. All rights reserved. * Author: Khalid Aziz + * Author: Matthew Wilcox * */ @@ -18,6 +19,7 @@ #include #include #include +#include #include #include @@ -230,6 +232,77 @@ msharefs_get_unmapped_area(struct file *file, unsigned long addr, pgoff, flags); } +static long +msharefs_create_mapping(struct mshare_data *m_data, struct mshare_create *mcreate) +{ + struct mm_struct *host_mm = m_data->mm; + unsigned long mshare_start, mshare_end; + unsigned long region_offset = mcreate->region_offset; + unsigned long size = mcreate->size; + unsigned int fd = mcreate->fd; + int flags = mcreate->flags; + int prot = mcreate->prot; + unsigned long populate = 0; + unsigned long mapped_addr; + unsigned long addr; + vm_flags_t vm_flags; + int error = -EINVAL; + + mshare_start = m_data->start; + mshare_end = mshare_start + m_data->size; + addr = mshare_start + region_offset; + + if ((addr < mshare_start) || (addr >= mshare_end) || + (addr + size > mshare_end)) + goto out; + + /* + * Only anonymous shared memory at fixed addresses is allowed for now. + */ + if ((flags & (MAP_SHARED | MAP_FIXED)) != (MAP_SHARED | MAP_FIXED)) + goto out; + if (fd != -1) + goto out; + + if (mmap_write_lock_killable(host_mm)) { + error = -EINTR; + goto out; + } + + error = 0; + mapped_addr = __do_mmap(NULL, addr, size, prot, flags, vm_flags, + 0, &populate, NULL, host_mm); + + if (IS_ERR_VALUE(mapped_addr)) + error = (long)mapped_addr; + + mmap_write_unlock(host_mm); +out: + return error; +} + +static long +msharefs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + struct mshare_data *m_data = filp->private_data; + struct mshare_create mcreate; + + switch (cmd) { + case MSHAREFS_CREATE_MAPPING: + if (copy_from_user(&mcreate, (struct mshare_create __user *)arg, + sizeof(mcreate))) + return -EFAULT; + + if (!test_bit(MSHARE_INITIALIZED, &m_data->flags)) + return -EINVAL; + + return msharefs_create_mapping(m_data, &mcreate); + + default: + return -ENOTTY; + } +} + static int msharefs_set_size(struct mshare_data *m_data, unsigned long size) { int error = -EINVAL; @@ -285,6 +358,7 @@ static const struct file_operations msharefs_file_operations = { .open = simple_open, .mmap = msharefs_mmap, .get_unmapped_area = msharefs_get_unmapped_area, + .unlocked_ioctl = msharefs_ioctl, .fallocate = msharefs_fallocate, }; -- 2.43.5