On Thu, Nov 30, 2023 at 07:12:21PM +0900, Hyeonggon Yoo wrote: > RFC v2: https://lore.kernel.org/linux-mm/20230713042037.980211-1-42.hyeyoo@xxxxxxxxx/ > > v2 -> v3: > - rebased to the latest mm-unstable > - adjusted comments from Sergey Senozhatsky (Moving zsdesc definition, > kerneldoc fix) and Yosry Ahmed (adding memcg_data field to zsdesc) > > > V3 update is a bit late, but I still believe this is worth doing. > It would be nice to get comments/reviews/acks from maintainers/people. > > Cover Letter: > > The purpose of this series is to define own memory descriptor for zsmalloc, > instead of re-using various fields of struct page. This is a part of the > effort to reduce the size of struct page to unsigned long and enable > dynamic allocation of memory descriptors. > > While [1] outlines this ultimate objective, the current use of struct page > is highly dependent on its definition, making it challenging to separately > allocate memory descriptors. > > Therefore, this series introduces new descriptor for zsmalloc, called > zsdesc. It overlays struct page for now, but will eventually be allocated > independently in the future. And apart from dynamic allocation of descriptors, > this is a nice cleanup. And the new descriptor doesn't bloat anything for zsmalloc meta size. Right? Please specify it into the description. > > This work is also available at: > https://gitlab.com/hyeyoo/linux/-/tree/separate_zsdesc_rfc-v3 > > [1] State Of The Page, August 2022 > https://lore.kernel.org/lkml/YvV1KTyzZ+Jrtj9x@xxxxxxxxxxxxxxxxxxxx > > Hyeonggon Yoo (21): > mm/zsmalloc: create new struct zsdesc > mm/zsmalloc: add utility functions for zsdesc > mm/zsmalloc: replace first_page to first_zsdesc in struct zspage > mm/zsmalloc: add alternatives of frequently used helper functions > mm/zsmalloc: convert {try,}lock_zspage() to use zsdesc > mm/zsmalloc: convert __zs_{map,unmap}_object() to use zsdesc > mm/zsmalloc: convert obj_to_location() and its users to use zsdesc > mm/zsmalloc: convert obj_malloc() to use zsdesc > mm/zsmalloc: convert create_page_chain() and its users to use zsdesc > mm/zsmalloc: convert obj_allocated() and related helpers to use zsdesc > mm/zsmalloc: convert init_zspage() to use zsdesc > mm/zsmalloc: convert obj_to_page() and zs_free() to use zsdesc > mm/zsmalloc: convert reset_page() to reset_zsdesc() > mm/zsmalloc: convert zs_page_{isolate,migrate,putback} to use zsdesc > mm/zsmalloc: convert __free_zspage() to use zsdesc > mm/zsmalloc: convert location_to_obj() to use zsdesc > mm/zsmalloc: convert migrate_zspage() to use zsdesc > mm/zsmalloc: convert get_zspage() to take zsdesc > mm/zsmalloc: convert SetZsPageMovable() to use zsdesc > mm/zsmalloc: remove now unused helper functions > mm/zsmalloc: convert {get,set}_first_obj_offset() to use zsdesc > > mm/zsmalloc.c | 578 +++++++++++++++++++++++++++++++------------------- > 1 file changed, 364 insertions(+), 214 deletions(-) > > -- > 2.39.3 > It's straightforward, and I don't see any problems. I sincerely appreciate your dedication to making this change. Thank you, Hyeonggon!