From patchwork Thu Oct 10 12:56:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alice Ryhl X-Patchwork-Id: 13830072 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 C77F2CF11EC for ; Thu, 10 Oct 2024 12:57:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 55CB26B0095; Thu, 10 Oct 2024 08:57:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 46DF86B0098; Thu, 10 Oct 2024 08:57:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2CD3B6B0099; Thu, 10 Oct 2024 08:57:18 -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 0B1326B0095 for ; Thu, 10 Oct 2024 08:57:18 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 5A1CF16025F for ; Thu, 10 Oct 2024 12:57:14 +0000 (UTC) X-FDA: 82657693314.07.41020D9 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) by imf25.hostedemail.com (Postfix) with ESMTP id 6646FA0016 for ; Thu, 10 Oct 2024 12:57:15 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=VwD7mPu5; spf=pass (imf25.hostedemail.com: domain of 3K88HZwkKCCgEPMGIVcLPKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--aliceryhl.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=3K88HZwkKCCgEPMGIVcLPKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--aliceryhl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728564965; a=rsa-sha256; cv=none; b=TeJ6WKNEXM0ie+qGqykH6JZkriak+PsC242nhtUgcpvd3HFRqLIqjNmiP1N6wsXH02h9vo V4Jej231QppiSTyLx2AfSkxtACvzW3e3pxEGcwWMgmdqJQrfpqC5IvB76nkLLW/yc4wPkU TpfxUmtEhAnGuLHd7h1/gMOIU5UNS4g= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=VwD7mPu5; spf=pass (imf25.hostedemail.com: domain of 3K88HZwkKCCgEPMGIVcLPKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--aliceryhl.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=3K88HZwkKCCgEPMGIVcLPKSSKPI.GSQPMRYb-QQOZEGO.SVK@flex--aliceryhl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728564965; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=glV3fv5SFFf1x3gt0c73tA5JY4awjp99N5v6GnmrQXY=; b=QHrPYxOTUSchJS8xgL+lHZ/kylQwYtcqhi8enisw1NKxL6BUP6eIiv3P4KQQ+X5qhkf3pe 7WzX/Im4AoiliEfUiLB+j+HrUrjOLAjYafG05qhyzFeFM9kRMibU5p/gJ2zBYwHiTvJB0D Kd9y+R4uBWk2ZWQjg7xY5gKXu+vA5mQ= Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-6e3231725c9so16456777b3.1 for ; Thu, 10 Oct 2024 05:57:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1728565035; x=1729169835; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=glV3fv5SFFf1x3gt0c73tA5JY4awjp99N5v6GnmrQXY=; b=VwD7mPu5IZw0S0RoYQB/R8o1AmrYfGFXV8YuwB1fIaQ5WYz6cuAuWwZU3bT3e1Xiq5 bT79e15o0Cd6A/nauGnDvRb7C7NtAX7/ZZPDzy4jLqromeJiqrZN5holBz59gPsQeuRF pe2PgLSZQ0k4KnvUeUs5Ox2XcHmZZThaDklUqC6yOff1sFSGQkd6IOV5pMAugE/YU+jv sI6PCJoxk8dKw6LKYkDw/v0g+gUTgzP31XFEy2axwbf9ONwxSL2JmUeds+o364UsRhx3 2n1k4odOqfxTYEGkPi0EuCwGtEKjZFs/zKXdveA69ZBo/ZUlA2y9UV6RHyb5ONyAgjgo 4bpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728565035; x=1729169835; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=glV3fv5SFFf1x3gt0c73tA5JY4awjp99N5v6GnmrQXY=; b=liugZn1aBUJeMGrhym0TGO/2JR4I6/K+dbBhtb3lVBVNw0ErMkiErr4pAe3+fHuq1z bbwmKz4xg0cI5mQpOXep5vBVeQIiUlY1qSFJi6/nooVEf2w5jFXcpSlQZ0J4jeS7VX5W /fN7B5dvXtLH2umj1LbmUnvwvp5jkX/k/tbi65sl5SFfrY4625L3N8ePgQsr76ZnWHov NhusQYsDK7qh8rEbnFzJGv5122C1e9j8uZog0St8GsTO0aZneycK57ETePNYUp7y7lnM WAz4WKCAT7jSl76fn+1NpYQvyKUN1gSWRY+EA/pXpBpVYV49otMRryPSgeQRp9/xegiz +qUA== X-Forwarded-Encrypted: i=1; AJvYcCWZ46mcf1cczxg4FdFOaYqJxXIsE3HonPDUhTNGcUH5E7qjKwO2yf+qpjdKuhAIVI0g+rv5UgD3JA==@kvack.org X-Gm-Message-State: AOJu0YxHX5QwK1X5plx3CyrJXcAwi7uiP7/OOyyBAgZ7DRrGohMY/BSc SWQPE1yaAVbiHVBSRlI/+vWXK4F3rn0ZEFT5jXR1lIww6cZvyvKcZYhkXcwKw0WQN7mmU+fusyo Xxip6ckz+zlVaCQ== X-Google-Smtp-Source: AGHT+IFHaXXnl7DU3u8thuin4117bTfSXLLKlSu8pzsSBybwnadUftHI2kg9Z9q4pkU1hrzfZE6VLP9WSb+EI/o= X-Received: from aliceryhl.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:35bd]) (user=aliceryhl job=sendgmr) by 2002:a05:690c:6681:b0:6e2:12e5:356f with SMTP id 00721157ae682-6e32215bd01mr1397177b3.3.1728565035062; Thu, 10 Oct 2024 05:57:15 -0700 (PDT) Date: Thu, 10 Oct 2024 12:56:36 +0000 In-Reply-To: <20241010-vma-v6-0-d89039b6f573@google.com> Mime-Version: 1.0 References: <20241010-vma-v6-0-d89039b6f573@google.com> X-Developer-Key: i=aliceryhl@google.com; a=openpgp; fpr=49F6C1FAA74960F43A5B86A1EE7A392FDE96209F X-Developer-Signature: v=1; a=openpgp-sha256; l=2493; i=aliceryhl@google.com; h=from:subject:message-id; bh=NyWGuEgAoTCOUDUDd9sQnT8nfx0rvhH11rLVW8whQqU=; b=owEBbQKS/ZANAwAKAQRYvu5YxjlGAcsmYgBnB88i1QasOE6/sMcz8AIIZHVv4kJthm+7hFroE Cs46FuoTkuJAjMEAAEKAB0WIQSDkqKUTWQHCvFIvbIEWL7uWMY5RgUCZwfPIgAKCRAEWL7uWMY5 RjpgD/0e+GOn8RpHZKr1Y0np5kF/2v08wVH5Zf/VaSpmrg3HwgpMPqxJ3feyy05Z6oBtzK1hkNN Wv+G/SpeKhnmzLFgNfbMp5kgoYF1NNoQ7A6bZXnv+MNE24RjvXYhZusm8c4ckJ3Me9xMJBUwO9x nK5ClqLjOZajAQiZDQbLfQn58RCc164miHTgRRSSxpBIH0BOszm2qqv9hHhL36aXKd4uh6ldb3q hfwUwOuhe8rOCOXFi1Vwrxv9haulc4c47qernQjLpV4WDiscoo0el4OYFCLb+pFx+C9W1GDJzbt IrvwUBF+Zau7gsoJlGsLKVKh3Y+N+pJ5/JPHe78rcXLObocbLyDRrTQGuM847vPeazglMm3xSk/ 23EVG4PaTO93mWkCYzxceXM7KEpngQg9/sAkTy3UF3w0oCnxoMkgka1kzwpYFqiet6n/oHnv57k q4g1hT0XU9JWAKzWmeonS9vSsB9drqmuMFzPGWt4wbnM8qrI9OFjycdKlvAGzUrBMDitkXW8JEN Hx3VDAfZUaB02JEPa36P7/O4T22ElByztu3XaiWl7ngKqFooX7NMUgtH6Ke/RtbCyFIYD3k9SY0 G/CwzbbswhCVel0TVBbBL4/nzBqcH/FASmIzINtNDhTbaikGPAixxwT1b4Jx0NpNWpSKrrHPuGs OFT+MdwYBY7CHQQ== X-Mailer: b4 0.13.0 Message-ID: <20241010-vma-v6-2-d89039b6f573@google.com> Subject: [PATCH v6 2/2] rust: miscdevice: add mmap support From: Alice Ryhl To: Miguel Ojeda , Matthew Wilcox , Lorenzo Stoakes , Vlastimil Babka , John Hubbard , "Liam R. Howlett" , Andrew Morton , Greg Kroah-Hartman , Arnd Bergmann Cc: Alex Gaynor , Boqun Feng , Gary Guo , " =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= " , Benno Lossin , linux-kernel@vger.kernel.org, linux-mm@kvack.org, rust-for-linux@vger.kernel.org, Alice Ryhl , Andreas Hindborg X-Stat-Signature: b1kj3zaionosziighkbagwrne3rbprp7 X-Rspamd-Queue-Id: 6646FA0016 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1728565035-510408 X-HE-Meta: U2FsdGVkX1/v+zVk5DYodmfSf4zgX4CHIpLJMsJs7l82NSBtXSGsWR5xb0dDbSBh0Ph0VGoPOV5XSlwPSpgwPvJCoufa2V+2ZH4L8zQQsEjh/aKRhzbnPQYQNDboAK2G7nY6EX+ZcI6mW6DTY1lzXLKdhOiUMm60a1tl5oW7ywtT8JS3CwngSFBfaTNgp41p1Oz7BN8z/aL0YDUHmzXcRnDYq+FyHY9MQwKFS/O4spSbNGBy/o3gHI5LeDOGzXJW4ypDpcG8EDURqh19aUcYzw189UWL9s/+de8+7AJ+EqDUSxBa41S2QqIEBDbNUeGuc7AwSfpTmThce0ZQ0ZqMuAafz3IjnDw8UwB7sVcBakHmIbJErU3hQiDXkuQH10SzfnwWbDIvo5Zif0WKKOoc1grPwWst5cbLxsEEhAWaYPWpF39SN1wW899xF38Vf1iJl+iGIy3ZsTZAN8Jw1puOCfSbsZXk3dLWqpdZz3GmMLD/nrX/+YFMFohTx/FKuPvS5GPOC5GIM8tov5UrzBLJ8FXkNYNbw+fIotdVwsMFZ5i9wExeQqBRiGupH4eLoSBGP3zdvjOemmwUUB9zUE9C1jC08NDcSRTZhxvWf34FggATy7SixMfLWhUmJwQHlKsyoHRFwTc/4ddgweCX7gFNwJ0fNoF93boHrzzFGFLMI2xCL8K7NB26Nt2/piMXBxK0F2yL/B2/xsSQjaIPgXyRUxnBLmYpKuDlqkMi2g0rtdgZyon2xKCHTp2kKhwEzZrxMnKHccZSrHkpwqJKPI9vzeyFnqAPhqFFbm7+VYAoOFNi8BOeej5rDY6bmZYmZvWYZZzWIEuBmL01OxyZbKmFpYfyCMcOrW0GKe8Xzi4CuktcCvwW2sOzXqNau3l8m3/mRBZEIkcTkEMYwpL1h2IJz+WOP7g2/8MNjYGyGm+amfKwikU4uz4b7tjyK4QoBZpmyHBpYDzvVnKub4G+EVk K3Vpp8b4 aM0O4eXoGOv5kdvwderjv0vuQ5LxMuwIHhJWzuQSt6gaeOjWPkOnynEP2+4v8wvVB+DwBLTih9QldTFDdK5DATUpyQATjQKWxpB8m/Q9xsCZvJeZCl5GHFzF2gfLeQ1Rx4wwumBU5FXPKjY3z8IYMfeg5LXNXK68FIQIk/XKcyGO4qRH/O5N4JuR28BfpFptDg/ihTwgHVhM13NkCsXlGl4abquC6fi0xtxSvKrC8YJffoSOHkeXCpuItw6hyikY/bqp+QKdEuf573ElV808tuU6sDTadG+ZeopmQr9HbpxrlznaV3CXwe+HUflK2fOIJPdHVbjEgGTRb6Eu8nueEVenOS80aeUR1l0PNC59U+OmNDJUA52EiidlB+mD/+qCf1BNAwh1F+vxWu9QQUdUs821Vc/J9qpAxKWHXIQXr+qJeZ6dqvugd98e8w4+yfpULFsJ8/c+PyFOMvbzAPzEf6MaqlBpkbCNsgkbcTTYp3PHaEndgzitpo/lr+YRuei1SOLdnshhxfx3VG9gKKm3Bmkb9Ywuf6IuWkilggeYHW4JBSlRWkKzs4gdDvgAezI1r69K30hSF3aSpciy/TyupvU5W5+rhVMwcnn5lu+sMdKPxQ2v0TBwL9GYPzorZmed4tOBuF/a0DEimm8d9vfOaJwL0bSohWaS0Ts4k5RhCtfrolf8= 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: Using the vma support introduced by the previous commit, introduce mmap support for miscdevices. The mmap call is given a vma that is undergoing initial setup, so the VmAreaNew type is used. Signed-off-by: Alice Ryhl --- rust/kernel/miscdevice.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/rust/kernel/miscdevice.rs b/rust/kernel/miscdevice.rs index cbd5249b5b45..c9428a6154e3 100644 --- a/rust/kernel/miscdevice.rs +++ b/rust/kernel/miscdevice.rs @@ -11,6 +11,7 @@ use crate::{ bindings, error::{to_result, Error, Result, VTABLE_DEFAULT_ERROR}, + mm::virt::VmAreaNew, prelude::*, str::CStr, types::{ForeignOwnable, Opaque}, @@ -110,6 +111,11 @@ fn release(device: Self::Ptr) { drop(device); } + /// Handle for mmap. + fn mmap(_device: ::Borrowed<'_>, _vma: &VmAreaNew) -> Result { + kernel::build_error(VTABLE_DEFAULT_ERROR) + } + /// Handler for ioctls. /// /// The `cmd` argument is usually manipulated using the utilties in [`kernel::ioctl`]. @@ -156,6 +162,7 @@ impl VtableHelper { const VTABLE: bindings::file_operations = bindings::file_operations { open: Some(fops_open::), release: Some(fops_release::), + mmap: maybe_fn(T::HAS_MMAP, fops_mmap::), unlocked_ioctl: maybe_fn(T::HAS_IOCTL, fops_ioctl::), #[cfg(CONFIG_COMPAT)] compat_ioctl: if T::HAS_COMPAT_IOCTL { @@ -207,6 +214,23 @@ impl VtableHelper { 0 } +unsafe extern "C" fn fops_mmap( + file: *mut bindings::file, + vma: *mut bindings::vm_area_struct, +) -> c_int { + // SAFETY: The mmap call of a file can access the private data. + let private = unsafe { (*file).private_data }; + // SAFETY: Mmap calls can borrow the private data of the file. + let device = unsafe { ::borrow(private) }; + // SAFETY: The caller provides a vma that is undergoing initial VMA setup. + let area = unsafe { kernel::mm::virt::VmAreaNew::from_raw(vma) }; + + match T::mmap(device, area) { + Ok(()) => 0, + Err(err) => err.to_errno() as c_int, + } +} + unsafe extern "C" fn fops_ioctl( file: *mut bindings::file, cmd: c_uint,