Skip to content

Commit cb84318

Browse files
committed
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
2 parents 29eeafc + ea18d43 commit cb84318

File tree

7 files changed

+13
-15
lines changed

7 files changed

+13
-15
lines changed

arch/loongarch/include/asm/branch.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@ static inline unsigned long exception_era(struct pt_regs *regs)
1212
return regs->csr_era;
1313
}
1414

15-
static inline int compute_return_era(struct pt_regs *regs)
15+
static inline void compute_return_era(struct pt_regs *regs)
1616
{
1717
regs->csr_era += 4;
18-
return 0;
1918
}
2019

2120
#endif /* _ASM_BRANCH_H */

arch/loongarch/include/asm/pgtable.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,11 @@ static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,
426426

427427
#define kern_addr_valid(addr) (1)
428428

429+
static inline unsigned long pmd_pfn(pmd_t pmd)
430+
{
431+
return (pmd_val(pmd) & _PFN_MASK) >> _PFN_SHIFT;
432+
}
433+
429434
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
430435

431436
/* We don't have hardware dirty/accessed bits, generic_pmdp_establish is fine.*/
@@ -497,11 +502,6 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd)
497502
return pmd;
498503
}
499504

500-
static inline unsigned long pmd_pfn(pmd_t pmd)
501-
{
502-
return (pmd_val(pmd) & _PFN_MASK) >> _PFN_SHIFT;
503-
}
504-
505505
static inline struct page *pmd_page(pmd_t pmd)
506506
{
507507
if (pmd_trans_huge(pmd))

arch/loongarch/kernel/cpu-probe.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ void cpu_probe(void)
263263

264264
c->cputype = CPU_UNKNOWN;
265265
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;
267267

268268
c->fpu_csr0 = FPU_CSR_RN;
269269
c->fpu_mask = FPU_CSR_RSVD;

arch/loongarch/kernel/head.S

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
__REF
1616

17-
SYM_ENTRY(_stext, SYM_L_GLOBAL, SYM_A_NONE)
18-
1917
SYM_CODE_START(kernel_entry) # kernel entry point
2018

2119
/* Config direct window and set PG */

arch/loongarch/kernel/traps.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,8 +475,7 @@ asmlinkage void noinstr do_ri(struct pt_regs *regs)
475475

476476
die_if_kernel("Reserved instruction in kernel code", regs);
477477

478-
if (unlikely(compute_return_era(regs) < 0))
479-
goto out;
478+
compute_return_era(regs);
480479

481480
if (unlikely(get_user(opcode, era) < 0)) {
482481
status = SIGSEGV;

arch/loongarch/kernel/vmlinux.lds.S

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ SECTIONS
3737
HEAD_TEXT_SECTION
3838

3939
. = ALIGN(PECOFF_SEGMENT_ALIGN);
40+
_stext = .;
4041
.text : {
4142
TEXT_TEXT
4243
SCHED_TEXT

arch/loongarch/mm/tlb.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,15 +281,16 @@ void setup_tlb_handler(int cpu)
281281
if (pcpu_handlers[cpu])
282282
return;
283283

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));
285285
if (!page)
286286
return;
287287

288288
addr = page_address(page);
289-
pcpu_handlers[cpu] = virt_to_phys(addr);
289+
pcpu_handlers[cpu] = (unsigned long)addr;
290290
memcpy((void *)addr, (void *)eentry, vec_sz);
291291
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);
293294
csr_write64(pcpu_handlers[cpu] + 80*VECSIZE, LOONGARCH_CSR_TLBRENTRY);
294295
}
295296
#endif

0 commit comments

Comments
 (0)