Skip to contentSkip to conversation

Handling VMEXITS with interrupts disabled?

RFC Anthony Liguori 2 participants 2 messages Apr 23, 2007 1 message not in the archive KVM

lore
Share & tools
lore
#0 lore raw

Howdy,

I had an idea for improving VMEXIT time by only saving/restoring sys{enter,call,ret} MSRs when exiting from kernel space code since as long as these instructions aren't executed on the host, everything should be fine.

This worked fine for MSR_IA32_SYSENTER* msrs, but not so much for the ?TAR msrs. I have hooks in vcpu_{get,put} but I suspect we're making a blocking call somewhere which is resulting in the scheduler being invoked (while we still have the vcpu). This then results in generally badness in the host.

I'm still a little unclear about this though as I would think that if this could happen, it would create problems with VT since KVM another guest could run and overwrite the VMCS msr.

I'm I interpreting this correctly? Does disabling preemption not guarantee that you won't potentially drop to userspace in your critical block?

Regards,

Anthony Liguori

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 7 lines · Anthony Liguori

Howdy,

I had an idea for improving VMEXIT time by only saving/restoring sys{enter,call,ret} MSRs when exiting from kernel space code since as long as these instructions aren't executed on the host, everything should be fine.

Yup.

Quoted 6 lines

This worked fine for MSR_IA32_SYSENTER* msrs, but not so much for the ?TAR msrs. I have hooks in vcpu_{get,put} but I suspect we're making a blocking call somewhere which is resulting in the scheduler being invoked (while we still have the vcpu). This then results in generally badness in the host.

You might compile the host with CONFIG_PREEMPT, which should get you a nice stacktrace after the "scheduling while atomic" message.

Quoted 8 lines

I'm still a little unclear about this though as I would think that if this could happen, it would create problems with VT since KVM another guest could run and overwrite the VMCS msr.

I'm I interpreting this correctly? Does disabling preemption not guarantee that you won't potentially drop to userspace in your critical block?

This is only checked under CONFIG_PREEMPT, otherwise preempt_disable (and get_cpu()) are no-ops.

I really need to enable CONFIG_PREEMPT myself...

Signature · 8 lines
error compiling committee.c: too many arguments to function


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/