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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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()) };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user