Revert "FROMLIST: mm: rust: add lock_vma_under_rcu"

This reverts commit b2e4a698fc.

Bug: 429146594
Change-Id: Icb2794ad170600ac87b8466d64ddc5925b8cd893
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
This commit is contained in:
Alice Ryhl
2025-07-02 12:16:09 +00:00
parent a121b6e72f
commit 3aed88205e
2 changed files with 0 additions and 65 deletions

View File

@@ -43,8 +43,3 @@ struct vm_area_struct *rust_helper_vma_lookup(struct mm_struct *mm,
{
return vma_lookup(mm, addr);
}
void rust_helper_vma_end_read(struct vm_area_struct *vma)
{
vma_end_read(vma);
}

View File

@@ -18,7 +18,6 @@ use crate::{
use core::{ops::Deref, ptr::NonNull};
pub mod virt;
use virt::VmAreaRef;
/// A wrapper for the kernel's `struct mm_struct`.
///
@@ -161,36 +160,6 @@ impl MmWithUser {
unsafe { &*ptr.cast() }
}
/// Attempt to access a vma using the vma read lock.
///
/// This is an optimistic trylock operation, so it may fail if there is contention. In that
/// case, you should fall back to taking the mmap read lock.
///
/// When per-vma locks are disabled, this always returns `None`.
#[inline]
pub fn lock_vma_under_rcu(&self, vma_addr: usize) -> Option<VmaReadGuard<'_>> {
#[cfg(CONFIG_PER_VMA_LOCK)]
{
// SAFETY: Calling `bindings::lock_vma_under_rcu` is always okay given an mm where
// `mm_users` is non-zero.
let vma = unsafe { bindings::lock_vma_under_rcu(self.as_raw(), vma_addr as _) };
if !vma.is_null() {
return Some(VmaReadGuard {
// SAFETY: If `lock_vma_under_rcu` returns a non-null ptr, then it points at a
// valid vma. The vma is stable for as long as the vma read lock is held.
vma: unsafe { VmAreaRef::from_raw(vma) },
_nts: NotThreadSafe,
});
}
}
// Silence warnings about unused variables.
#[cfg(not(CONFIG_PER_VMA_LOCK))]
let _ = vma_addr;
None
}
/// Lock the mmap read lock.
#[inline]
pub fn mmap_read_lock(&self) -> MmapReadGuard<'_> {
@@ -259,32 +228,3 @@ impl Drop for MmapReadGuard<'_> {
unsafe { bindings::mmap_read_unlock(self.mm.as_raw()) };
}
}
/// A guard for the vma read lock.
///
/// # Invariants
///
/// This `VmaReadGuard` guard owns the vma read lock.
pub struct VmaReadGuard<'a> {
vma: &'a VmAreaRef,
// `vma_end_read` must be called on the same thread as where the lock was taken
_nts: NotThreadSafe,
}
// Make all `VmAreaRef` methods available on `VmaReadGuard`.
impl Deref for VmaReadGuard<'_> {
type Target = VmAreaRef;
#[inline]
fn deref(&self) -> &VmAreaRef {
self.vma
}
}
impl Drop for VmaReadGuard<'_> {
#[inline]
fn drop(&mut self) {
// SAFETY: We hold the read lock by the type invariants.
unsafe { bindings::vma_end_read(self.vma.as_ptr()) };
}
}