[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditiona
From: |
Blue Swirl |
Subject: |
Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally |
Date: |
Thu, 4 Oct 2012 16:54:12 +0000 |
On Thu, Oct 4, 2012 at 10:36 AM, Avi Kivity <address@hidden> wrote:
> The hassle and compile time overhead of maintaining both 32-bit and 64-bit
> capable source isn't worth the tiny performance advantage which is seen on
> a minority of configurations. Switch to compiling libhw only once, with
> target_phys_addr_t unconditionally typedefed to uint64_t.
>
> Signed-off-by: Avi Kivity <address@hidden>
> ---
>
> v2: no changes, but copied the maintainers of architectures that will
> see their target_phys_addr_t changed as a result. Please view and/or
> test.
Patch looks OK. After this change common CPU code like cputlb.c, which
only depends on sizeof(target_ulong), could be compiled as a library
like libhw32/libhw64 used to.
>
> .gitignore | 1 +
> Makefile | 2 +-
> Makefile.hw | 1 -
> Makefile.target | 3 ---
> configure | 34 ++++------------------------------
> cpu-common.h | 2 +-
> dma.h | 2 +-
> hw/hw.h | 2 +-
> hw/intel-hda.c | 8 +-------
> hw/rtl8139.c | 6 +-----
> monitor.c | 4 ----
> target-ppc/mmu_helper.c | 4 +---
> targphys.h | 19 +------------------
> 13 files changed, 13 insertions(+), 75 deletions(-)
>
> diff --git a/.gitignore b/.gitignore
> index 824c0d2..3ef77d0 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -12,6 +12,7 @@ trace-dtrace.dtrace
> *-linux-user
> *-bsd-user
> libdis*
> +libhw
> libhw32
> libhw64
> libuser
> diff --git a/Makefile b/Makefile
> index 0464297..1cebe3a 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -214,7 +214,7 @@ $(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
>
> qemu-ga$(EXESUF): qemu-ga.o $(qga-obj-y) $(tools-obj-y) $(qapi-obj-y)
> $(qobject-obj-y) $(version-obj-y)
>
> -QEMULIBS=libhw32 libhw64 libuser libdis libdis-user
> +QEMULIBS=libhw libuser libdis libdis-user
>
> clean:
> # avoid old build problems by removing potentially incorrect old files
> diff --git a/Makefile.hw b/Makefile.hw
> index 59f5b48..86f0bf4 100644
> --- a/Makefile.hw
> +++ b/Makefile.hw
> @@ -2,7 +2,6 @@
>
> include ../config-host.mak
> include ../config-all-devices.mak
> -include config.mak
> include $(SRC_PATH)/rules.mak
>
> .PHONY: all
> diff --git a/Makefile.target b/Makefile.target
> index d9d54b8..4449444 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -4,9 +4,6 @@ include ../config-host.mak
> include config-devices.mak
> include config-target.mak
> include $(SRC_PATH)/rules.mak
> -ifneq ($(HWDIR),)
> -include $(HWDIR)/config.mak
> -endif
>
> $(call set-vpath, $(SRC_PATH))
> ifdef CONFIG_LINUX
> diff --git a/configure b/configure
> index 8f99b7b..65bd876 100755
> --- a/configure
> +++ b/configure
> @@ -3694,7 +3694,6 @@ TARGET_ABI_DIR=""
>
> case "$target_arch2" in
> i386)
> - target_phys_bits=64
> ;;
> x86_64)
> TARGET_BASE_ARCH=i386
> @@ -3702,7 +3701,6 @@ case "$target_arch2" in
> target_long_alignment=8
> ;;
> alpha)
> - target_phys_bits=64
> target_long_alignment=8
> target_nptl="yes"
> ;;
> @@ -3711,22 +3709,18 @@ case "$target_arch2" in
> bflt="yes"
> target_nptl="yes"
> gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
> - target_phys_bits=64
> target_llong_alignment=4
> target_libs_softmmu="$fdt_libs"
> ;;
> cris)
> target_nptl="yes"
> - target_phys_bits=32
> ;;
> lm32)
> - target_phys_bits=32
> target_libs_softmmu="$opengl_libs"
> ;;
> m68k)
> bflt="yes"
> gdb_xml_files="cf-core.xml cf-fp.xml"
> - target_phys_bits=32
> target_int_alignment=2
> target_long_alignment=2
> target_llong_alignment=2
> @@ -3735,36 +3729,30 @@ case "$target_arch2" in
> TARGET_ARCH=microblaze
> bflt="yes"
> target_nptl="yes"
> - target_phys_bits=32
> target_libs_softmmu="$fdt_libs"
> ;;
> mips|mipsel)
> TARGET_ARCH=mips
> echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
> target_nptl="yes"
> - target_phys_bits=64
> ;;
> mipsn32|mipsn32el)
> TARGET_ARCH=mipsn32
> TARGET_BASE_ARCH=mips
> echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
> - target_phys_bits=64
> ;;
> mips64|mips64el)
> TARGET_ARCH=mips64
> TARGET_BASE_ARCH=mips
> echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
> - target_phys_bits=64
> target_long_alignment=8
> ;;
> or32)
> TARGET_ARCH=openrisc
> TARGET_BASE_ARCH=openrisc
> - target_phys_bits=32
> ;;
> ppc)
> gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml
> power-spe.xml"
> - target_phys_bits=64
> target_nptl="yes"
> target_libs_softmmu="$fdt_libs"
> ;;
> @@ -3772,7 +3760,6 @@ case "$target_arch2" in
> TARGET_BASE_ARCH=ppc
> TARGET_ABI_DIR=ppc
> gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml
> power-spe.xml"
> - target_phys_bits=64
> target_nptl="yes"
> target_libs_softmmu="$fdt_libs"
> ;;
> @@ -3780,7 +3767,6 @@ case "$target_arch2" in
> TARGET_BASE_ARCH=ppc
> TARGET_ABI_DIR=ppc
> gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml
> power-spe.xml"
> - target_phys_bits=64
> target_long_alignment=8
> target_libs_softmmu="$fdt_libs"
> ;;
> @@ -3790,21 +3776,17 @@ case "$target_arch2" in
> TARGET_ABI_DIR=ppc
> echo "TARGET_ABI32=y" >> $config_target_mak
> gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml
> power-spe.xml"
> - target_phys_bits=64
> target_libs_softmmu="$fdt_libs"
> ;;
> sh4|sh4eb)
> TARGET_ARCH=sh4
> bflt="yes"
> target_nptl="yes"
> - target_phys_bits=32
> ;;
> sparc)
> - target_phys_bits=64
> ;;
> sparc64)
> TARGET_BASE_ARCH=sparc
> - target_phys_bits=64
> target_long_alignment=8
> ;;
> sparc32plus)
> @@ -3812,11 +3794,9 @@ case "$target_arch2" in
> TARGET_BASE_ARCH=sparc
> TARGET_ABI_DIR=sparc
> echo "TARGET_ABI32=y" >> $config_target_mak
> - target_phys_bits=64
> ;;
> s390x)
> target_nptl="yes"
> - target_phys_bits=64
> target_long_alignment=8
> ;;
> unicore32)
> @@ -3824,7 +3804,6 @@ case "$target_arch2" in
> ;;
> xtensa|xtensaeb)
> TARGET_ARCH=xtensa
> - target_phys_bits=32
> ;;
> *)
> echo "Unsupported target CPU"
> @@ -3859,7 +3838,6 @@ echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >>
> $config_target_mak
> case "$target_arch2" in
> i386|x86_64)
> if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
> - target_phys_bits=64
> echo "CONFIG_XEN=y" >> $config_target_mak
> if test "$xen_pci_passthrough" = yes; then
> echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
> @@ -3899,11 +3877,10 @@ if test "$target_bigendian" = "yes" ; then
> echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
> fi
> if test "$target_softmmu" = "yes" ; then
> - echo "TARGET_PHYS_ADDR_BITS=$target_phys_bits" >> $config_target_mak
> echo "CONFIG_SOFTMMU=y" >> $config_target_mak
> echo "LIBS+=$libs_softmmu $target_libs_softmmu" >> $config_target_mak
> - echo "HWDIR=../libhw$target_phys_bits" >> $config_target_mak
> - echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak
> + echo "HWDIR=../libhw" >> $config_target_mak
> + echo "subdir-$target: subdir-libhw" >> $config_host_mak
> if test "$smartcard_nss" = "yes" ; then
> echo "subdir-$target: subdir-libcacard" >> $config_host_mak
> fi
> @@ -4145,11 +4122,8 @@ for rom in seabios vgabios ; do
> echo "LD=$ld" >> $config_mak
> done
>
> -for hwlib in 32 64; do
> - d=libhw$hwlib
> - symlink "$source_path/Makefile.hw" "$d/Makefile"
> - echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" > $d/config.mak
> -done
> +d=libhw
> +symlink "$source_path/Makefile.hw" "$d/Makefile"
>
> d=libuser
> symlink "$source_path/Makefile.user" "$d/Makefile"
> diff --git a/cpu-common.h b/cpu-common.h
> index 85548de..c0d27af 100644
> --- a/cpu-common.h
> +++ b/cpu-common.h
> @@ -21,7 +21,7 @@ enum device_endian {
> };
>
> /* address in the RAM (different from a physical address) */
> -#if defined(CONFIG_XEN_BACKEND) && TARGET_PHYS_ADDR_BITS == 64
> +#if defined(CONFIG_XEN_BACKEND)
> typedef uint64_t ram_addr_t;
> # define RAM_ADDR_MAX UINT64_MAX
> # define RAM_ADDR_FMT "%" PRIx64
> diff --git a/dma.h b/dma.h
> index f35c4b6..1a33603 100644
> --- a/dma.h
> +++ b/dma.h
> @@ -31,7 +31,7 @@ struct QEMUSGList {
> DMAContext *dma;
> };
>
> -#if defined(TARGET_PHYS_ADDR_BITS)
> +#ifndef CONFIG_USER_ONLY
>
> /*
> * When an IOMMU is present, bus addresses become distinct from
> diff --git a/hw/hw.h b/hw/hw.h
> index e5cb9bf..16101de 100644
> --- a/hw/hw.h
> +++ b/hw/hw.h
> @@ -4,7 +4,7 @@
>
> #include "qemu-common.h"
>
> -#if defined(TARGET_PHYS_ADDR_BITS) && !defined(NEED_CPU_H)
> +#if !defined(CONFIG_USER_ONLY) && !defined(NEED_CPU_H)
> #include "cpu-common.h"
> #endif
>
> diff --git a/hw/intel-hda.c b/hw/intel-hda.c
> index 127e818..d8e1b23 100644
> --- a/hw/intel-hda.c
> +++ b/hw/intel-hda.c
> @@ -210,13 +210,7 @@ static target_phys_addr_t intel_hda_addr(uint32_t lbase,
> uint32_t ubase)
> {
> target_phys_addr_t addr;
>
> -#if TARGET_PHYS_ADDR_BITS == 32
> - addr = lbase;
> -#else
> - addr = ubase;
> - addr <<= 32;
> - addr |= lbase;
> -#endif
> + addr = ((uint64_t)ubase << 32) | lbase;
> return addr;
> }
>
> diff --git a/hw/rtl8139.c b/hw/rtl8139.c
> index 844f1b8..b7c82ee 100644
> --- a/hw/rtl8139.c
> +++ b/hw/rtl8139.c
> @@ -774,11 +774,7 @@ static void rtl8139_write_buffer(RTL8139State *s, const
> void *buf, int size)
> #define MIN_BUF_SIZE 60
> static inline dma_addr_t rtl8139_addr64(uint32_t low, uint32_t high)
> {
> -#if TARGET_PHYS_ADDR_BITS > 32
> - return low | ((target_phys_addr_t)high << 32);
> -#else
> - return low;
> -#endif
> + return low | ((uint64_t)high << 32);
> }
>
> /* Workaround for buggy guest driver such as linux who allocates rx
> diff --git a/monitor.c b/monitor.c
> index 67064e2..7beac9a 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -3259,11 +3259,7 @@ static int64_t expr_unary(Monitor *mon)
> break;
> default:
> errno = 0;
> -#if TARGET_PHYS_ADDR_BITS > 32
> n = strtoull(pch, &p, 0);
> -#else
> - n = strtoul(pch, &p, 0);
> -#endif
> if (errno == ERANGE) {
> expr_error(mon, "number too large");
> }
> diff --git a/target-ppc/mmu_helper.c b/target-ppc/mmu_helper.c
> index d2664ac..532b114 100644
> --- a/target-ppc/mmu_helper.c
> +++ b/target-ppc/mmu_helper.c
> @@ -1032,12 +1032,10 @@ static int ppcemb_tlb_check(CPUPPCState *env,
> ppcemb_tlb_t *tlb,
> return -1;
> }
> *raddrp = (tlb->RPN & mask) | (address & ~mask);
> -#if (TARGET_PHYS_ADDR_BITS >= 36)
> if (ext) {
> /* Extend the physical address to 36 bits */
> - *raddrp |= (target_phys_addr_t)(tlb->RPN & 0xF) << 32;
> + *raddrp |= (uint64_t)(tlb->RPN & 0xF) << 32;
> }
> -#endif
>
> return 0;
> }
> diff --git a/targphys.h b/targphys.h
> index bd4938f..08cade9 100644
> --- a/targphys.h
> +++ b/targphys.h
> @@ -3,25 +3,10 @@
> #ifndef TARGPHYS_H
> #define TARGPHYS_H
>
> -#ifdef TARGET_PHYS_ADDR_BITS
> +#define TARGET_PHYS_ADDR_BITS 64
> /* target_phys_addr_t is the type of a physical address (its size can
> be different from 'target_ulong'). */
>
> -#if TARGET_PHYS_ADDR_BITS == 32
> -typedef uint32_t target_phys_addr_t;
> -#define TARGET_PHYS_ADDR_MAX UINT32_MAX
> -#define TARGET_FMT_plx "%08x"
> -/* Format strings for printing target_phys_addr_t types.
> - * These are recommended over the less flexible TARGET_FMT_plx,
> - * which is retained for the benefit of existing code.
> - */
> -#define TARGET_PRIdPHYS PRId32
> -#define TARGET_PRIiPHYS PRIi32
> -#define TARGET_PRIoPHYS PRIo32
> -#define TARGET_PRIuPHYS PRIu32
> -#define TARGET_PRIxPHYS PRIx32
> -#define TARGET_PRIXPHYS PRIX32
> -#elif TARGET_PHYS_ADDR_BITS == 64
> typedef uint64_t target_phys_addr_t;
> #define TARGET_PHYS_ADDR_MAX UINT64_MAX
> #define TARGET_FMT_plx "%016" PRIx64
> @@ -31,7 +16,5 @@ typedef uint64_t target_phys_addr_t;
> #define TARGET_PRIuPHYS PRIu64
> #define TARGET_PRIxPHYS PRIx64
> #define TARGET_PRIXPHYS PRIX64
> -#endif
> -#endif
>
> #endif
> --
> 1.7.12
>
- [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Avi Kivity, 2012/10/04
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Edgar E. Iglesias, 2012/10/04
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Max Filippov, 2012/10/04
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Anthony Liguori, 2012/10/04
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally,
Blue Swirl <=
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Michael Walle, 2012/10/04
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Stefan Weil, 2012/10/04
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Anthony Liguori, 2012/10/04
- Re: [Qemu-devel] [PATCH v2] Make target_phys_addr_t 64 bits unconditionally, Peter Maydell, 2012/10/05