On Fri, Nov 22, 2024 at 11:24 AM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Fri, Nov 22, 2024 at 01:18:28AM +0200, Abdiel Janulgue wrote: > > We need an abstraction of struct page to construct a scatterlist which is > > needed for an internal firmware structure. Now most of pages needed there > > come from vmalloc_to_page() which, unlike the current rust Page abstraction, > > not allocated on demand but is an existing mapping. > > > > Hope that clears things up! > > That's very helpful! So the lifetime of the scatterllist must not > outlive the lifetime of the vmalloc allocation. That means you can call > kmap_local_page() on the page in the scatterlist without worrying about > the refcount of the struct page. BTW, you can't call page_address() on > vmalloc memory because vmalloc can allocate pages from HIGHMEM. Unless > you're willing to disable support for 32-bit systems with highmem ... > https://elixir.bootlin.com/linux/v6.11.5/source/drivers/gpu/drm/nouveau/nvkm/core/firmware.c#L266 This is the C code we want to rustify. Dave.