Hi, I was just trying to understand the KVM-ARM code and ran into the following questions. I'm sorry if my questions are really naive. I would highly appreciate if someone could shed some light here: 1. Looking at arch/arm/kvm/arm.c::kvm_arch_vcpu_ioctl_run() function: ... local_irq_disable(); <=== Disable interrupts here. ... /************************************************************** * Enter the guest */ trace_kvm_entry(*vcpu_pc(vcpu)); kvm_guest_enter(); vcpu->mode = IN_GUEST_MODE; ret = kvm_call_hyp(__kvm_vcpu_run, vcpu); vcpu->mode = OUTSIDE_GUEST_MODE; vcpu->arch.last_pcpu = smp_processor_id(); kvm_guest_exit(); trace_kvm_exit(*vcpu_pc(vcpu)); /* * We may have taken a host interrupt in HYP mode (ie * while executing the guest). This interrupt is still * pending, as we haven't serviced it yet! * * We're now back in SVC mode, with interrupts * disabled. Enabling the interrupts now will have * the effect of taking the interrupt again, in SVC * mode this time. */ local_irq_enable(); <=== Enable interrupts here. /* * Back from guest *************************************************************/ So in the code above, we disable the interrupts and then run the guest code, meaning guest is running while interrupts are disabled if that is the case then as per the comment above how can "We may have taken a host interrupt in HYP mode", I mean interrupts were not even enabled so how can the pcpu running the guest be interrupted? 2. Looking at the code in virt/kvm/arm/vgic.c, it looks like we use maintenance interrupt to update our in-memory data structures when guest EOIs the interrupt. That would mean, we would exit the VM every time guest does an EOI. Is that correct? 3. What is vmid? Why is it needed? Sorry to ask if it is obvious but I cannot seem to get my head around that? 4. While injecting an interrupt into the guest, we update our in memory data structures and then call vgic_kick_vcpus(). If the vcpu is already running then this function sends an IPI to the the pcpu running the vcpu which basically forces vcpu to exit and on the way back to continuing the guest we update the guest's interrupts' view leading to raising a virtual interrupt to the guest. Is my understanding correct here? Thanks a ton in advance! Matt _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm