[RFC PATCH v2 00/21] mm/zsmalloc: Split zsdesc from struct page

From: Hyeonggon Yoo
Date: Thu Jul 13 2023 - 00:21:00 EST


v1: https://lore.kernel.org/linux-mm/20230220132218.546369-1-42.hyeyoo@xxxxxxxxx

v1 -> v2:
- rebased to the latest mm-unstable, resulting in some patches dropped
- adjusted comments from Mike Rapoport, defining helpers when
converting its users

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.

This work is also available at:
https://gitlab.com/hyeyoo/linux/-/tree/separate_zsdesc_rfc-v2

[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 user 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 | 574 +++++++++++++++++++++++++++++++-------------------
1 file changed, 360 insertions(+), 214 deletions(-)

--
2.41.0