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

Re: [Xen-devel] [PATCH 2/3] xen: arm: include public/xen.h in foreign interface checking



ping? Also for the 3/3 patch.

On Wed, 2013-03-13 at 12:45 +0000, Ian Campbell wrote:
> mkheader.py doesn't cope with
>       structr foo { };
> so add a newline.
> 
> Define unsigned long and long to a non-existent type on ARM so as to catch
> their use.
> 
> Teach mkheader.py to cope with structs which are ifdef'd.
> 
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Jan Beulich <JBeulich@xxxxxxxx>
> Cc: Keir (Xen.org) <keir@xxxxxxx>
> Cc: Tim Deegan <tim@xxxxxxx>
> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> ---
> v3: rework for ifdeffed instead of moved start_info.
> ---
>  tools/include/xen-foreign/Makefile       |    4 ++--
>  tools/include/xen-foreign/mkheader.py    |   14 +++++++++-----
>  tools/include/xen-foreign/reference.size |   10 +++++-----
>  tools/include/xen-foreign/structs.py     |    2 ++
>  xen/include/public/arch-arm.h            |    8 +++++---
>  xen/include/public/xen.h                 |    2 +-
>  6 files changed, 24 insertions(+), 16 deletions(-)
> 
> diff --git a/tools/include/xen-foreign/Makefile 
> b/tools/include/xen-foreign/Makefile
> index 8e0be83..06b844c 100644
> --- a/tools/include/xen-foreign/Makefile
> +++ b/tools/include/xen-foreign/Makefile
> @@ -22,10 +22,10 @@ check-headers: checker
>       diff -u reference.size tmp.size
>       rm tmp.size
>  
> -arm32.h: mkheader.py structs.py $(ROOT)/arch-arm.h
> +arm32.h: mkheader.py structs.py $(ROOT)/arch-arm.h $(ROOT)/xen.h
>       $(PYTHON) $< $* $@ $(filter %.h,$^)
>  
> -arm64.h: mkheader.py structs.py $(ROOT)/arch-arm.h
> +arm64.h: mkheader.py structs.py $(ROOT)/arch-arm.h $(ROOT)/xen.h
>       $(PYTHON) $< $* $@ $(filter %.h,$^)
>  
>  x86_32.h: mkheader.py structs.py $(ROOT)/arch-x86/xen-x86_32.h 
> $(ROOT)/arch-x86/xen.h $(ROOT)/xen.h
> diff --git a/tools/include/xen-foreign/mkheader.py 
> b/tools/include/xen-foreign/mkheader.py
> index b19292f..0504cb8 100644
> --- a/tools/include/xen-foreign/mkheader.py
> +++ b/tools/include/xen-foreign/mkheader.py
> @@ -18,8 +18,8 @@ footer = {};
>  
>  #arm
>  inttypes["arm32"] = {
> -    "unsigned long" : "uint32_t",
> -    "long"          : "uint32_t",
> +    "unsigned long" : "__danger_unsigned_long_on_arm32",
> +    "long"          : "__danger_long_on_arm32",
>      "xen_pfn_t"     : "__align8__ uint64_t",
>      "xen_ulong_t"   : "__align8__ uint64_t",
>      "uint64_t"      : "__align8__ uint64_t",
> @@ -124,6 +124,8 @@ if arch in header:
>      output += header[arch];
>      output += "\n";
>  
> +defined = {}
> +
>  # add defines to output
>  for line in re.findall("#define[^\n]+", input):
>      for define in defines:
> @@ -131,6 +133,7 @@ for line in re.findall("#define[^\n]+", input):
>          match = re.search(regex, line);
>          if None == match:
>              continue;
> +        defined[define] = 1
>          if define.upper()[0] == define[0]:
>              replace = define + "_" + arch.upper();
>          else:
> @@ -156,12 +159,13 @@ for union in unions:
>  
>  # add structs to output
>  for struct in structs:
> -    regex = "struct\s+%s\s*\{(.*?)\n\};" % struct;
> +    regex = "(?:#ifdef ([A-Z_]+))?\nstruct\s+%s\s*\{(.*?)\n\};" % struct;
>      match = re.search(regex, input, re.S)
> -    if None == match:
> +    if None == match or \
> +           (match.group(1) is not None and match.group(1) not in defined):
>          output += "#define %s_has_no_%s 1\n" % (arch, struct);
>      else:
> -        output += "struct %s_%s {%s\n};\n" % (struct, arch, match.group(1));
> +        output += "struct %s_%s {%s\n};\n" % (struct, arch, match.group(2));
>          output += "typedef struct %s_%s %s_%s_t;\n" % (struct, arch, struct, 
> arch);
>      output += "\n";
>  
> diff --git a/tools/include/xen-foreign/reference.size 
> b/tools/include/xen-foreign/reference.size
> index de36455..b3347b4 100644
> --- a/tools/include/xen-foreign/reference.size
> +++ b/tools/include/xen-foreign/reference.size
> @@ -6,9 +6,9 @@ trap_info                 |       -       -       8      16
>  cpu_user_regs             |       -       -      68     200
>  vcpu_guest_core_regs      |     304     304       -       -
>  vcpu_guest_context        |     336     336    2800    5168
> -arch_vcpu_info            |       -       -      24      16
> -vcpu_time_info            |       -       -      32      32
> -vcpu_info                 |       -       -      64      64
> -arch_shared_info          |       -       -     268     280
> -shared_info               |       -       -    2584    3368
> +arch_vcpu_info            |       0       0      24      16
> +vcpu_time_info            |      32      32      32      32
> +vcpu_info                 |      48      48      64      64
> +arch_shared_info          |       0       0     268     280
> +shared_info               |    1088    1088    2584    3368
>  
> diff --git a/tools/include/xen-foreign/structs.py 
> b/tools/include/xen-foreign/structs.py
> index 0b33a77..476eb85 100644
> --- a/tools/include/xen-foreign/structs.py
> +++ b/tools/include/xen-foreign/structs.py
> @@ -19,6 +19,8 @@ defines = [ "__arm__",
>              "__i386__",
>              "__x86_64__",
>  
> +            "XEN_HAVE_PV_GUEST_ENTRY",
> +
>              # arm
>              # None
>  
> diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
> index 3333399..8c63d4a 100644
> --- a/xen/include/public/arch-arm.h
> +++ b/xen/include/public/arch-arm.h
> @@ -184,14 +184,16 @@ struct vcpu_guest_context {
>  typedef struct vcpu_guest_context vcpu_guest_context_t;
>  DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
>  
> -struct arch_vcpu_info { };
> +struct arch_vcpu_info {
> +};
>  typedef struct arch_vcpu_info arch_vcpu_info_t;
>  
> -struct arch_shared_info { };
> +struct arch_shared_info {
> +};
>  typedef struct arch_shared_info arch_shared_info_t;
>  typedef uint64_t xen_callback_t;
>  
> -#endif /* ifndef __ASSEMBLY __ */
> +#endif
>  
>  /* PSR bits (CPSR, SPSR)*/
>  
> diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h
> index 0d92b1f..ef78846 100644
> --- a/xen/include/public/xen.h
> +++ b/xen/include/public/xen.h
> @@ -706,7 +706,6 @@ typedef struct shared_info shared_info_t;
>   *     extended by an extra 4MB to ensure this.
>   */
>  #ifdef XEN_HAVE_PV_GUEST_ENTRY
> -#define MAX_GUEST_CMDLINE 1024
>  struct start_info {
>      /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME.    */
>      char magic[32];             /* "xen-<version>-<platform>".            */
> @@ -733,6 +732,7 @@ struct start_info {
>                                  /* (PFN of pre-loaded module if           */
>                                  /*  SIF_MOD_START_PFN set in flags).      */
>      unsigned long mod_len;      /* Size (bytes) of pre-loaded module.     */
> +#define MAX_GUEST_CMDLINE 1024
>      int8_t cmd_line[MAX_GUEST_CMDLINE];
>      /* The pfn range here covers both page table and p->m table frames.   */
>      unsigned long first_p2m_pfn;/* 1st pfn forming initial P->M table.    */



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.