Skip to content

ARCv2: Linux kernel fails to boot if tlb flush switched to using TLBWriteNI cmds #7

@vineetgarc

Description

@vineetgarc

Linux kernel TLB flush interface tries to optimize the TLB flush by incrementing the ASID when there is a need to flush large number of entries (since goign thru TLB one entry at a time could be costly). This happens when a task exits or forks etc. Only in case of ASID rollover does it need to unconditionally flush the entire TLB.

However for an experiment (related to ARCv4 MMU48 bringup) I switched ARCv2 kernel TLB flush interfaces to just nuke the TLB using TLBWriteNI cmd in a loop. Such a kernel failed to boot as init task was getting segv.

This architecture does not have kernel memory protection. Run /init as init process with arguments: /init with environment: HOME=/ TERM=linux potentially unexpected fatal signal 11. Path: /bin/busybox CPU: 0 PID: 24 Comm: init Not tainted 5.6.0-00168-g1aa3c6c3c2e2-dirty #121 Insn could not be fetched @No matching VMA found ECR: 0x00040000 EFA: 0x00000005 ERET: 0x00000005 STAT32: 0x80081082 [IE U ] BTA: 0x00000005 SP: 0x5ffffbe8 FP: 0x000d285c BLK: 0x5 LPS: 0x2010e63a	LPE: 0x2010e64c	LPC: 0x00000000 r00: 0x00000000	r01: 0x00000000	r02: 0x2001e56c r03: 0x2001e564	r04: 0x201a606c	r05: 0x00000007 r06: 0x201a2668	r07: 0x00000000	r08: 0x000000dc r09: 0x00000000	r10: 0x20011af8	r11: 0x2001e988 r12: 0x00000000	r13: 0x000d4d78	r14: 0x000d44a8 r15: 0x000d4d78	r16: 0x000d44a8	r17: 0x000d4190 r18: 0x000d4590	r19: 0x000c9911	r20: 0x00000000 r21: 0xffffffff	r22: 0x00000000	r23: 0xffffffff r24: 0x000c9911	r25: 0x201a6488 Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100 ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100 ]--- 

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions