|
5 | 5 | //! C header: [`include/drm/drm_mm.h`](../../../../include/drm/drm_mm.h) |
6 | 6 |
|
7 | 7 | use crate::{ |
| 8 | + alloc::{box_ext::BoxExt, flags::*}, |
8 | 9 | bindings, |
9 | 10 | error::{to_result, Result}, |
10 | 11 | sync::{Arc, Mutex, UniqueArc}, |
@@ -167,7 +168,10 @@ impl<A: AllocInner<T>, T> Allocator<A, T> { |
167 | 168 | #[track_caller] |
168 | 169 | pub fn new(start: u64, size: u64, inner: A) -> Result<Allocator<A, T>> { |
169 | 170 | // 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 | + )?; |
171 | 175 |
|
172 | 176 | // SAFETY: The Opaque instance provides a valid pointer, and it is initialized after |
173 | 177 | // this call. |
@@ -218,14 +222,17 @@ impl<A: AllocInner<T>, T> Allocator<A, T> { |
218 | 222 | end: u64, |
219 | 223 | mode: InsertMode, |
220 | 224 | ) -> 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 | + )?; |
229 | 236 |
|
230 | 237 | let guard = self.mm.lock(); |
231 | 238 | // SAFETY: We hold the lock and all pointers are valid. |
@@ -257,14 +264,17 @@ impl<A: AllocInner<T>, T> Allocator<A, T> { |
257 | 264 | size: u64, |
258 | 265 | color: usize, |
259 | 266 | ) -> 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 | + )?; |
268 | 278 |
|
269 | 279 | mm_node.node.start = start; |
270 | 280 | mm_node.node.size = size; |
|
0 commit comments