From: Hollis Blanchard <hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
To: Carsten Otte <cotte-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
Cc: "kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org"
<kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
"Zhang,
Xiantao" <xiantao.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Subject: Re: RFC/patch portability: split kvm_vm_ioctl v3
Date: Fri, 26 Oct 2007 13:32:03 -0500 [thread overview]
Message-ID: <1193423523.31756.61.camel@basalt> (raw)
In-Reply-To: <1193400099.10970.8.camel-WIxn4w2hgUz3YA32ykw5MLlKpX0K8NHHQQ4Iyu8u01E@public.gmane.org>
Acked-by: Hollis Blanchard <hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
On Fri, 2007-10-26 at 14:01 +0200, Carsten Otte wrote:
> This patch splits kvm_vm_ioctl into archtecture independent parts, and
> x86 specific parts which go to kvm_arch_vcpu_ioctl in x86.c.
> The patch has been updated to current git, and it leaves out memory slot
> registration work which is currently subject to a detailed discussion.
>
> Common ioctls for all architectures are:
> KVM_CREATE_VCPU, KVM_GET_DIRTY_LOG, KVM_SET_USER_MEMORY_REGION
>
> KVM_SET_USER_MEMORY_REGION implementation is no longer moved to x86.c.
> It seems to me that more fine-grained refinement then just moving the
> code is required here.
>
> x86 specific ioctls are:
> KVM_SET_MEMORY_REGION,
> KVM_GET/SET_NR_MMU_PAGES, KVM_SET_MEMORY_ALIAS, KVM_CREATE_IRQCHIP,
> KVM_CREATE_IRQ_LINE, KVM_GET/SET_IRQCHIP
> KVM_SET_TSS_ADDR
>
> KVM_SET_TSS_ADDR has been added to the list of x86 specifics, as Izik's
> commit states it is used for emulating real mode on intel.
>
>
> kvm.h | 7 +
> kvm_main.c | 255
> +-----------------------------------------------------------
> x86.c | 258
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 271 insertions(+), 249 deletions(-)
> Signed-off-by: Carsten Otte <cotte-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
> ---
> diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h
> index b08fc9e..438d4a9 100644
> --- a/drivers/kvm/kvm.h
> +++ b/drivers/kvm/kvm.h
> @@ -621,6 +621,13 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
> unsigned int ioctl, unsigned long arg);
> void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
> void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu);
> +int kvm_vm_ioctl_set_memory_region(struct kvm *kvm,
> + struct
> + kvm_userspace_memory_region *mem,
> + int user_alloc);
> +long kvm_arch_vm_ioctl(struct file *filp,
> + unsigned int ioctl, unsigned long arg);
> +void kvm_arch_destroy_vm(struct kvm *kvm);
>
> __init void kvm_arch_init(void);
>
> diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
> index 9a3d663..7a85be9 100644
> --- a/drivers/kvm/kvm_main.c
> +++ b/drivers/kvm/kvm_main.c
> @@ -792,36 +792,16 @@ out:
> }
> EXPORT_SYMBOL_GPL(kvm_set_memory_region);
>
> -static int kvm_vm_ioctl_set_memory_region(struct kvm *kvm,
> - struct
> - kvm_userspace_memory_region *mem,
> - int user_alloc)
> +int kvm_vm_ioctl_set_memory_region(struct kvm *kvm,
> + struct
> + kvm_userspace_memory_region *mem,
> + int user_alloc)
> {
> if (mem->slot >= KVM_MEMORY_SLOTS)
> return -EINVAL;
> return kvm_set_memory_region(kvm, mem, user_alloc);
> }
>
> -static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm,
> - u32 kvm_nr_mmu_pages)
> -{
> - if (kvm_nr_mmu_pages < KVM_MIN_ALLOC_MMU_PAGES)
> - return -EINVAL;
> -
> - mutex_lock(&kvm->lock);
> -
> - kvm_mmu_change_mmu_pages(kvm, kvm_nr_mmu_pages);
> - kvm->n_requested_mmu_pages = kvm_nr_mmu_pages;
> -
> - mutex_unlock(&kvm->lock);
> - return 0;
> -}
> -
> -static int kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm)
> -{
> - return kvm->n_alloc_mmu_pages;
> -}
> -
> /*
> * Get (and clear) the dirty memory log for a memory slot.
> */
> @@ -867,111 +847,6 @@ out:
> return r;
> }
>
> -/*
> - * Set a new alias region. Aliases map a portion of physical memory into
> - * another portion. This is useful for memory windows, for example the PC
> - * VGA region.
> - */
> -static int kvm_vm_ioctl_set_memory_alias(struct kvm *kvm,
> - struct kvm_memory_alias *alias)
> -{
> - int r, n;
> - struct kvm_mem_alias *p;
> -
> - r = -EINVAL;
> - /* General sanity checks */
> - if (alias->memory_size & (PAGE_SIZE - 1))
> - goto out;
> - if (alias->guest_phys_addr & (PAGE_SIZE - 1))
> - goto out;
> - if (alias->slot >= KVM_ALIAS_SLOTS)
> - goto out;
> - if (alias->guest_phys_addr + alias->memory_size
> - < alias->guest_phys_addr)
> - goto out;
> - if (alias->target_phys_addr + alias->memory_size
> - < alias->target_phys_addr)
> - goto out;
> -
> - mutex_lock(&kvm->lock);
> -
> - p = &kvm->aliases[alias->slot];
> - p->base_gfn = alias->guest_phys_addr >> PAGE_SHIFT;
> - p->npages = alias->memory_size >> PAGE_SHIFT;
> - p->target_gfn = alias->target_phys_addr >> PAGE_SHIFT;
> -
> - for (n = KVM_ALIAS_SLOTS; n > 0; --n)
> - if (kvm->aliases[n - 1].npages)
> - break;
> - kvm->naliases = n;
> -
> - kvm_mmu_zap_all(kvm);
> -
> - mutex_unlock(&kvm->lock);
> -
> - return 0;
> -
> -out:
> - return r;
> -}
> -
> -static int kvm_vm_ioctl_get_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
> -{
> - int r;
> -
> - r = 0;
> - switch (chip->chip_id) {
> - case KVM_IRQCHIP_PIC_MASTER:
> - memcpy(&chip->chip.pic,
> - &pic_irqchip(kvm)->pics[0],
> - sizeof(struct kvm_pic_state));
> - break;
> - case KVM_IRQCHIP_PIC_SLAVE:
> - memcpy(&chip->chip.pic,
> - &pic_irqchip(kvm)->pics[1],
> - sizeof(struct kvm_pic_state));
> - break;
> - case KVM_IRQCHIP_IOAPIC:
> - memcpy(&chip->chip.ioapic,
> - ioapic_irqchip(kvm),
> - sizeof(struct kvm_ioapic_state));
> - break;
> - default:
> - r = -EINVAL;
> - break;
> - }
> - return r;
> -}
> -
> -static int kvm_vm_ioctl_set_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
> -{
> - int r;
> -
> - r = 0;
> - switch (chip->chip_id) {
> - case KVM_IRQCHIP_PIC_MASTER:
> - memcpy(&pic_irqchip(kvm)->pics[0],
> - &chip->chip.pic,
> - sizeof(struct kvm_pic_state));
> - break;
> - case KVM_IRQCHIP_PIC_SLAVE:
> - memcpy(&pic_irqchip(kvm)->pics[1],
> - &chip->chip.pic,
> - sizeof(struct kvm_pic_state));
> - break;
> - case KVM_IRQCHIP_IOAPIC:
> - memcpy(ioapic_irqchip(kvm),
> - &chip->chip.ioapic,
> - sizeof(struct kvm_ioapic_state));
> - break;
> - default:
> - r = -EINVAL;
> - break;
> - }
> - kvm_pic_update_irq(pic_irqchip(kvm));
> - return r;
> -}
> -
> int is_error_page(struct page *page)
> {
> return page == bad_page;
> @@ -2669,16 +2544,6 @@ static int create_vcpu_fd(struct kvm_vcpu *vcpu)
> return fd;
> }
>
> -static int kvm_vm_ioctl_set_tss_addr(struct kvm *kvm, unsigned long addr)
> -{
> - int ret;
> -
> - if (addr > (unsigned int)(-3 * PAGE_SIZE))
> - return -1;
> - ret = kvm_x86_ops->set_tss_addr(kvm, addr);
> - return ret;
> -}
> -
> /*
> * Creates some virtual cpus. Good luck creating more than one.
> */
> @@ -2972,35 +2837,14 @@ static long kvm_vm_ioctl(struct file *filp,
> {
> struct kvm *kvm = filp->private_data;
> void __user *argp = (void __user *)arg;
> - int r = -EINVAL;
> + int r;
>
> switch (ioctl) {
> - case KVM_SET_TSS_ADDR:
> - r = kvm_vm_ioctl_set_tss_addr(kvm, arg);
> - if (r < 0)
> - goto out;
> - break;
> case KVM_CREATE_VCPU:
> r = kvm_vm_ioctl_create_vcpu(kvm, arg);
> if (r < 0)
> goto out;
> break;
> - case KVM_SET_MEMORY_REGION: {
> - struct kvm_memory_region kvm_mem;
> - struct kvm_userspace_memory_region kvm_userspace_mem;
> -
> - r = -EFAULT;
> - if (copy_from_user(&kvm_mem, argp, sizeof kvm_mem))
> - goto out;
> - kvm_userspace_mem.slot = kvm_mem.slot;
> - kvm_userspace_mem.flags = kvm_mem.flags;
> - kvm_userspace_mem.guest_phys_addr = kvm_mem.guest_phys_addr;
> - kvm_userspace_mem.memory_size = kvm_mem.memory_size;
> - r = kvm_vm_ioctl_set_memory_region(kvm, &kvm_userspace_mem, 0);
> - if (r)
> - goto out;
> - break;
> - }
> case KVM_SET_USER_MEMORY_REGION: {
> struct kvm_userspace_memory_region kvm_userspace_mem;
>
> @@ -3014,14 +2858,6 @@ static long kvm_vm_ioctl(struct file *filp,
> goto out;
> break;
> }
> - case KVM_SET_NR_MMU_PAGES:
> - r = kvm_vm_ioctl_set_nr_mmu_pages(kvm, arg);
> - if (r)
> - goto out;
> - break;
> - case KVM_GET_NR_MMU_PAGES:
> - r = kvm_vm_ioctl_get_nr_mmu_pages(kvm);
> - break;
> case KVM_GET_DIRTY_LOG: {
> struct kvm_dirty_log log;
>
> @@ -3033,87 +2869,8 @@ static long kvm_vm_ioctl(struct file *filp,
> goto out;
> break;
> }
> - case KVM_SET_MEMORY_ALIAS: {
> - struct kvm_memory_alias alias;
> -
> - r = -EFAULT;
> - if (copy_from_user(&alias, argp, sizeof alias))
> - goto out;
> - r = kvm_vm_ioctl_set_memory_alias(kvm, &alias);
> - if (r)
> - goto out;
> - break;
> - }
> - case KVM_CREATE_IRQCHIP:
> - r = -ENOMEM;
> - kvm->vpic = kvm_create_pic(kvm);
> - if (kvm->vpic) {
> - r = kvm_ioapic_init(kvm);
> - if (r) {
> - kfree(kvm->vpic);
> - kvm->vpic = NULL;
> - goto out;
> - }
> - } else
> - goto out;
> - break;
> - case KVM_IRQ_LINE: {
> - struct kvm_irq_level irq_event;
> -
> - r = -EFAULT;
> - if (copy_from_user(&irq_event, argp, sizeof irq_event))
> - goto out;
> - if (irqchip_in_kernel(kvm)) {
> - mutex_lock(&kvm->lock);
> - if (irq_event.irq < 16)
> - kvm_pic_set_irq(pic_irqchip(kvm),
> - irq_event.irq,
> - irq_event.level);
> - kvm_ioapic_set_irq(kvm->vioapic,
> - irq_event.irq,
> - irq_event.level);
> - mutex_unlock(&kvm->lock);
> - r = 0;
> - }
> - break;
> - }
> - case KVM_GET_IRQCHIP: {
> - /* 0: PIC master, 1: PIC slave, 2: IOAPIC */
> - struct kvm_irqchip chip;
> -
> - r = -EFAULT;
> - if (copy_from_user(&chip, argp, sizeof chip))
> - goto out;
> - r = -ENXIO;
> - if (!irqchip_in_kernel(kvm))
> - goto out;
> - r = kvm_vm_ioctl_get_irqchip(kvm, &chip);
> - if (r)
> - goto out;
> - r = -EFAULT;
> - if (copy_to_user(argp, &chip, sizeof chip))
> - goto out;
> - r = 0;
> - break;
> - }
> - case KVM_SET_IRQCHIP: {
> - /* 0: PIC master, 1: PIC slave, 2: IOAPIC */
> - struct kvm_irqchip chip;
> -
> - r = -EFAULT;
> - if (copy_from_user(&chip, argp, sizeof chip))
> - goto out;
> - r = -ENXIO;
> - if (!irqchip_in_kernel(kvm))
> - goto out;
> - r = kvm_vm_ioctl_set_irqchip(kvm, &chip);
> - if (r)
> - goto out;
> - r = 0;
> - break;
> - }
> default:
> - ;
> + r = kvm_arch_vm_ioctl(filp, ioctl, arg);
> }
> out:
> return r;
> diff --git a/drivers/kvm/x86.c b/drivers/kvm/x86.c
> index 1fe209d..b84cb67 100644
> --- a/drivers/kvm/x86.c
> +++ b/drivers/kvm/x86.c
> @@ -300,6 +300,264 @@ out:
> return r;
> }
>
> +static int kvm_vm_ioctl_set_tss_addr(struct kvm *kvm, unsigned long addr)
> +{
> + int ret;
> +
> + if (addr > (unsigned int)(-3 * PAGE_SIZE))
> + return -1;
> + ret = kvm_x86_ops->set_tss_addr(kvm, addr);
> + return ret;
> +}
> +
> +static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm,
> + u32 kvm_nr_mmu_pages)
> +{
> + if (kvm_nr_mmu_pages < KVM_MIN_ALLOC_MMU_PAGES)
> + return -EINVAL;
> +
> + mutex_lock(&kvm->lock);
> +
> + kvm_mmu_change_mmu_pages(kvm, kvm_nr_mmu_pages);
> + kvm->n_requested_mmu_pages = kvm_nr_mmu_pages;
> +
> + mutex_unlock(&kvm->lock);
> + return 0;
> +}
> +
> +static int kvm_vm_ioctl_get_nr_mmu_pages(struct kvm *kvm)
> +{
> + return kvm->n_alloc_mmu_pages;
> +}
> +
> +/*
> + * Set a new alias region. Aliases map a portion of physical memory into
> + * another portion. This is useful for memory windows, for example the PC
> + * VGA region.
> + */
> +static int kvm_vm_ioctl_set_memory_alias(struct kvm *kvm,
> + struct kvm_memory_alias *alias)
> +{
> + int r, n;
> + struct kvm_mem_alias *p;
> +
> + r = -EINVAL;
> + /* General sanity checks */
> + if (alias->memory_size & (PAGE_SIZE - 1))
> + goto out;
> + if (alias->guest_phys_addr & (PAGE_SIZE - 1))
> + goto out;
> + if (alias->slot >= KVM_ALIAS_SLOTS)
> + goto out;
> + if (alias->guest_phys_addr + alias->memory_size
> + < alias->guest_phys_addr)
> + goto out;
> + if (alias->target_phys_addr + alias->memory_size
> + < alias->target_phys_addr)
> + goto out;
> +
> + mutex_lock(&kvm->lock);
> +
> + p = &kvm->aliases[alias->slot];
> + p->base_gfn = alias->guest_phys_addr >> PAGE_SHIFT;
> + p->npages = alias->memory_size >> PAGE_SHIFT;
> + p->target_gfn = alias->target_phys_addr >> PAGE_SHIFT;
> +
> + for (n = KVM_ALIAS_SLOTS; n > 0; --n)
> + if (kvm->aliases[n - 1].npages)
> + break;
> + kvm->naliases = n;
> +
> + kvm_mmu_zap_all(kvm);
> +
> + mutex_unlock(&kvm->lock);
> +
> + return 0;
> +
> +out:
> + return r;
> +}
> +
> +static int kvm_vm_ioctl_get_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
> +{
> + int r;
> +
> + r = 0;
> + switch (chip->chip_id) {
> + case KVM_IRQCHIP_PIC_MASTER:
> + memcpy(&chip->chip.pic,
> + &pic_irqchip(kvm)->pics[0],
> + sizeof(struct kvm_pic_state));
> + break;
> + case KVM_IRQCHIP_PIC_SLAVE:
> + memcpy(&chip->chip.pic,
> + &pic_irqchip(kvm)->pics[1],
> + sizeof(struct kvm_pic_state));
> + break;
> + case KVM_IRQCHIP_IOAPIC:
> + memcpy(&chip->chip.ioapic,
> + ioapic_irqchip(kvm),
> + sizeof(struct kvm_ioapic_state));
> + break;
> + default:
> + r = -EINVAL;
> + break;
> + }
> + return r;
> +}
> +
> +static int kvm_vm_ioctl_set_irqchip(struct kvm *kvm, struct kvm_irqchip *chip)
> +{
> + int r;
> +
> + r = 0;
> + switch (chip->chip_id) {
> + case KVM_IRQCHIP_PIC_MASTER:
> + memcpy(&pic_irqchip(kvm)->pics[0],
> + &chip->chip.pic,
> + sizeof(struct kvm_pic_state));
> + break;
> + case KVM_IRQCHIP_PIC_SLAVE:
> + memcpy(&pic_irqchip(kvm)->pics[1],
> + &chip->chip.pic,
> + sizeof(struct kvm_pic_state));
> + break;
> + case KVM_IRQCHIP_IOAPIC:
> + memcpy(ioapic_irqchip(kvm),
> + &chip->chip.ioapic,
> + sizeof(struct kvm_ioapic_state));
> + break;
> + default:
> + r = -EINVAL;
> + break;
> + }
> + kvm_pic_update_irq(pic_irqchip(kvm));
> + return r;
> +}
> +
> +long kvm_arch_vm_ioctl(struct file *filp,
> + unsigned int ioctl, unsigned long arg)
> +{
> + struct kvm *kvm = filp->private_data;
> + void __user *argp = (void __user *)arg;
> + int r = -EINVAL;
> +
> + switch (ioctl) {
> + case KVM_SET_TSS_ADDR:
> + r = kvm_vm_ioctl_set_tss_addr(kvm, arg);
> + if (r < 0)
> + goto out;
> + break;
> + case KVM_SET_MEMORY_REGION: {
> + struct kvm_memory_region kvm_mem;
> + struct kvm_userspace_memory_region kvm_userspace_mem;
> +
> + r = -EFAULT;
> + if (copy_from_user(&kvm_mem, argp, sizeof kvm_mem))
> + goto out;
> + kvm_userspace_mem.slot = kvm_mem.slot;
> + kvm_userspace_mem.flags = kvm_mem.flags;
> + kvm_userspace_mem.guest_phys_addr = kvm_mem.guest_phys_addr;
> + kvm_userspace_mem.memory_size = kvm_mem.memory_size;
> + r = kvm_vm_ioctl_set_memory_region(kvm, &kvm_userspace_mem, 0);
> + if (r)
> + goto out;
> + break;
> + }
> + case KVM_SET_NR_MMU_PAGES:
> + r = kvm_vm_ioctl_set_nr_mmu_pages(kvm, arg);
> + if (r)
> + goto out;
> + break;
> + case KVM_GET_NR_MMU_PAGES:
> + r = kvm_vm_ioctl_get_nr_mmu_pages(kvm);
> + break;
> + case KVM_SET_MEMORY_ALIAS: {
> + struct kvm_memory_alias alias;
> +
> + r = -EFAULT;
> + if (copy_from_user(&alias, argp, sizeof alias))
> + goto out;
> + r = kvm_vm_ioctl_set_memory_alias(kvm, &alias);
> + if (r)
> + goto out;
> + break;
> + }
> + case KVM_CREATE_IRQCHIP:
> + r = -ENOMEM;
> + kvm->vpic = kvm_create_pic(kvm);
> + if (kvm->vpic) {
> + r = kvm_ioapic_init(kvm);
> + if (r) {
> + kfree(kvm->vpic);
> + kvm->vpic = NULL;
> + goto out;
> + }
> + } else
> + goto out;
> + break;
> + case KVM_IRQ_LINE: {
> + struct kvm_irq_level irq_event;
> +
> + r = -EFAULT;
> + if (copy_from_user(&irq_event, argp, sizeof irq_event))
> + goto out;
> + if (irqchip_in_kernel(kvm)) {
> + mutex_lock(&kvm->lock);
> + if (irq_event.irq < 16)
> + kvm_pic_set_irq(pic_irqchip(kvm),
> + irq_event.irq,
> + irq_event.level);
> + kvm_ioapic_set_irq(kvm->vioapic,
> + irq_event.irq,
> + irq_event.level);
> + mutex_unlock(&kvm->lock);
> + r = 0;
> + }
> + break;
> + }
> + case KVM_GET_IRQCHIP: {
> + /* 0: PIC master, 1: PIC slave, 2: IOAPIC */
> + struct kvm_irqchip chip;
> +
> + r = -EFAULT;
> + if (copy_from_user(&chip, argp, sizeof chip))
> + goto out;
> + r = -ENXIO;
> + if (!irqchip_in_kernel(kvm))
> + goto out;
> + r = kvm_vm_ioctl_get_irqchip(kvm, &chip);
> + if (r)
> + goto out;
> + r = -EFAULT;
> + if (copy_to_user(argp, &chip, sizeof chip))
> + goto out;
> + r = 0;
> + break;
> + }
> + case KVM_SET_IRQCHIP: {
> + /* 0: PIC master, 1: PIC slave, 2: IOAPIC */
> + struct kvm_irqchip chip;
> +
> + r = -EFAULT;
> + if (copy_from_user(&chip, argp, sizeof chip))
> + goto out;
> + r = -ENXIO;
> + if (!irqchip_in_kernel(kvm))
> + goto out;
> + r = kvm_vm_ioctl_set_irqchip(kvm, &chip);
> + if (r)
> + goto out;
> + r = 0;
> + break;
> + }
> + default:
> + ;
> + }
> +out:
> + return r;
> +}
> +
> static __init void kvm_init_msr_list(void)
> {
> u32 dummy[2];
>
>
--
Hollis Blanchard
IBM Linux Technology Center
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
next prev parent reply other threads:[~2007-10-26 18:32 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-12 12:34 RFC/patch portability: split kvm_vm_ioctl Carsten Otte
[not found] ` <1192192452.7630.16.camel-WIxn4w2hgUz3YA32ykw5MLlKpX0K8NHHQQ4Iyu8u01E@public.gmane.org>
2007-10-12 13:37 ` Arnd Bergmann
[not found] ` <200710121537.09238.arnd-r2nGTMty4D4@public.gmane.org>
2007-10-12 13:47 ` Carsten Otte
2007-10-12 15:08 ` Anthony Liguori
[not found] ` <470F8DFD.6030205-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-10-13 7:31 ` Carsten Otte
2007-10-13 4:08 ` Zhang, Xiantao
[not found] ` <42DFA526FC41B1429CE7279EF83C6BDC808DB9-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-13 7:38 ` Carsten Otte
2007-10-13 7:47 ` Avi Kivity
[not found] ` <471077F9.8000703-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-13 7:52 ` Carsten Otte
2007-10-15 8:18 ` Carsten Otte
[not found] ` <47132260.9030606-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-15 8:30 ` Christian Ehrhardt
2007-10-15 8:32 ` Avi Kivity
2007-10-25 15:48 ` RFC/patch portability: split kvm_vm_ioctl v2 Carsten Otte
[not found] ` <1193327325.8345.9.camel-WIxn4w2hgUz3YA32ykw5MLlKpX0K8NHHQQ4Iyu8u01E@public.gmane.org>
2007-10-25 15:48 ` Izik Eidus
[not found] ` <1193327326.3284.2.camel-siXIhNkUrCXckEVJwWePHtCfPAL7FxvL@public.gmane.org>
2007-10-25 16:22 ` Hollis Blanchard
2007-10-25 16:42 ` Izik Eidus
2007-10-25 22:12 ` Izik Eidus
[not found] ` <472114B6.6080000-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-25 20:51 ` [kvm-ppc-devel] " Hollis Blanchard
2007-10-25 22:58 ` Izik Eidus
[not found] ` <47211F86.1030504-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-26 0:19 ` Izik Eidus
[not found] ` <472132A4.604-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-26 8:17 ` Carsten Otte
2007-10-26 8:12 ` Avi Kivity
[not found] ` <4721A185.1070808-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-26 8:21 ` Carsten Otte
[not found] ` <4721A3A3.8020504-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-26 8:41 ` Carsten Otte
[not found] ` <4721A82A.2040402-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-26 9:22 ` Avi Kivity
[not found] ` <4721B1ED.6040006-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-26 10:30 ` Carsten Otte
[not found] ` <4721C1DB.3040207-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-26 10:36 ` Avi Kivity
[not found] ` <4721C330.3030302-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-26 10:42 ` Carsten Otte
[not found] ` <4721C47E.30800-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-26 10:45 ` Avi Kivity
[not found] ` <4721C53E.1070507-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-26 11:45 ` Carsten Otte
[not found] ` <4721D344.2020508-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-26 11:47 ` Avi Kivity
[not found] ` <4721D3C2.8090407-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-26 12:23 ` Carsten Otte
[not found] ` <4721DC5D.702-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-26 12:31 ` Avi Kivity
2007-10-26 9:08 ` Avi Kivity
2007-10-26 14:35 ` Hollis Blanchard
2007-10-26 14:43 ` Carsten Otte
[not found] ` <4721FD2A.6070504-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-26 19:05 ` Izik Eidus
[not found] ` <47223A85.5020409-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-29 8:04 ` Carsten Otte
2007-10-27 7:59 ` Avi Kivity
[not found] ` <4722EFE1.9060609-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-28 7:39 ` Zhang, Xiantao
[not found] ` <42DFA526FC41B1429CE7279EF83C6BDC8B512C-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-28 9:57 ` Avi Kivity
[not found] ` <47245D27.5030105-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-29 8:01 ` Carsten Otte
[not found] ` <47259352.3010109-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-29 8:03 ` Izik Eidus
[not found] ` <1193644998.4484.8.camel-siXIhNkUrCXckEVJwWePHtCfPAL7FxvL@public.gmane.org>
2007-10-29 8:16 ` Carsten Otte
2007-10-26 8:28 ` Carsten Otte
2007-10-26 1:05 ` Zhang, Xiantao
[not found] ` <42DFA526FC41B1429CE7279EF83C6BDC85FD78-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-26 14:53 ` Carsten Otte
2007-10-26 12:01 ` RFC/patch portability: split kvm_vm_ioctl v3 Carsten Otte
[not found] ` <1193400099.10970.8.camel-WIxn4w2hgUz3YA32ykw5MLlKpX0K8NHHQQ4Iyu8u01E@public.gmane.org>
2007-10-26 18:32 ` Hollis Blanchard [this message]
2007-10-30 10:51 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A024CEC4D-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-30 11:03 ` Avi Kivity
[not found] ` <47270F9E.5080007-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-30 11:27 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A024CEC54-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-30 11:59 ` Carsten Otte
[not found] ` <47271C9B.1050804-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-30 12:15 ` Avi Kivity
[not found] ` <4727204E.6000606-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-30 12:31 ` Carsten Otte
[not found] ` <47272410.9020502-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-30 12:36 ` Avi Kivity
[not found] ` <47272556.1030901-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-10-30 13:09 ` Carsten Otte
[not found] ` <47272D08.9080501-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-30 13:50 ` Avi Kivity
2007-10-30 15:02 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A024CECA8-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-30 15:57 ` Carsten Otte
[not found] ` <47275450.5010205-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-30 23:10 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A024CECF4-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-31 14:21 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A0250D495-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-11-05 9:00 ` Carsten Otte
[not found] ` <472EDBAF.30000-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-11-05 9:31 ` Arnd Bergmann
[not found] ` <200711051031.10846.arnd-r2nGTMty4D4@public.gmane.org>
2007-11-05 9:46 ` Carsten Otte
[not found] ` <472EE682.9000202-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-11-05 10:03 ` Arnd Bergmann
[not found] ` <200711051104.01061.arnd-r2nGTMty4D4@public.gmane.org>
2007-11-05 10:31 ` Christian Borntraeger
2007-10-30 11:44 ` Carsten Otte
[not found] ` <47271927.9060602-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-30 11:52 ` Avi Kivity
2007-10-30 11:29 ` Carsten Otte
[not found] ` <472715A9.4050201-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-10-30 11:35 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A024CEC59-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-10-30 12:18 ` Carsten Otte
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1193423523.31756.61.camel@basalt \
--to=hollisb-r/jw6+rmf7hqt0dzr+alfa@public.gmane.org \
--cc=avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org \
--cc=cotte-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=xiantao.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox