Skip to content

Commit 9290d29

Browse files
committed
fixup! rust: drm: mm: Add DRM MM Range Allocator abstraction
Signed-off-by: Janne Grunau <j@jannau.net>
1 parent 6459afd commit 9290d29

1 file changed

Lines changed: 27 additions & 17 deletions

File tree

rust/kernel/drm/mm.rs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
//! C header: [`include/drm/drm_mm.h`](../../../../include/drm/drm_mm.h)
66
77
use crate::{
8+
alloc::{box_ext::BoxExt, flags::*},
89
bindings,
910
error::{to_result, Result},
1011
sync::{Arc, Mutex, UniqueArc},
@@ -167,7 +168,10 @@ impl<A: AllocInner<T>, T> Allocator<A, T> {
167168
#[track_caller]
168169
pub fn new(start: u64, size: u64, inner: A) -> Result<Allocator<A, T>> {
169170
// SAFETY: We call `Mutex::init_lock` below.
170-
let mm = UniqueArc::pin_init(Mutex::new(MmInner(Opaque::uninit(), inner, PhantomData)))?;
171+
let mm = UniqueArc::pin_init(
172+
Mutex::new(MmInner(Opaque::uninit(), inner, PhantomData)),
173+
GFP_KERNEL,
174+
)?;
171175

172176
// SAFETY: The Opaque instance provides a valid pointer, and it is initialized after
173177
// this call.
@@ -218,14 +222,17 @@ impl<A: AllocInner<T>, T> Allocator<A, T> {
218222
end: u64,
219223
mode: InsertMode,
220224
) -> Result<Node<A, T>> {
221-
let mut mm_node = Box::try_new(NodeData {
222-
// SAFETY: This C struct should be zero-initialized.
223-
node: unsafe { core::mem::zeroed() },
224-
valid: false,
225-
inner: node,
226-
mm: self.mm.clone(),
227-
_pin: PhantomPinned,
228-
})?;
225+
let mut mm_node = Box::new(
226+
NodeData {
227+
// SAFETY: This C struct should be zero-initialized.
228+
node: unsafe { core::mem::zeroed() },
229+
valid: false,
230+
inner: node,
231+
mm: self.mm.clone(),
232+
_pin: PhantomPinned,
233+
},
234+
GFP_KERNEL,
235+
)?;
229236

230237
let guard = self.mm.lock();
231238
// SAFETY: We hold the lock and all pointers are valid.
@@ -257,14 +264,17 @@ impl<A: AllocInner<T>, T> Allocator<A, T> {
257264
size: u64,
258265
color: usize,
259266
) -> Result<Node<A, T>> {
260-
let mut mm_node = Box::try_new(NodeData {
261-
// SAFETY: This C struct should be zero-initialized.
262-
node: unsafe { core::mem::zeroed() },
263-
valid: false,
264-
inner: node,
265-
mm: self.mm.clone(),
266-
_pin: PhantomPinned,
267-
})?;
267+
let mut mm_node = Box::new(
268+
NodeData {
269+
// SAFETY: This C struct should be zero-initialized.
270+
node: unsafe { core::mem::zeroed() },
271+
valid: false,
272+
inner: node,
273+
mm: self.mm.clone(),
274+
_pin: PhantomPinned,
275+
},
276+
GFP_KERNEL,
277+
)?;
268278

269279
mm_node.node.start = start;
270280
mm_node.node.size = size;

0 commit comments

Comments
 (0)