Commit cbf06b7d authored by ZhangPeng's avatar ZhangPeng Committed by Ma Wupeng
Browse files

userswap: convert enable_userswap to static key

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I6CAIM



--------------------------------

Replace enable_userswap with struct static_key_false userswap_enabled.

Signed-off-by: default avatarZhangPeng <zhangpeng362@huawei.com>
parent 4a55c5b4
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@

#ifdef CONFIG_USERSWAP

extern int enable_userswap;
extern struct static_key_false userswap_enabled;

/*
 * In uswap situation, we use the bit 0 of the returned address to indicate
@@ -43,7 +43,7 @@ static inline bool uswap_check_copy_mode(struct vm_area_struct *vma, __u64 mode)

static inline bool uswap_validate_mremap_flags(unsigned long flags)
{
	if (!enable_userswap && flags & MREMAP_USWAP_SET_PTE)
	if (!static_branch_unlikely(&userswap_enabled) && flags & MREMAP_USWAP_SET_PTE)
		return false;
	if (flags & MREMAP_USWAP_SET_PTE && flags & ~MREMAP_USWAP_SET_PTE)
		return false;
@@ -80,7 +80,7 @@ static inline void uswap_get_cpu_id(unsigned long reason, struct uffd_msg *msg)

static inline void uswap_release(unsigned long *userfault_flags)
{
	if (enable_userswap)
	if (static_branch_unlikely(&userswap_enabled))
		*userfault_flags |= VM_USWAP;
}

+2 −1
Original line number Diff line number Diff line
@@ -586,7 +586,8 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm,
		BUG_ON(pmd_trans_huge(*dst_pmd));

#ifdef CONFIG_USERSWAP
		if (dst_vma->vm_flags & VM_USWAP &&
		if (static_branch_unlikely(&userswap_enabled) &&
		    dst_vma->vm_flags & VM_USWAP &&
		    mode & UFFDIO_COPY_MODE_DIRECT_MAP)
			err = mfill_atomic_pte_nocopy(dst_mm, dst_pmd, dst_vma,
						      dst_addr, src_addr);
+6 −3
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@

#include "internal.h"

int enable_userswap;
DEFINE_STATIC_KEY_FALSE(userswap_enabled);

static bool vma_uswap_compatible(struct vm_area_struct *vma)
{
@@ -470,7 +470,7 @@ bool uswap_register(struct uffdio_register *uffdio_register,
	struct vm_area_struct *vma;
	unsigned long end;

	if (!enable_userswap)
	if (!static_branch_unlikely(&userswap_enabled))
		return true;
	if (!(uffdio_register->mode & UFFDIO_REGISTER_MODE_USWAP))
		return true;
@@ -496,6 +496,9 @@ bool uswap_register(struct uffdio_register *uffdio_register,
bool do_uswap_page(swp_entry_t entry, struct vm_fault *vmf,
		   struct vm_area_struct *vma, vm_fault_t *ret)
{
	if (!static_branch_unlikely(&userswap_enabled))
		return true;

	if (swp_type(entry) != SWP_USERSWAP_ENTRY)
		return true;

@@ -519,7 +522,7 @@ bool do_uswap_page(swp_entry_t entry, struct vm_fault *vmf,

static int __init enable_userswap_setup(char *str)
{
	enable_userswap = true;
	static_branch_enable(&userswap_enabled);
	return 1;
}
__setup("enable_userswap", enable_userswap_setup);