hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/mm/z3fold.c
....@@ -623,16 +623,14 @@
623623 {
624624 if (zhdr->first_chunks == 0 || zhdr->last_chunks == 0 ||
625625 zhdr->middle_chunks == 0) {
626
- struct list_head *unbuddied;
627
- int freechunks = num_free_chunks(zhdr);
626
+ struct list_head *unbuddied = get_cpu_ptr(pool->unbuddied);
628627
629
- migrate_disable();
630
- unbuddied = this_cpu_ptr(pool->unbuddied);
628
+ int freechunks = num_free_chunks(zhdr);
631629 spin_lock(&pool->lock);
632630 list_add(&zhdr->buddy, &unbuddied[freechunks]);
633631 spin_unlock(&pool->lock);
634632 zhdr->cpu = smp_processor_id();
635
- migrate_enable();
633
+ put_cpu_ptr(pool->unbuddied);
636634 }
637635 }
638636
....@@ -882,9 +880,8 @@
882880 int chunks = size_to_chunks(size), i;
883881
884882 lookup:
885
- migrate_disable();
886883 /* First, try to find an unbuddied z3fold page. */
887
- unbuddied = this_cpu_ptr(pool->unbuddied);
884
+ unbuddied = get_cpu_ptr(pool->unbuddied);
888885 for_each_unbuddied_list(i, chunks) {
889886 struct list_head *l = &unbuddied[i];
890887
....@@ -902,7 +899,7 @@
902899 !z3fold_page_trylock(zhdr)) {
903900 spin_unlock(&pool->lock);
904901 zhdr = NULL;
905
- migrate_enable();
902
+ put_cpu_ptr(pool->unbuddied);
906903 if (can_sleep)
907904 cond_resched();
908905 goto lookup;
....@@ -916,7 +913,7 @@
916913 test_bit(PAGE_CLAIMED, &page->private)) {
917914 z3fold_page_unlock(zhdr);
918915 zhdr = NULL;
919
- migrate_enable();
916
+ put_cpu_ptr(pool->unbuddied);
920917 if (can_sleep)
921918 cond_resched();
922919 goto lookup;
....@@ -931,7 +928,7 @@
931928 kref_get(&zhdr->refcount);
932929 break;
933930 }
934
- migrate_enable();
931
+ put_cpu_ptr(pool->unbuddied);
935932
936933 if (!zhdr) {
937934 int cpu;