On Sep 1, 2008, at 3:11 PM, Avi Kivity wrote:
Alexander Graf wrote:
This patch implements the GIF flag and the clgi and stgi
instructions that
set this flag. Only if the flag is set (default), interrupts can be
received by
the CPU.
To keep the information about that somewhere, this patch adds a new
hidden
flags vector. that is used to store information that does not go
into the
vmcb, but is SVM specific.
+
+ u32 hflags;
};
bool gif : 1;
(or even
bool gif;)?
It's not visible in the patches I sent, but I did use the hflags for a
VMLOAD+VMRUN+VMSAVE aggregation hack. It's still somewhat flacky wrt
save/restore though, so I didn't send it. Hflags might be useful
nevertheless though.
+static int stgi_interception(struct vcpu_svm *svm, struct kvm_run
*kvm_run)
+{
+ svm->next_rip = kvm_rip_read(&svm->vcpu) + 3;
+ skip_emulated_instruction(&svm->vcpu);
+
+ if (svm->vmcb->save.cpl) {
+ printk(KERN_ERR "%s: invalid cpl 0x%x at ip 0x%lx\n",
+ __func__, svm->vmcb->save.cpl, kvm_rip_read(&svm->vcpu));
+ kvm_queue_exception(&svm->vcpu, GP_VECTOR);
+ return 1;
+ }
Check before adjusting rip.
+static int clgi_interception(struct vcpu_svm *svm, struct kvm_run
*kvm_run)
+{
+ svm->next_rip = kvm_rip_read(&svm->vcpu) + 3;
+ skip_emulated_instruction(&svm->vcpu);
+
+ if (svm->vmcb->save.cpl) {
+ printk(KERN_ERR "%s: invalid cpl 0x%x at ip 0x%lx\n",
+ __func__, svm->vmcb->save.cpl, kvm_rip_read(&svm->vcpu));
+ kvm_queue_exception(&svm->vcpu, GP_VECTOR);
+ return 1;
+ }
Ditto.
Need save/restore support as well. Can be in a different patch,
though.
It might be a good idea to share hflags with qemu. I implemented the
GIF there already.
Alex
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html