Closed Martins3 closed 3 years ago
这个是和 vdso 有关的,getpid 和 getuid 会走 vdso,而 vdso 中实现 getpid 需要利用到 timerid:
ltp 结果分析:
before 30493
Info: top = fffbd4c000, limit = 800000
Info: open /dev/kvm
Info: KVM_GET_API_VERSION
Info: KVM_CREATE_VM
Info: KVM_SET_USER_MEMORY_REGION
Info: ebase address : fff7e48000
Info: ebase address : fff7e49600
after 30493
after 28335
after 30493
after 30493
after 30493
after 30493
after 30493
after 30493
after 9
after 28335
➜ example git:(main) ✗
问题并没有被修复。
diff --git a/arch/loongarch/kvm/mmu.c b/arch/loongarch/kvm/mmu.c
index fd93cbea93fe..d5af832d7e33 100644
+++ b/arch/loongarch/kvm/mmu.c
@@ -1200,11 +1200,12 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
*/
kvm_loongarch_migrate_count(vcpu);
}
+ write_gcsr_timerid(cpu);
+ kvm_restore_gcsr_timerid(vcpu->arch.csr);
/* restore guest state to registers */
kvm_cpu_cb->vcpu_load(vcpu, cpu);
local_irq_restore(flags);
}
printf 还是正常工作
getpid 有时候还是正常返回的
syscall 没有被调用
多次调用的结果不相同
如果在进入到 dune 之前进行函数调用,那么就是正确运行
[x] 为什么 gettimeofday 不是在 vdso 中间的 ?
[x] 测试 tlbrefill 的方法,分配 1 GB 的空间,然后全部访问一次