Revert "FROMLIST: rust: miscdevice: add mmap support"
This reverts commit 88a4dfa30b.
Bug: 429146594
Change-Id: Ia75f9f7f9706971fe47e6ab74a8f0009876396af
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
This commit is contained in:
@@ -14,7 +14,6 @@ use crate::{
|
|||||||
error::{to_result, Error, Result, VTABLE_DEFAULT_ERROR},
|
error::{to_result, Error, Result, VTABLE_DEFAULT_ERROR},
|
||||||
ffi::{c_int, c_long, c_uint, c_ulong, c_void},
|
ffi::{c_int, c_long, c_uint, c_ulong, c_void},
|
||||||
fs::{File, LocalFile},
|
fs::{File, LocalFile},
|
||||||
mm::virt::VmAreaNew,
|
|
||||||
prelude::*,
|
prelude::*,
|
||||||
seq_file::SeqFile,
|
seq_file::SeqFile,
|
||||||
str::CStr,
|
str::CStr,
|
||||||
@@ -124,22 +123,6 @@ pub trait MiscDevice: Sized {
|
|||||||
drop(device);
|
drop(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle for mmap.
|
|
||||||
///
|
|
||||||
/// This function is invoked when a user space process invokes the `mmap` system call on
|
|
||||||
/// `file`. The function is a callback that is part of the VMA initializer. The kernel will do
|
|
||||||
/// initial setup of the VMA before calling this function. The function can then interact with
|
|
||||||
/// the VMA initialization by calling methods of `vma`. If the function does not return an
|
|
||||||
/// error, the kernel will complete initialization of the VMA according to the properties of
|
|
||||||
/// `vma`.
|
|
||||||
fn mmap(
|
|
||||||
_device: <Self::Ptr as ForeignOwnable>::Borrowed<'_>,
|
|
||||||
_file: &File,
|
|
||||||
_vma: &VmAreaNew,
|
|
||||||
) -> Result {
|
|
||||||
kernel::build_error!(VTABLE_DEFAULT_ERROR)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Seeks this miscdevice.
|
/// Seeks this miscdevice.
|
||||||
fn llseek(
|
fn llseek(
|
||||||
_device: <Self::Ptr as ForeignOwnable>::Borrowed<'_>,
|
_device: <Self::Ptr as ForeignOwnable>::Borrowed<'_>,
|
||||||
@@ -286,7 +269,6 @@ const fn create_vtable<T: MiscDevice>() -> &'static bindings::file_operations {
|
|||||||
const VTABLE: bindings::file_operations = bindings::file_operations {
|
const VTABLE: bindings::file_operations = bindings::file_operations {
|
||||||
open: Some(fops_open::<T>),
|
open: Some(fops_open::<T>),
|
||||||
release: Some(fops_release::<T>),
|
release: Some(fops_release::<T>),
|
||||||
mmap: maybe_fn(T::HAS_MMAP, fops_mmap::<T>),
|
|
||||||
llseek: maybe_fn(T::HAS_LLSEEK, fops_llseek::<T>),
|
llseek: maybe_fn(T::HAS_LLSEEK, fops_llseek::<T>),
|
||||||
read_iter: maybe_fn(T::HAS_READ_ITER, fops_read_iter::<T>),
|
read_iter: maybe_fn(T::HAS_READ_ITER, fops_read_iter::<T>),
|
||||||
write_iter: maybe_fn(T::HAS_WRITE_ITER, fops_write_iter::<T>),
|
write_iter: maybe_fn(T::HAS_WRITE_ITER, fops_write_iter::<T>),
|
||||||
@@ -371,32 +353,6 @@ unsafe extern "C" fn fops_release<T: MiscDevice>(
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// # Safety
|
|
||||||
///
|
|
||||||
/// `file` must be a valid file that is associated with a `MiscDeviceRegistration<T>`.
|
|
||||||
/// `vma` must be a vma that is currently being mmap'ed with this file.
|
|
||||||
unsafe extern "C" fn fops_mmap<T: MiscDevice>(
|
|
||||||
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: This is a Rust Miscdevice, so we call `into_foreign` in `open` and `from_foreign` in
|
|
||||||
// `release`, and `fops_mmap` is guaranteed to be called between those two operations.
|
|
||||||
let device = unsafe { <T::Ptr as ForeignOwnable>::borrow(private) };
|
|
||||||
// SAFETY: The caller provides a vma that is undergoing initial VMA setup.
|
|
||||||
let area = unsafe { VmAreaNew::from_raw(vma) };
|
|
||||||
// SAFETY:
|
|
||||||
// * The file is valid for the duration of this call.
|
|
||||||
// * There is no active fdget_pos region on the file on this thread.
|
|
||||||
let file = unsafe { File::from_raw_file(file) };
|
|
||||||
|
|
||||||
match T::mmap(device, file, area) {
|
|
||||||
Ok(()) => 0,
|
|
||||||
Err(err) => err.to_errno() as c_int,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # Safety
|
/// # Safety
|
||||||
///
|
///
|
||||||
/// `file` must be a valid file that is associated with a `MiscDeviceRegistration<T>`.
|
/// `file` must be a valid file that is associated with a `MiscDeviceRegistration<T>`.
|
||||||
|
|||||||
Reference in New Issue
Block a user