Skip to content

Commit e7ded27

Browse files
committed
Merge tag 'percpu-for-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu
Pull percpu updates from Dennis Zhou: "Enable percpu page allocator for RISC-V. There are RISC-V configurations with sparse NUMA configurations and small vmalloc space causing dynamic percpu allocations to fail as the backing chunk stride is too far apart" * tag 'percpu-for-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu: riscv: Enable pcpu page first chunk allocator mm: Introduce flush_cache_vmap_early()
2 parents 24f3a63 + 6b9f29b commit e7ded27

19 files changed

Lines changed: 42 additions & 10 deletions

File tree

arch/arc/include/asm/cacheflush.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ void dma_cache_wback(phys_addr_t start, unsigned long sz);
4040

4141
/* TBD: optimize this */
4242
#define flush_cache_vmap(start, end) flush_cache_all()
43+
#define flush_cache_vmap_early(start, end) do { } while (0)
4344
#define flush_cache_vunmap(start, end) flush_cache_all()
4445

4546
#define flush_cache_dup_mm(mm) /* called on fork (VIVT only) */

arch/arm/include/asm/cacheflush.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ static inline void flush_cache_vmap(unsigned long start, unsigned long end)
340340
dsb(ishst);
341341
}
342342

343+
#define flush_cache_vmap_early(start, end) do { } while (0)
344+
343345
static inline void flush_cache_vunmap(unsigned long start, unsigned long end)
344346
{
345347
if (!cache_is_vipt_nonaliasing())

arch/csky/abiv1/inc/abi/cacheflush.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ static inline void flush_anon_page(struct vm_area_struct *vma,
4343
*/
4444
extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end);
4545
#define flush_cache_vmap(start, end) cache_wbinv_all()
46+
#define flush_cache_vmap_early(start, end) do { } while (0)
4647
#define flush_cache_vunmap(start, end) cache_wbinv_all()
4748

4849
#define flush_icache_range(start, end) cache_wbinv_range(start, end)

arch/csky/abiv2/inc/abi/cacheflush.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ void flush_icache_mm_range(struct mm_struct *mm,
4141
void flush_icache_deferred(struct mm_struct *mm);
4242

4343
#define flush_cache_vmap(start, end) do { } while (0)
44+
#define flush_cache_vmap_early(start, end) do { } while (0)
4445
#define flush_cache_vunmap(start, end) do { } while (0)
4546

4647
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \

arch/m68k/include/asm/cacheflush_mm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ extern void cache_push_v(unsigned long vaddr, int len);
191191
#define flush_cache_all() __flush_cache_all()
192192

193193
#define flush_cache_vmap(start, end) flush_cache_all()
194+
#define flush_cache_vmap_early(start, end) do { } while (0)
194195
#define flush_cache_vunmap(start, end) flush_cache_all()
195196

196197
static inline void flush_cache_mm(struct mm_struct *mm)

arch/mips/include/asm/cacheflush.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ static inline void flush_cache_vmap(unsigned long start, unsigned long end)
9797
__flush_cache_vmap();
9898
}
9999

100+
#define flush_cache_vmap_early(start, end) do { } while (0)
101+
100102
extern void (*__flush_cache_vunmap)(void);
101103

102104
static inline void flush_cache_vunmap(unsigned long start, unsigned long end)

arch/nios2/include/asm/cacheflush.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ void flush_icache_pages(struct vm_area_struct *vma, struct page *page,
3838
#define flush_icache_pages flush_icache_pages
3939

4040
#define flush_cache_vmap(start, end) flush_dcache_range(start, end)
41+
#define flush_cache_vmap_early(start, end) do { } while (0)
4142
#define flush_cache_vunmap(start, end) flush_dcache_range(start, end)
4243

4344
extern void copy_to_user_page(struct vm_area_struct *vma, struct page *page,

arch/parisc/include/asm/cacheflush.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ void flush_kernel_vmap_range(void *vaddr, int size);
4141
void invalidate_kernel_vmap_range(void *vaddr, int size);
4242

4343
#define flush_cache_vmap(start, end) flush_cache_all()
44+
#define flush_cache_vmap_early(start, end) do { } while (0)
4445
#define flush_cache_vunmap(start, end) flush_cache_all()
4546

4647
void flush_dcache_folio(struct folio *folio);

arch/riscv/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,9 @@ config NUMA
416416
depends on SMP && MMU
417417
select ARCH_SUPPORTS_NUMA_BALANCING
418418
select GENERIC_ARCH_NUMA
419+
select HAVE_SETUP_PER_CPU_AREA
419420
select NEED_PER_CPU_EMBED_FIRST_CHUNK
421+
select NEED_PER_CPU_PAGE_FIRST_CHUNK
420422
select OF_NUMA
421423
select USE_PERCPU_NUMA_NODE_ID
422424
help

arch/riscv/include/asm/cacheflush.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ static inline void flush_dcache_page(struct page *page)
3737
flush_icache_mm(vma->vm_mm, 0)
3838

3939
#ifdef CONFIG_64BIT
40-
#define flush_cache_vmap(start, end) flush_tlb_kernel_range(start, end)
40+
#define flush_cache_vmap(start, end) flush_tlb_kernel_range(start, end)
41+
#define flush_cache_vmap_early(start, end) local_flush_tlb_kernel_range(start, end)
4142
#endif
4243

4344
#ifndef CONFIG_SMP

0 commit comments

Comments
 (0)