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 133FBC5B552 for ; Fri, 30 May 2025 09:30:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A94176B0092; Fri, 30 May 2025 05:30:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A6BCC6B009F; Fri, 30 May 2025 05:30:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 95BB36B00A0; Fri, 30 May 2025 05:30:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 73B486B0092 for ; Fri, 30 May 2025 05:30:01 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 1EF6C82B60 for ; Fri, 30 May 2025 09:30:01 +0000 (UTC) X-FDA: 83499052602.05.E1AA978 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) by imf22.hostedemail.com (Postfix) with ESMTP id 400A5C000A for ; Fri, 30 May 2025 09:29:59 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=iY50wsoY; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf22.hostedemail.com: domain of libo.gcs85@bytedance.com designates 209.85.216.45 as permitted sender) smtp.mailfrom=libo.gcs85@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1748597399; 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=rxNHqqJshuS1h1cgjJgJ0ZrC1Xqsxa5tk/BB5ji3hvs=; b=WWmMFfAlDDW0Uv1Q0pENJE6eOUU5csJPk0g82vT90ANZNCSx2Rf3sF0UjRTThKqX23UjkU JdaHchle+D0Fl9EgUdom8REGFXay+MMnfpLBAqD28g2MuL4pmg1MHstM2lZFSnQKumFe87 2R27PmMWFFfvG/jamceiAERR2yM7QTA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1748597399; a=rsa-sha256; cv=none; b=abl8X1ThJ7c4wRzZi5yUBE9EgNHxt4/kSnVzetIK5/Wtk4yH9poG7c96BxE0hwQWJVc0NK 2sfXYoApGa40nKZChcIUNlCSB1I64Wk2lR2R4OAyDH3Vkyc7jMoLjSJSwrqhp6Hc3gIpYt InN/gH/I/IpSlAONuuqhvCFzpNzlZ2s= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=iY50wsoY; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf22.hostedemail.com: domain of libo.gcs85@bytedance.com designates 209.85.216.45 as permitted sender) smtp.mailfrom=libo.gcs85@bytedance.com Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-3122368d7c4so1174764a91.1 for ; Fri, 30 May 2025 02:29:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1748597398; x=1749202198; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rxNHqqJshuS1h1cgjJgJ0ZrC1Xqsxa5tk/BB5ji3hvs=; b=iY50wsoYdW5ibZ18hUxFHDDAIFdJmC6zoG4qLH3urYwQwGJBvTagkWLMx9rd0U3zLh cvKA0D7oxxYoxOj4Gs0pGSmPe7ohZ3UdnXDRCvCWXPySIeV1Wcsttv0Bu8lizJhH/zgR Bp6ynhtoRmwJ68l2dCzq2g1cgvPO5g28Ke9t50jkcBHzNyK5kNqP7LUP+C9aopgGzeWD swZVMkLEvksQt/7ADxYru/SFOhzIrFCG0lpyGH5DFat40UkQQn/ElqYbWX8Yk0uNQi/N rZrz+bzj3TtkSnZatYe16CsHN4hZtEGaX3X8SNUSthSe0OpDisF7hO1PTb6YTWroOriS AdYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748597398; x=1749202198; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rxNHqqJshuS1h1cgjJgJ0ZrC1Xqsxa5tk/BB5ji3hvs=; b=ImUeG/FevnH/NJisVkwVGSLpuLj2i3z+bbsVS1HcJgmeWuXgZHO+2pdw9vQKErPRlA h1ksslT91/rkq6ph/Q6Xs4KQyWJMyddRv4kS79PPtdogQFAcvLXKPNYEaE9PSBxhV31m wyJ6Fm5rs3UVS2v8uo2fUI1Q7WCKRXSpV+NoNLAFz/v/iqfLEbjWDxER7EZiwv+h2SqY +aR9eOR/ddYdUWgL/9vgf4GI/eNA4FkrzP8F3mYUyDbl/t8rH0oSVgfBMOr36IeGil2T wxliJxtiDOsn4bzLjUkz8DAizK5yU3k5A8iS+IGQMD73n56ydHtuD3vyvY4SodAZHDYx H0PA== X-Forwarded-Encrypted: i=1; AJvYcCWSOW4h6QUKY4SSlPlyK9gssTH7B3PPOSxSHOcNLsuioLUdXgzp40tWMIDXMDC45fqN3kOB+qG+eg==@kvack.org X-Gm-Message-State: AOJu0YztkVPAK5AZc7tQdLJHgKWUbFbx+jKC2nL2gRoHB3G1h9CQlwM3 vLxUnOOjJGFvjCFxlzbsLhMCwi1ZktWa0MRsHGYWb/NdWUdl2vqqILIqAdDRIZK7Gpk= X-Gm-Gg: ASbGnctCJwB2ZPwZiLW+p3ByNtTEOj6Pp1t9aZ7wSghVH3EgXKyvzBQjve63ZXoA90X kSMvWUREoAynDb6KR3dKydzO6L29iVOf8HSA9JQsyt2fmKkwTcSETWH9+WiBhkV9V/z+mEGeaWP 99vizhItd515GoX2jiRJa9OMgzHOwXFuRlPr7ZGhKt9BDwy/lzMlQAeJqNEOOI57OSMmWMA4qIp J+u25hrMxqOco+Y7GUy5hlsgnqCsx+hPDTAPC9e4MRkw1G/bo4oo9f5gtcifSHXdf5YGU0qr3s/ Zyo4r/be7ciKWTwZzXtNR+j8hUK7zF1jFLED/FoXvho8trJUlR3/Wet7nrQh2BxLXyw4fojtJ4w LbN3GiP57Lw== X-Google-Smtp-Source: AGHT+IGBCG8Y5BoAzUhA//fCiLwTsxIymub8I3vmhNOr1M4fJfMNuuh617dJ5r3jIttsydinbIXPuQ== X-Received: by 2002:a17:90b:39c5:b0:311:b5ac:6f5d with SMTP id 98e67ed59e1d1-31241e975d6mr4419282a91.29.1748597398101; Fri, 30 May 2025 02:29:58 -0700 (PDT) Received: from FQ627FTG20.bytedance.net ([63.216.146.178]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3124e29f7b8sm838724a91.2.2025.05.30.02.29.43 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 30 May 2025 02:29:57 -0700 (PDT) From: Bo Li To: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, luto@kernel.org, kees@kernel.org, akpm@linux-foundation.org, david@redhat.com, juri.lelli@redhat.com, vincent.guittot@linaro.org, peterz@infradead.org Cc: dietmar.eggemann@arm.com, hpa@zytor.com, acme@kernel.org, namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, jannh@google.com, pfalcato@suse.de, riel@surriel.com, harry.yoo@oracle.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, duanxiongchun@bytedance.com, yinhongbo@bytedance.com, dengliang.1214@bytedance.com, xieyongji@bytedance.com, chaiwen.cc@bytedance.com, songmuchun@bytedance.com, yuanzhu@bytedance.com, chengguozhu@bytedance.com, sunjiadong.lff@bytedance.com, Bo Li Subject: [RFC v2 06/35] RPAL: add user interface Date: Fri, 30 May 2025 17:27:34 +0800 Message-Id: X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 400A5C000A X-Stat-Signature: dtoco8brpyf5cstgknpq9rxid3mi8wzc X-Rspam-User: X-HE-Tag: 1748597399-68622 X-HE-Meta: U2FsdGVkX1/JgMBNr6ZMOtSEPLhr92VVhSwk90gW5KPmlBlbG0U33ZZWNFmT+1qFL5V5OLP4yaOXGr1agjX/KvSeMv2M4+jT0Pgj6fbNDl+hb1smw+NunSuthttKV5o02SGdeEpZ2OANe2NQmAcBt18rQd/derOcqCXg2GrqOPycLqcJRaX6uo6mysnic3689Ad8LHFJUR4XwwGO4Pf8Ogu3Lc4pZTQ8Agwl5vfVO+Caji5lIx8o+kJzMaYEvxb/AD2lFev7MQu/LLWI0cicgIdW6zbAyU0NaPN3SP4v28gpqtocAzE1k3k86QPHzG5RrI+Skg6btji5Ocp9tqxwC/HLahX4iVWbz62p9cipNlEFZDU0zU+gCL/XYtANprPf8wE7LVzXgjnkhFP9nZxc22WOdZiV/VtaGw7TF/v/7Sitk16PxfFeUSOSk7Tv3AgRQBVQd3Pj7zlLfe0vIuFg7VJts+0WTmJpqbft94T2pI+vsutpoHwYrzI2KSVrkoEbpsjD3h+Imymq6IYwExnlxE1b0vfuSkitAh1AdMKYwC6DmgTt8FFugHgbsJoxci6wGR0SPTf8Hivez61lfjtK3AkTotLi6YE2aiZMxhd9gTy/VWrxscq1aKvs1ckmrCUNI4IWBqIcVyOMS/9prKaDIdBmB9QPXq3jASrAaXz0QamHPkzlrfHmO0ZnEeyS7MbA+rA+FoIu0Pj/lxyA1w4K1PyRSLmnhJioTbF5MM5SsnmDatZMoohV31uRHRq81rRwyMbZ4xn9yrFxzbKNEJaJxMsqPmZgz8UG1NxukUJeWHFa5m7ji38Hra00FCI6NS/wBtW104y/VkhktIifBU7UNd7ojD5UZeF1OZIdzLk++/OM1iihbm5w9pxpZW4fpvEDsMmqenlrfdmHH2RFoSO5VP523IltyXnoQaA53wvEa3zamN160HvH5kOXfSZTe/59cf/Iowrnf/ITN1nbwl8 QAAp/Mwl EYV20GMGh9Y+CToOt7wuGYxC/9un/YBNlKZJSeqnoeOUZkHlziEihY+j1FVzfwlRDr52ktCaysp4Qz2mdjksP460C7mIetHpa7XqYOAL31Lz9NGq4dZkdxQefOweZS1krZO5GFYrUwkn4rbcQ0+8b3IzPMMcF4oFABK9U6b6+0QJCNUTlJfotzi2yex2SSDiujm77Dn+r967gES6eQ+2keyHQFviY66CnIEt2r3sCN2XGQt9vNZwJpbFRp353fWGdtEaeqOQMynjDdqWDpuD7kYkHrqoeAZY5MCJxu0qef5YCmXyb3MH2y+SkFL/Rf4uLL6NLCOtbTlm93Gp/96UX8Dyg4CzXkyBMEjm2xf9liV+2HtISHlt2klvW5g== 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: Add the userspace interface of RPAL. The interface makes use of /proc files. Compared with adding syscalls, /proc files provide more interfaces, such as mmap, poll, etc. These interfaces can facilitate RPAL to implement more complex kernel-space/user-space interaction functions in the future. This patch implements the ioctl interface, The interfaces initially implemented include obtaining the RPAL version, and retrieving the key and ID of the RPAL service. Signed-off-by: Bo Li --- arch/x86/rpal/Makefile | 2 +- arch/x86/rpal/core.c | 3 ++ arch/x86/rpal/internal.h | 3 ++ arch/x86/rpal/proc.c | 71 ++++++++++++++++++++++++++++++++++++++++ include/linux/rpal.h | 34 +++++++++++++++++++ 5 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 arch/x86/rpal/proc.c diff --git a/arch/x86/rpal/Makefile b/arch/x86/rpal/Makefile index 2c858a8d7b9e..a5926fc19334 100644 --- a/arch/x86/rpal/Makefile +++ b/arch/x86/rpal/Makefile @@ -2,4 +2,4 @@ obj-$(CONFIG_RPAL) += rpal.o -rpal-y := service.o core.o mm.o +rpal-y := service.o core.o mm.o proc.o diff --git a/arch/x86/rpal/core.c b/arch/x86/rpal/core.c index 495dbc1b1536..61f5d40b0157 100644 --- a/arch/x86/rpal/core.c +++ b/arch/x86/rpal/core.c @@ -13,11 +13,14 @@ int __init rpal_init(void); bool rpal_inited; +unsigned long rpal_cap; int __init rpal_init(void) { int ret = 0; + rpal_cap = 0; + ret = rpal_service_init(); if (ret) goto fail; diff --git a/arch/x86/rpal/internal.h b/arch/x86/rpal/internal.h index e44e6fc79677..c102a4c50515 100644 --- a/arch/x86/rpal/internal.h +++ b/arch/x86/rpal/internal.h @@ -6,6 +6,9 @@ * Author: Jiadong Sun */ +#define RPAL_COMPAT_VERSION 1 +#define RPAL_API_VERSION 1 + extern bool rpal_inited; /* service.c */ diff --git a/arch/x86/rpal/proc.c b/arch/x86/rpal/proc.c new file mode 100644 index 000000000000..1ced30e25c15 --- /dev/null +++ b/arch/x86/rpal/proc.c @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * RPAL service level operations + * Copyright (c) 2025, ByteDance. All rights reserved. + * + * Author: Jiadong Sun + */ + +#include +#include + +#include "internal.h" + +static int rpal_open(struct inode *inode, + struct file *file) +{ + return 0; +} + +static int rpal_get_api_version_and_cap(void __user *p) +{ + struct rpal_version_info rvi; + int ret; + + rvi.compat_version = RPAL_COMPAT_VERSION; + rvi.api_version = RPAL_API_VERSION; + rvi.cap = rpal_cap; + + ret = copy_to_user(p, &rvi, sizeof(rvi)); + if (ret) + return -EFAULT; + + return 0; +} + +static long rpal_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct rpal_service *cur = rpal_current_service(); + int ret = 0; + + if (!cur) + return -EINVAL; + + switch (cmd) { + case RPAL_IOCTL_GET_API_VERSION_AND_CAP: + ret = rpal_get_api_version_and_cap((void __user *)arg); + break; + case RPAL_IOCTL_GET_SERVICE_KEY: + ret = put_user(cur->key, (u64 __user *)arg); + break; + case RPAL_IOCTL_GET_SERVICE_ID: + ret = put_user(cur->id, (int __user *)arg); + break; + default: + return -EINVAL; + } + + return ret; +} + +const struct proc_ops proc_rpal_operations = { + .proc_open = rpal_open, + .proc_ioctl = rpal_ioctl, +}; + +static int __init proc_rpal_init(void) +{ + proc_create("rpal", 0644, NULL, &proc_rpal_operations); + return 0; +} +fs_initcall(proc_rpal_init); diff --git a/include/linux/rpal.h b/include/linux/rpal.h index f7c0de747f55..3bc2a2a44265 100644 --- a/include/linux/rpal.h +++ b/include/linux/rpal.h @@ -77,6 +77,8 @@ #define RPAL_ADDRESS_SPACE_LOW ((0UL) + RPAL_ADDR_SPACE_SIZE) #define RPAL_ADDRESS_SPACE_HIGH ((0UL) + RPAL_NR_ADDR_SPACE * RPAL_ADDR_SPACE_SIZE) +extern unsigned long rpal_cap; + /* * Each RPAL process (a.k.a RPAL service) should have a pointer to * struct rpal_service in all its tasks' task_struct. @@ -118,6 +120,38 @@ struct rpal_service { atomic_t refcnt; }; +/* + * Following structures should have the same memory layout with user. + * It seems nothing being different between kernel and user structure + * padding by different C compilers on x86_64, so we need to do nothing + * special here. + */ +/* Begin */ +struct rpal_version_info { + int compat_version; + int api_version; + unsigned long cap; +}; + +/* End */ + +enum rpal_command_type { + RPAL_CMD_GET_API_VERSION_AND_CAP, + RPAL_CMD_GET_SERVICE_KEY, + RPAL_CMD_GET_SERVICE_ID, + RPAL_NR_CMD, +}; + +/* RPAL ioctl macro */ +#define RPAL_IOCTL_MAGIC 0x33 +#define RPAL_IOCTL_GET_API_VERSION_AND_CAP \ + _IOWR(RPAL_IOCTL_MAGIC, RPAL_CMD_GET_API_VERSION_AND_CAP, \ + struct rpal_version_info *) +#define RPAL_IOCTL_GET_SERVICE_KEY \ + _IOWR(RPAL_IOCTL_MAGIC, RPAL_CMD_GET_SERVICE_KEY, u64 *) +#define RPAL_IOCTL_GET_SERVICE_ID \ + _IOWR(RPAL_IOCTL_MAGIC, RPAL_CMD_GET_SERVICE_ID, int *) + /** * @brief get new reference to a rpal service, a corresponding * rpal_put_service() should be called later by the caller. -- 2.20.1