Merge git://github.com/rustyrussell/linux
* git://github.com/rustyrussell/linux: lguest: move process freezing before pending signals check lguest: don't allow KVM-detection cpuid. lguest: Allow running under paravirt-enabled KVM.
This commit is contained in:
commit
ce949717b5
|
@ -70,6 +70,7 @@
|
|||
#include <asm/i387.h>
|
||||
#include <asm/stackprotector.h>
|
||||
#include <asm/reboot.h> /* for struct machine_ops */
|
||||
#include <asm/kvm_para.h>
|
||||
|
||||
/*G:010
|
||||
* Welcome to the Guest!
|
||||
|
@ -455,6 +456,15 @@ static void lguest_cpuid(unsigned int *ax, unsigned int *bx,
|
|||
*ax &= 0xFFFFF0FF;
|
||||
*ax |= 0x00000500;
|
||||
break;
|
||||
|
||||
/*
|
||||
* This is used to detect if we're running under KVM. We might be,
|
||||
* but that's a Host matter, not us. So say we're not.
|
||||
*/
|
||||
case KVM_CPUID_SIGNATURE:
|
||||
*bx = *cx = *dx = 0;
|
||||
break;
|
||||
|
||||
/*
|
||||
* 0x80000000 returns the highest Extended Function, so we futureproof
|
||||
* like we do above by limiting it to known fields.
|
||||
|
|
|
@ -232,6 +232,13 @@ int run_guest(struct lg_cpu *cpu, unsigned long __user *user)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* All long-lived kernel loops need to check with this horrible
|
||||
* thing called the freezer. If the Host is trying to suspend,
|
||||
* it stops us.
|
||||
*/
|
||||
try_to_freeze();
|
||||
|
||||
/* Check for signals */
|
||||
if (signal_pending(current))
|
||||
return -ERESTARTSYS;
|
||||
|
@ -245,13 +252,6 @@ int run_guest(struct lg_cpu *cpu, unsigned long __user *user)
|
|||
if (irq < LGUEST_IRQS)
|
||||
try_deliver_interrupt(cpu, irq, more);
|
||||
|
||||
/*
|
||||
* All long-lived kernel loops need to check with this horrible
|
||||
* thing called the freezer. If the Host is trying to suspend,
|
||||
* it stops us.
|
||||
*/
|
||||
try_to_freeze();
|
||||
|
||||
/*
|
||||
* Just make absolutely sure the Guest is still alive. One of
|
||||
* those hypercalls could have been fatal, for example.
|
||||
|
@ -313,7 +313,7 @@ static int __init init(void)
|
|||
int err;
|
||||
|
||||
/* Lguest can't run under Xen, VMI or itself. It does Tricky Stuff. */
|
||||
if (paravirt_enabled()) {
|
||||
if (get_kernel_rpl() != 0) {
|
||||
printk("lguest is afraid of being a guest\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue