[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM |
Date: |
Fri, 24 Jul 2009 12:59:17 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 |
Alexander Graf wrote:
> When talking to the kernel about dirty maps, we need to find out which
> bits were actually set. This is done by set_bit and test_bit like
> functiontality which uses the "long" variable type.
>
> Now, with PPC32 userspace and PPC64 kernel space (which is pretty common),
> we can't interpret the bits properly anymore, because we think long is
> 32 bits wide.
>
> So for PPC dirty bitmap analysis, let's just assume we're always running
> on a PPC64 host. Currently there is no dirty bitmap implementation for
> PPC32 / PPCEMB anyways.
>
> Unbreaks dirty logging on PPC.
>
> Signed-off-by: Alexander Graf <address@hidden>
> ---
> kvm-all.c | 6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/kvm-all.c b/kvm-all.c
> index 824bb4c..bfaa623 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -357,7 +357,13 @@ int kvm_physical_sync_dirty_bitmap(target_phys_addr_t
> start_addr,
> for (phys_addr = mem->start_addr, addr = mem->phys_offset;
> phys_addr < mem->start_addr + mem->memory_size;
> phys_addr += TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
> +#ifdef HOST_PPC
> + /* Big endian keeps us from having different long sizes in user
> and
> + * kernel space, so assume we're always on ppc64. */
> + uint64_t *bitmap = (uint64_t *)d.dirty_bitmap;
> +#else
> unsigned long *bitmap = (unsigned long *)d.dirty_bitmap;
> +#endif
> unsigned nr = (phys_addr - mem->start_addr) >> TARGET_PAGE_BITS;
> unsigned word = nr / (sizeof(*bitmap) * 8);
> unsigned bit = nr % (sizeof(*bitmap) * 8);
This rather screams for a generic fix. Current code assumes
sizeof(unsigned long) == 8. That should already break on 32-bit x86
hosts. So either do (sizeof(*bitmap) * sizeof(unsigned long)) or switch
to uint64_t - but for ALL hosts.
Jan
--
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux
- [Qemu-devel] [PATCH 0/3] PPC KVM bringup patches round 2, Alexander Graf, 2009/07/23
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM,
Jan Kiszka <=
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Alexander Graf, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Jan Kiszka, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Alexander Graf, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Jan Kiszka, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Alexander Graf, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Jan Kiszka, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Alexander Graf, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Jan Kiszka, 2009/07/24
- [Qemu-devel] Re: [PATCH 2/3] Assume PPC64 host on PPC32 KVM, Alexander Graf, 2009/07/24