Re: [PATCH v7 4/4] rust: add abstraction for `struct page`

From: Abdiel Janulgue
Date: Mon Jun 10 2024 - 16:48:19 EST


Hi,

On 28/05/2024 17:58, Alice Ryhl wrote:
Adds a new struct called `Page` that wraps a pointer to `struct page`.
This struct is assumed to hold ownership over the page, so that Rust
code can allocate and manage pages directly.

+
+impl Drop for Page {
+ fn drop(&mut self) {
+ // SAFETY: By the type invariants, we have ownership of the page and can free it.
+ unsafe { bindings::__free_pages(self.page.as_ptr(), 0) };
+ }
+}


What about cases where the struct page pointer is not owned or allocated by this wrapper? For example, pages returned vmalloc_to_page()?
Any thoughts about exposing a provision to avoid freeing those pages during Drop?

We've been experimenting in adapting this Page wrapper in advance for page management within the Nova DRM driver.

/Abdiel