| .. | .. |
|---|
| 623 | 623 | { |
|---|
| 624 | 624 | if (zhdr->first_chunks == 0 || zhdr->last_chunks == 0 || |
|---|
| 625 | 625 | 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); |
|---|
| 628 | 627 | |
|---|
| 629 | | - migrate_disable(); |
|---|
| 630 | | - unbuddied = this_cpu_ptr(pool->unbuddied); |
|---|
| 628 | + int freechunks = num_free_chunks(zhdr); |
|---|
| 631 | 629 | spin_lock(&pool->lock); |
|---|
| 632 | 630 | list_add(&zhdr->buddy, &unbuddied[freechunks]); |
|---|
| 633 | 631 | spin_unlock(&pool->lock); |
|---|
| 634 | 632 | zhdr->cpu = smp_processor_id(); |
|---|
| 635 | | - migrate_enable(); |
|---|
| 633 | + put_cpu_ptr(pool->unbuddied); |
|---|
| 636 | 634 | } |
|---|
| 637 | 635 | } |
|---|
| 638 | 636 | |
|---|
| .. | .. |
|---|
| 882 | 880 | int chunks = size_to_chunks(size), i; |
|---|
| 883 | 881 | |
|---|
| 884 | 882 | lookup: |
|---|
| 885 | | - migrate_disable(); |
|---|
| 886 | 883 | /* First, try to find an unbuddied z3fold page. */ |
|---|
| 887 | | - unbuddied = this_cpu_ptr(pool->unbuddied); |
|---|
| 884 | + unbuddied = get_cpu_ptr(pool->unbuddied); |
|---|
| 888 | 885 | for_each_unbuddied_list(i, chunks) { |
|---|
| 889 | 886 | struct list_head *l = &unbuddied[i]; |
|---|
| 890 | 887 | |
|---|
| .. | .. |
|---|
| 902 | 899 | !z3fold_page_trylock(zhdr)) { |
|---|
| 903 | 900 | spin_unlock(&pool->lock); |
|---|
| 904 | 901 | zhdr = NULL; |
|---|
| 905 | | - migrate_enable(); |
|---|
| 902 | + put_cpu_ptr(pool->unbuddied); |
|---|
| 906 | 903 | if (can_sleep) |
|---|
| 907 | 904 | cond_resched(); |
|---|
| 908 | 905 | goto lookup; |
|---|
| .. | .. |
|---|
| 916 | 913 | test_bit(PAGE_CLAIMED, &page->private)) { |
|---|
| 917 | 914 | z3fold_page_unlock(zhdr); |
|---|
| 918 | 915 | zhdr = NULL; |
|---|
| 919 | | - migrate_enable(); |
|---|
| 916 | + put_cpu_ptr(pool->unbuddied); |
|---|
| 920 | 917 | if (can_sleep) |
|---|
| 921 | 918 | cond_resched(); |
|---|
| 922 | 919 | goto lookup; |
|---|
| .. | .. |
|---|
| 931 | 928 | kref_get(&zhdr->refcount); |
|---|
| 932 | 929 | break; |
|---|
| 933 | 930 | } |
|---|
| 934 | | - migrate_enable(); |
|---|
| 931 | + put_cpu_ptr(pool->unbuddied); |
|---|
| 935 | 932 | |
|---|
| 936 | 933 | if (!zhdr) { |
|---|
| 937 | 934 | int cpu; |
|---|