qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] xen: Use conditional compilation for xen map ca


From: Jan Kiszka
Subject: Re: [Qemu-devel] [PATCH] xen: Use conditional compilation for xen map cache (fixes w32 builds)
Date: Wed, 18 May 2011 20:02:22 +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

On 2011-05-18 19:40, Stefan Weil wrote:
> The current implementation used stubs for systems without XEN.
> This is unusual for QEMU and adds unneeded dependencies.
> 
> MinGW32 for example does not provide munmap(), so the XEN
> code creates compiler warnings (missing prototype).
> Compilations without optimisation even result in linker
> errors (missing function).
> 
> Fix this by using conditional compilation.
> 
> Cc: Anthony PERARD <address@hidden>
> Cc: Alexander Graf <address@hidden>
> Signed-off-by: Stefan Weil <address@hidden>
> ---
>  exec.c |   22 +++++++++++++++++++---
>  1 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/exec.c b/exec.c
> index a6df2d6..7075e98 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -31,6 +31,7 @@
>  #include "hw/hw.h"
>  #include "hw/qdev.h"
>  #include "osdep.h"
> +#include "trace.h"
>  #include "kvm.h"
>  #include "hw/xen.h"
>  #include "qemu-timer.h"
> @@ -53,8 +54,10 @@
>  #endif
>  #endif
>  #else /* !CONFIG_USER_ONLY */
> +#if defined(CONFIG_XEN_MAPCACHE)
>  #include "xen-mapcache.h"
>  #endif
> +#endif
>  
>  //#define DEBUG_TB_INVALIDATE
>  //#define DEBUG_FLUSH
> @@ -2914,12 +2917,14 @@ ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev, 
> const char *name,
>              new_block->host = mmap((void*)0x1000000, size,
>                                     PROT_EXEC|PROT_READ|PROT_WRITE,
>                                     MAP_SHARED | MAP_ANONYMOUS, -1, 0);
> -#else
> +#elif defined(CONFIG_XEN_MAPCACHE)
>              if (xen_mapcache_enabled()) {
>                  xen_ram_alloc(new_block->offset, size);
>              } else {
>                  new_block->host = qemu_vmalloc(size);
>              }
> +#else
> +            new_block->host = qemu_vmalloc(size);
>  #endif
>              qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE);
>          }
> @@ -2967,12 +2972,14 @@ void qemu_ram_free(ram_addr_t addr)
>              } else {
>  #if defined(TARGET_S390X) && defined(CONFIG_KVM)
>                  munmap(block->host, block->length);
> -#else
> +#elif defined(CONFIG_XEN_MAPCACHE)
>                  if (xen_mapcache_enabled()) {
>                      qemu_invalidate_entry(block->host);
>                  } else {
>                      qemu_vfree(block->host);
>                  }
> +#else
> +                qemu_vfree(block->host);
>  #endif
>              }
>              qemu_free(block);
> @@ -3061,6 +3068,7 @@ void *qemu_get_ram_ptr(ram_addr_t addr)
>                  QLIST_REMOVE(block, next);
>                  QLIST_INSERT_HEAD(&ram_list.blocks, block, next);
>              }
> +#if defined(CONFIG_XEN_MAPCACHE)
>              if (xen_mapcache_enabled()) {
>                  /* We need to check if the requested address is in the RAM
>                   * because we don't want to map the entire memory in QEMU.
> @@ -3071,6 +3079,7 @@ void *qemu_get_ram_ptr(ram_addr_t addr)
>                      block->host = xen_map_block(block->offset, 
> block->length);
>                  }
>              }
> +#endif
>              return block->host + (addr - block->offset);
>          }
>      }
> @@ -3090,6 +3099,7 @@ void *qemu_safe_ram_ptr(ram_addr_t addr)
>  
>      QLIST_FOREACH(block, &ram_list.blocks, next) {
>          if (addr - block->offset < block->length) {
> +#if defined(CONFIG_XEN_MAPCACHE)
>              if (xen_mapcache_enabled()) {
>                  /* We need to check if the requested address is in the RAM
>                   * because we don't want to map the entire memory in QEMU.
> @@ -3100,6 +3110,7 @@ void *qemu_safe_ram_ptr(ram_addr_t addr)
>                      block->host = xen_map_block(block->offset, 
> block->length);
>                  }
>              }
> +#endif
>              return block->host + (addr - block->offset);
>          }
>      }
> @@ -3113,7 +3124,7 @@ void *qemu_safe_ram_ptr(ram_addr_t addr)
>  void qemu_put_ram_ptr(void *addr)
>  {
>      trace_qemu_put_ram_ptr(addr);
> -
> +#if defined(CONFIG_XEN_MAPCACHE)
>      if (xen_mapcache_enabled()) {
>          RAMBlock *block;
>  
> @@ -3129,6 +3140,7 @@ void qemu_put_ram_ptr(void *addr)
>              qemu_map_cache_unlock(addr);
>          }
>      }
> +#endif
>  }
>  
>  int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
> @@ -3147,10 +3159,12 @@ int qemu_ram_addr_from_host(void *ptr, ram_addr_t 
> *ram_addr)
>          }
>      }
>  
> +#if defined(CONFIG_XEN_MAPCACHE)
>      if (xen_mapcache_enabled()) {
>          *ram_addr = qemu_ram_addr_from_mapcache(ptr);
>          return 0;
>      }
> +#endif
>  
>      return -1;
>  }
> @@ -4059,6 +4073,7 @@ void cpu_physical_memory_unmap(void *buffer, 
> target_phys_addr_t len,
>                  access_len -= l;
>              }
>          }
> +#if defined(CONFIG_XEN_MAPCACHE)
>          if (xen_mapcache_enabled()) {
>              uint8_t *buffer1 = buffer;
>              uint8_t *end_buffer = buffer + len;
> @@ -4068,6 +4083,7 @@ void cpu_physical_memory_unmap(void *buffer, 
> target_phys_addr_t len,
>                  buffer1 += TARGET_PAGE_SIZE;
>              }
>          }
> +#endif
>          return;
>      }
>      if (is_write) {

Doesn't that obsolete xen-mapcache-stub.c? Then please remove it as well.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux



reply via email to

[Prev in Thread] Current Thread [Next in Thread]