From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 08:20:59 +0000
Subject: [PATCH] kernel_5.10 no rt

---
 kernel/mm/z3fold.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/kernel/mm/z3fold.c b/kernel/mm/z3fold.c
index f3d875f..912ac9a 100644
--- a/kernel/mm/z3fold.c
+++ b/kernel/mm/z3fold.c
@@ -623,16 +623,14 @@
 {
 	if (zhdr->first_chunks == 0 || zhdr->last_chunks == 0 ||
 			zhdr->middle_chunks == 0) {
-		struct list_head *unbuddied;
-		int freechunks = num_free_chunks(zhdr);
+		struct list_head *unbuddied = get_cpu_ptr(pool->unbuddied);
 
-		migrate_disable();
-		unbuddied = this_cpu_ptr(pool->unbuddied);
+		int freechunks = num_free_chunks(zhdr);
 		spin_lock(&pool->lock);
 		list_add(&zhdr->buddy, &unbuddied[freechunks]);
 		spin_unlock(&pool->lock);
 		zhdr->cpu = smp_processor_id();
-		migrate_enable();
+		put_cpu_ptr(pool->unbuddied);
 	}
 }
 
@@ -882,9 +880,8 @@
 	int chunks = size_to_chunks(size), i;
 
 lookup:
-	migrate_disable();
 	/* First, try to find an unbuddied z3fold page. */
-	unbuddied = this_cpu_ptr(pool->unbuddied);
+	unbuddied = get_cpu_ptr(pool->unbuddied);
 	for_each_unbuddied_list(i, chunks) {
 		struct list_head *l = &unbuddied[i];
 
@@ -902,7 +899,7 @@
 		    !z3fold_page_trylock(zhdr)) {
 			spin_unlock(&pool->lock);
 			zhdr = NULL;
-			migrate_enable();
+			put_cpu_ptr(pool->unbuddied);
 			if (can_sleep)
 				cond_resched();
 			goto lookup;
@@ -916,7 +913,7 @@
 		    test_bit(PAGE_CLAIMED, &page->private)) {
 			z3fold_page_unlock(zhdr);
 			zhdr = NULL;
-			migrate_enable();
+			put_cpu_ptr(pool->unbuddied);
 			if (can_sleep)
 				cond_resched();
 			goto lookup;
@@ -931,7 +928,7 @@
 		kref_get(&zhdr->refcount);
 		break;
 	}
-	migrate_enable();
+	put_cpu_ptr(pool->unbuddied);
 
 	if (!zhdr) {
 		int cpu;

--
Gitblit v1.6.2