Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'loongarch-fixes-5.19-3' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson

Pull LoongArch fixes from Huacai Chen:
"Some bug fixes and a trivial cleanup"

* tag 'loongarch-fixes-5.19-3' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson:
LoongArch: Make compute_return_era() return void
LoongArch: Fix wrong fpu version
LoongArch: Fix EENTRY/MERRENTRY setting in setup_tlb_handler()
LoongArch: Fix sleeping in atomic context in setup_tlb_handler()
LoongArch: Fix the _stext symbol address
LoongArch: Fix the !THP build

+13 -15
+1 -2
arch/loongarch/include/asm/branch.h
··· 12 12 return regs->csr_era; 13 13 } 14 14 15 - static inline int compute_return_era(struct pt_regs *regs) 15 + static inline void compute_return_era(struct pt_regs *regs) 16 16 { 17 17 regs->csr_era += 4; 18 - return 0; 19 18 } 20 19 21 20 #endif /* _ASM_BRANCH_H */
+5 -5
arch/loongarch/include/asm/pgtable.h
··· 426 426 427 427 #define kern_addr_valid(addr) (1) 428 428 429 + static inline unsigned long pmd_pfn(pmd_t pmd) 430 + { 431 + return (pmd_val(pmd) & _PFN_MASK) >> _PFN_SHIFT; 432 + } 433 + 429 434 #ifdef CONFIG_TRANSPARENT_HUGEPAGE 430 435 431 436 /* We don't have hardware dirty/accessed bits, generic_pmdp_establish is fine.*/ ··· 500 495 { 501 496 pmd_val(pmd) |= _PAGE_ACCESSED; 502 497 return pmd; 503 - } 504 - 505 - static inline unsigned long pmd_pfn(pmd_t pmd) 506 - { 507 - return (pmd_val(pmd) & _PFN_MASK) >> _PFN_SHIFT; 508 498 } 509 499 510 500 static inline struct page *pmd_page(pmd_t pmd)
+1 -1
arch/loongarch/kernel/cpu-probe.c
··· 263 263 264 264 c->cputype = CPU_UNKNOWN; 265 265 c->processor_id = read_cpucfg(LOONGARCH_CPUCFG0); 266 - c->fpu_vers = (read_cpucfg(LOONGARCH_CPUCFG2) >> 3) & 0x3; 266 + c->fpu_vers = (read_cpucfg(LOONGARCH_CPUCFG2) & CPUCFG2_FPVERS) >> 3; 267 267 268 268 c->fpu_csr0 = FPU_CSR_RN; 269 269 c->fpu_mask = FPU_CSR_RSVD;
-2
arch/loongarch/kernel/head.S
··· 14 14 15 15 __REF 16 16 17 - SYM_ENTRY(_stext, SYM_L_GLOBAL, SYM_A_NONE) 18 - 19 17 SYM_CODE_START(kernel_entry) # kernel entry point 20 18 21 19 /* Config direct window and set PG */
+1 -2
arch/loongarch/kernel/traps.c
··· 475 475 476 476 die_if_kernel("Reserved instruction in kernel code", regs); 477 477 478 - if (unlikely(compute_return_era(regs) < 0)) 479 - goto out; 478 + compute_return_era(regs); 480 479 481 480 if (unlikely(get_user(opcode, era) < 0)) { 482 481 status = SIGSEGV;
+1
arch/loongarch/kernel/vmlinux.lds.S
··· 37 37 HEAD_TEXT_SECTION 38 38 39 39 . = ALIGN(PECOFF_SEGMENT_ALIGN); 40 + _stext = .; 40 41 .text : { 41 42 TEXT_TEXT 42 43 SCHED_TEXT
+4 -3
arch/loongarch/mm/tlb.c
··· 281 281 if (pcpu_handlers[cpu]) 282 282 return; 283 283 284 - page = alloc_pages_node(cpu_to_node(cpu), GFP_KERNEL, get_order(vec_sz)); 284 + page = alloc_pages_node(cpu_to_node(cpu), GFP_ATOMIC, get_order(vec_sz)); 285 285 if (!page) 286 286 return; 287 287 288 288 addr = page_address(page); 289 - pcpu_handlers[cpu] = virt_to_phys(addr); 289 + pcpu_handlers[cpu] = (unsigned long)addr; 290 290 memcpy((void *)addr, (void *)eentry, vec_sz); 291 291 local_flush_icache_range((unsigned long)addr, (unsigned long)addr + vec_sz); 292 - csr_write64(pcpu_handlers[cpu], LOONGARCH_CSR_TLBRENTRY); 292 + csr_write64(pcpu_handlers[cpu], LOONGARCH_CSR_EENTRY); 293 + csr_write64(pcpu_handlers[cpu], LOONGARCH_CSR_MERRENTRY); 293 294 csr_write64(pcpu_handlers[cpu] + 80*VECSIZE, LOONGARCH_CSR_TLBRENTRY); 294 295 } 295 296 #endif