Thread (27 messages) flat view 27 messages, 6 authors, 1d ago

Re: [PATCH v20 4/8] rust: page: convert to `Ownable`'

From: "Gary Guo" <gary@garyguo.net>
Date: 2026-09-06 13:02:12
Also in: dri-devel, driver-core, linux-block, linux-fsdevel, linux-mm, linux-pci, linux-pwm, linux-security-module, linux-usb, lkml, rust-for-linux

On Tue Aug 25, 2026 at 2:20 PM BST, Alice Ryhl wrote:
On Mon, Aug 24, 2026 at 01:17:56PM +0200, Andreas Hindborg wrote:
quoted
+        // SAFETY: We just successfully allocated a page, so we now have ownership of the newly
+        // allocated page. We transfer that ownership to the new `Owned<Page>` object.
+        // Since `Page` is transparent, we can cast the pointer directly.
+        Ok(unsafe { Owned::from_raw(page.cast()) })
This doesn't satisfy the safety requirements of Owned::from_raw()
because the page may be used with vm_insert_page(), which increments its
refcount and causes it to be shared the vma system, and this occurs
before Page::release() is called.
I suppose the existing vm_insert_page() abstraction we have is already
problematic, because it uses `&Page`?

Maybe we want to change the API to use `ARef<Page>` so it already has to be
shared? Conceptually it takes a reference count from a `&Page`, which isn't
possible because `Page` is not `AlwaysRefCounted`, so it needs a `&ARef<Page>`
to be able to do that op.

Best,
Gary
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help