This patch series migrates share pool features from OLK-5.10 to
openEuler-23.09. We don't want to do this work patch by patch since
there are hundreds of patches in OLK-5.10 including bugfix and small
features generation. Instead we just take the final version and
split it into a few small patches, each of which contains one
feature at the final version.
The share pool features is a big feature, it is mainly used to share
user virtual memory for different processes in the same group.
It could be used by this steps:
1. Process A create a new group which is owned by process A.
2. Process A add process B to the group.
3. Process A add process C to the same group.
4. Process B alloc a new memory VA, and write something in it.
5. The VA was send to the process C by IPC, then process C got it.
6. The process C access the VA and got the data directly.
7. The process A could add more processes in the group to share the
memory.
8. Fix the memory by use the free function or exit the group.
The new features is enabled both by CONFIG_SHARE_POOL and the
enable_ascend_share_pool bootarg, it would not affect anything if disabled.
v1->v2:
Fix some compile issues.
v2->v3:
Fix some checkpatch issues.
v3->v4:
Move the kconfigs assocated with mm to mm/Kconfig.
v4->v5:
Change the description for some commits.
v5->v6:
Reserve two bits for VM_HUGE_PAGES to avoid potential conflict with
upstream.
v6->v7:
Fix compile error without CONFIG_SHARE_POOL.
Wang Wensheng (19):
mm/hugetlb: Introduce hugetlb_insert_hugepage_pte[_by_pa]
mm/vmalloc: Extend vmalloc usage about hugepage
mm: Extend mmap assocated functions to accept mm_struct
mm/sharepool: Add base framework for share_pool
mm/sharepool: Reserve the va space for share_pool
mm/sharepool: Add sp_area management code
mm/sharepool: Implement mg_sp_make_share_u2k()
mm/sharepool: Implement mg_sp_unshare_kva
mm/sharepool: Implement mg_sp_walk_page_range()
mm/sharepool: Implement mg_sp_free()
mm/sharepool: Implement mg_sp_alloc()
mm/sharepool: Implement mg_sp_make_share_k2u()
mm/sharepool: Implement mg_sp_group_add_task()
mm/sharepool: Implement mg_sp_group_id_by_pid()
mm/sharepool: Implement mg_sp_id_of_current()
mm/sharepool: Implement mg_sp_config_dvpp_range()
mm/sharepool: Add proc interfaces to show sp info
mm/sharepool: support fork() and exit() to handle the mm
mm/sharepool: Adjust __unmap_hugepage_range() for k2u
include/linux/hugetlb.h | 32 +
include/linux/mempolicy.h | 11 +
include/linux/mm.h | 17 +
include/linux/mm_types.h | 7 +
include/linux/share_pool.h | 270 +++
include/linux/vmalloc.h | 18 +
kernel/fork.c | 3 +
mm/Kconfig | 34 +
mm/Makefile | 1 +
mm/gup.c | 23 +-
mm/hugetlb.c | 78 +
mm/mempolicy.c | 12 +-
mm/mmap.c | 43 +-
mm/share_pool.c | 3434 ++++++++++++++++++++++++++++++++++++
mm/util.c | 4 +
mm/vmalloc.c | 205 ++-
16 files changed, 4168 insertions(+), 24 deletions(-)
create mode 100644 include/linux/share_pool.h
create mode 100644 mm/share_pool.c
--
2.17.1