Hi, all
What is the content of Context ID Register of ARM Cortex A9. Is it OS that is responsible for assigning the value
of Process ID and ASID? As far as I know, it is so in Linux. Is that the same in the other OSes?
Is it essential to deal with ASID if I want to make context switch correctly? Does Cortex A8 have no Context ID
Register? Minix's process context switch running on a Cortex A8 core doesn't cope with ASID when it writes
TTBR.
Thank you.
Best Regards,
Channing M.
The corresponding identifier for x86 is called PCID - process context id, so that's the thing to look for in the x86 Minix code as implementing the business isn't entirely straightforward. I get the feeling it will be much more worthwhile on Minix 3 than it ever has been with Linux because of it switching processes for every little service or driver interrupt, so yeah go for it.
thank you for your advice. At present I am trying to port Minix 3 to Zynq-7000 All Programmable SoC Zedboard, but when the system switches to VM service, after it writes the physical address of page directory again, the operation of refresh_tlb() hangs the CPU. Before this execution point, the same operation of writing TTBR and refreshing TLB is performed smoothly? I don't find the reason why invalidating the TLB at this point will hang the CPU.
I suspect that it's not the TLB invalidate that is causing the problem, but rather the table walk(s) that have to happen after the invalidate. Could you give an outline of the steps you are performing? Also, when you say "hang" what exactly do you mean (e.g. recursive abort, or the processor can't enter debug state)?
EDIT: Forgot an important "not"
View all questions in Cortex-A / A-Profile forum