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);
|
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};
|
use core::{ops::Deref, ptr::NonNull};
|
||||||
|
|
||||||
pub mod virt;
|
pub mod virt;
|
||||||
use virt::VmAreaRef;
|
|
||||||
|
|
||||||
/// A wrapper for the kernel's `struct mm_struct`.
|
/// A wrapper for the kernel's `struct mm_struct`.
|
||||||
///
|
///
|
||||||
@@ -161,36 +160,6 @@ impl MmWithUser {
|
|||||||
unsafe { &*ptr.cast() }
|
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.
|
/// Lock the mmap read lock.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn mmap_read_lock(&self) -> MmapReadGuard<'_> {
|
pub fn mmap_read_lock(&self) -> MmapReadGuard<'_> {
|
||||||
@@ -259,32 +228,3 @@ impl Drop for MmapReadGuard<'_> {
|
|||||||
unsafe { bindings::mmap_read_unlock(self.mm.as_raw()) };
|
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