Re: [PATCH] 2/2: Fall back to plain Qemu if KVM is not present, report errors from libkvm

Avi Kivity
2006-11-14T11:44:31Z

Simon Kagstrom wrote:
> This patch implements fall-back to plain Qemu if KVM is not
> present. Some logic has been moved into kvm_qemu_init.
>
> Signed-off-by: Simon Kagstrom <simon.kagstrom-6Uc+yI3S9P8@public.gmane.org>
>
>
[please inline patches in the future for easier reviewing]

-#if USE_KVM
phys_ram_size = ram_size + vga_ram_size + bios_size;
+#if USE_KVM
+ /* Initialize kvm */
if (kvm_allowed) {
- phys_ram_size += KVM_EXTRA_PAGES * 4096;
- kvm_qemu_init();
- } else {
- phys_ram_base = qemu_vmalloc(phys_ram_size);
- if (!phys_ram_base) {
- fprintf(stderr, "Could not allocate physical memory\n");
- exit(1);
- }
+ if (kvm_qemu_init() < 0) {
+ fprintf(stderr, "Could not initialize KVM\n");
+ kvm_allowed = 0;
+ }
+ }
+ /* Fall back to normal qemu if KVM fails */
+ if (!kvm_allowed) {
+ phys_ram_base = qemu_vmalloc(phys_ram_size);
+ if (!phys_ram_base) {
+ fprintf(stderr, "Could not allocate physical memory\n");
+ exit(1);
+ }
}
#else
- phys_ram_size = ram_size + vga_ram_size + bios_size;

This bit is rather awkward, since it disabled kvm after it has been
enabled. It's a cleaner to never enable kvm_allowed in the first place
(i.e. during argument parsing).

How about a

int libkvm_init(kvm_libcontext_t *libcontext);
void libkvm_exit(kvm_libcontext_t libcontext);

int kvm_create(kvm_libcontext_t libcontext, kvm_context_t* vm);
void kvm_destroy(kvm_context_t *vm);

at present, libkvm_init() can just call access(2) on /dev/kvm. In the
future, it is planned that open("/dev/kvm") will not create a VM (it
just opens a communication channel to the driver), so that libkvm_init()
will open the device and store the fd.

--
error compiling committee.c: too many arguments to function