summaryrefslogtreecommitdiff
path: root/mali_kbase/mali_kbase_mem_migrate.c
diff options
context:
space:
mode:
Diffstat (limited to 'mali_kbase/mali_kbase_mem_migrate.c')
-rw-r--r--mali_kbase/mali_kbase_mem_migrate.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/mali_kbase/mali_kbase_mem_migrate.c b/mali_kbase/mali_kbase_mem_migrate.c
index 6638b76..26ddeed 100644
--- a/mali_kbase/mali_kbase_mem_migrate.c
+++ b/mali_kbase/mali_kbase_mem_migrate.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
/*
*
- * (C) COPYRIGHT 2022-2023 ARM Limited. All rights reserved.
+ * (C) COPYRIGHT 2022-2024 ARM Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the
* GNU General Public License version 2 as published by the Free Software
@@ -28,6 +28,9 @@
#include <mali_kbase_mem_migrate.h>
#include <mmu/mali_kbase_mmu.h>
+/* Static key used to determine if page migration is enabled or not */
+static DEFINE_STATIC_KEY_FALSE(page_migration_static_key);
+
/* Global integer used to determine if module parameter value has been
* provided and if page migration feature is enabled.
* Feature is disabled on all platforms by default.
@@ -50,15 +53,6 @@ MODULE_PARM_DESC(kbase_page_migration_enabled,
KBASE_EXPORT_TEST_API(kbase_page_migration_enabled);
-bool kbase_is_page_migration_enabled(void)
-{
- /* Handle uninitialised int case */
- if (kbase_page_migration_enabled < 0)
- return false;
- return IS_ENABLED(CONFIG_PAGE_MIGRATION_SUPPORT) && kbase_page_migration_enabled;
-}
-KBASE_EXPORT_SYMBOL(kbase_is_page_migration_enabled);
-
#if (KERNEL_VERSION(6, 0, 0) <= LINUX_VERSION_CODE)
static const struct movable_operations movable_ops;
#endif
@@ -679,11 +673,15 @@ void kbase_mem_migrate_init(struct kbase_device *kbdev)
* integer for a negative value to see if insmod parameter was
* passed in at all (it will override the default negative value).
*/
- if (kbase_page_migration_enabled < 0)
- kbase_page_migration_enabled = kbdev->pagesize_2mb ? 1 : 0;
- else
+ if (kbase_page_migration_enabled < 0) {
+ if (kbase_is_large_pages_enabled())
+ static_branch_enable(&page_migration_static_key);
+ } else {
dev_info(kbdev->dev, "Page migration support explicitly %s at insmod.",
kbase_page_migration_enabled ? "enabled" : "disabled");
+ if (kbase_page_migration_enabled)
+ static_branch_enable(&page_migration_static_key);
+ }
spin_lock_init(&mem_migrate->free_pages_lock);
INIT_LIST_HEAD(&mem_migrate->free_pages_list);
@@ -708,3 +706,9 @@ void kbase_mem_migrate_term(struct kbase_device *kbdev)
iput(mem_migrate->inode);
#endif
}
+
+bool kbase_is_page_migration_enabled(void)
+{
+ return static_branch_unlikely(&page_migration_static_key);
+}
+KBASE_EXPORT_TEST_API(kbase_is_page_migration_enabled);