Ian Campbell
2013-Jul-19 11:49 UTC
[PATCH v6 0/5] xen: public interface and foreign struct check changes for arm
I''m still not entirely sure whose Ack is needed for tools/include/xen-foreign changes. At this stage I''ll take whatever I can get ;-) Changes since v6: Move the COMPAT_HAVE_FOO defines from public headers into asm/config.h Handle a new use of evtchn_mask in common code (with an ifdef, which I''m not entirely satisfied with)
Ian Campbell
2013-Jul-19 11:51 UTC
[PATCH v6 1/5] xen/compat: support XEN_HAVE_FOO ifdefs in public interface
This allows us expose or hide interface features on different architectures without requiring nasty arch-specific ifdeffery. Preserves any #ifdef with a XEN_HAVE_* symbol name, as well as any #else or The ifdef symbol becomes COMPAT_HAVE in the compat versions so that architectures can enable or disable interfaces for compat mode too. (This actually just fell out of the way the existing stuff works and it didn''t seem worth jumping through hoops to make the name remain XEN_HAVE). Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: Jan Beulich <jbeulich@suse.com> --- xen/tools/compat-build-header.py | 3 +++ xen/tools/compat-build-source.py | 3 +++ 2 files changed, 6 insertions(+), 0 deletions(-) diff --git a/xen/tools/compat-build-header.py b/xen/tools/compat-build-header.py index fba2f37..e296062 100755 --- a/xen/tools/compat-build-header.py +++ b/xen/tools/compat-build-header.py @@ -4,6 +4,9 @@ import re,sys pats = [ [ r"__InClUdE__(.*)", r"#include\1\n#pragma pack(4)" ], + [ r"__IfDeF__ (XEN_HAVE.*)", r"#ifdef \1" ], + [ r"__ElSe__", r"#else" ], + [ r"__EnDif__", r"#endif" ], [ r"\"xen-compat.h\"", r"<public/xen-compat.h>" ], [ r"(struct|union|enum)\s+(xen_?)?(\w)", r"\1 compat_\3" ], [ r"@KeeP@", r"" ], diff --git a/xen/tools/compat-build-source.py b/xen/tools/compat-build-source.py index 3906b71..55206e6 100755 --- a/xen/tools/compat-build-source.py +++ b/xen/tools/compat-build-source.py @@ -4,6 +4,9 @@ import re,sys pats = [ [ r"^\s*#\s*include\s+", r"__InClUdE__ " ], + [ r"^\s*#\s*ifdef (XEN_HAVE.*)\s+", r"__IfDeF__ \1" ], + [ r"^\s*#\s*else /\* (XEN_HAVE.*) \*/\s+", r"__ElSe__" ], + [ r"^\s*#\s*endif /\* (XEN_HAVE.*) \*/\s+", r"__EnDif__" ], [ r"^\s*#\s*define\s+([A-Z_]*_GUEST_HANDLE)", r"#define HIDE_\1" ], [ r"^\s*#\s*define\s+([a-z_]*_guest_handle)", r"#define hide_\1" ], [ r"XEN_GUEST_HANDLE(_[0-9A-Fa-f]+)?", r"COMPAT_HANDLE" ], -- 1.7.2.5
Ian Campbell
2013-Jul-19 11:51 UTC
[PATCH v6 2/5] xen: only expose start_info on architectures which have a PV boot path
Most of this struct is PV MMU specific and it is not used on ARM at all. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Jan Beulich <JBeulich@suse.com> Cc: Keir (Xen.org) <keir@xen.org> Cc: Tim Deegan <tim@xen.org> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- v6: move compat #define into x86 config.h to remove it from public header. v3: Renamed from "xen: make start_info x86 specific." and use an ifdef instead of moving the definition. --- tools/libxc/xenctrl.h | 5 ++--- xen/include/asm-x86/config.h | 1 + xen/include/public/arch-x86/xen.h | 2 ++ xen/include/public/xen.h | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h index 388a9c3..f2cebaf 100644 --- a/tools/libxc/xenctrl.h +++ b/tools/libxc/xenctrl.h @@ -408,15 +408,14 @@ typedef union shared_info_t s; } shared_info_any_t; +#if defined(__i386__) || defined(__x86_64__) typedef union { -#if defined(__i386__) || defined(__x86_64__) start_info_x86_64_t x64; start_info_x86_32_t x32; -#endif start_info_t s; } start_info_any_t; - +#endif int xc_domain_create(xc_interface *xch, uint32_t ssidref, diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index 0044edb..5d79593 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -264,6 +264,7 @@ extern unsigned char boot_edid_info[128]; (COMPAT_L2_PAGETABLE_LAST_XEN_SLOT - COMPAT_L2_PAGETABLE_FIRST_XEN_SLOT(d) + 1) #define COMPAT_LEGACY_MAX_VCPUS XEN_LEGACY_MAX_VCPUS +#define COMPAT_HAVE_PV_GUEST_ENTRY XEN_HAVE_PV_GUEST_ENTRY #endif diff --git a/xen/include/public/arch-x86/xen.h b/xen/include/public/arch-x86/xen.h index b7f6a51..7ae8c90 100644 --- a/xen/include/public/arch-x86/xen.h +++ b/xen/include/public/arch-x86/xen.h @@ -70,6 +70,8 @@ typedef unsigned long xen_pfn_t; #define PRI_xen_pfn "lx" #endif +#define XEN_HAVE_PV_GUEST_ENTRY 1 + /* * `incontents 200 segdesc Segment Descriptor Tables */ diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index 3cab74f..2414e7e 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -716,7 +716,7 @@ typedef struct shared_info shared_info_t; * 32-bit and runs under a 64-bit hypervisor should _NOT_ use two of the * pages preceding pt_base and mark them as reserved/unused. */ - +#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. */ @@ -756,6 +756,7 @@ typedef struct start_info start_info_t; #define console_mfn console.domU.mfn #define console_evtchn console.domU.evtchn #endif +#endif /* XEN_HAVE_PV_GUEST_ENTRY */ /* These flags are passed in the ''flags'' field of start_info_t. */ #define SIF_PRIVILEGED (1<<0) /* Is the domain privileged? */ -- 1.7.2.5
Ian Campbell
2013-Jul-19 11:51 UTC
[PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking
mkheader.py doesn''t cope with struct 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@citrix.com> Cc: Jan Beulich <JBeulich@suse.com> Cc: Keir (Xen.org) <keir@xen.org> Cc: Tim Deegan <tim@xen.org> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- 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 8aa62d3..93c420c 100644 --- a/xen/include/public/arch-arm.h +++ b/xen/include/public/arch-arm.h @@ -195,14 +195,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 2414e7e..037540d 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -717,7 +717,6 @@ typedef struct shared_info shared_info_t; * pages preceding pt_base and mark them as reserved/unused. */ #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>". */ @@ -744,6 +743,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. */ -- 1.7.2.5
Ian Campbell
2013-Jul-19 11:51 UTC
[PATCH v6 4/5] tools: foreign: add checks for compatible architectures
That is architectures whose struct layout must be identical. Use this for arm32 and arm64. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: Jan Beulich <JBeulich@suse.com> Cc: Keir (Xen.org) <keir@xen.org> Cc: Tim Deegan <tim@xen.org> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- tools/include/xen-foreign/mkchecker.py | 21 +++++++++++++++++++-- tools/include/xen-foreign/structs.py | 5 +++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/tools/include/xen-foreign/mkchecker.py b/tools/include/xen-foreign/mkchecker.py index 66c17b1..fdad869 100644 --- a/tools/include/xen-foreign/mkchecker.py +++ b/tools/include/xen-foreign/mkchecker.py @@ -1,7 +1,7 @@ #!/usr/bin/python import sys; -from structs import structs; +from structs import structs, compat_arches; # command line arguments outfile = sys.argv[1]; @@ -37,10 +37,27 @@ for struct in structs: f.write(''\tprintf("%%-25s |", "%s");\n'' % struct); for a in archs: s = struct + "_" + a; + if compat_arches.has_key(a): + compat = compat_arches[a] + c = struct + "_" + compat; + else: + compat = None f.write(''#ifdef %s_has_no_%s\n'' % (a, struct)); - f.write(''\tprintf("%8s", "-");\n''); + f.write(''\tprintf("%8s",\n''); + if compat: + f.write(''# ifndef %s_has_no_%s\n'' % (compat, struct)); + f.write(''\t\t"!"\n''); + f.write(''# else\n'') + f.write(''\t\t"-"\n''); + f.write(''# endif\n'') + else: + f.write(''\t\t"-"\n''); + f.write(''\t);\n'') f.write("#else\n"); f.write(''\tprintf("%%8zd", sizeof(struct %s));\n'' % s); + if compat: + f.write(''\tif (sizeof(struct %s) != sizeof(struct %s))\n'' % (s, c)) + f.write(''\t\tprintf("!");\n'') f.write("#endif\n"); f.write(''\tprintf("\\n");\n\n''); diff --git a/tools/include/xen-foreign/structs.py b/tools/include/xen-foreign/structs.py index 476eb85..3d9f2fe 100644 --- a/tools/include/xen-foreign/structs.py +++ b/tools/include/xen-foreign/structs.py @@ -58,3 +58,8 @@ defines = [ "__arm__", "XEN_LEGACY_MAX_VCPUS", "MAX_GUEST_CMDLINE" ]; +# Architectures which must be compatible, i.e. identical +compat_arches = { + ''arm32'': ''arm64'', + ''arm64'': ''arm32'', +} -- 1.7.2.5
Ian Campbell
2013-Jul-19 11:51 UTC
[PATCH v6 5/5] xen: remove evtchn_upcall_mask from interface on ARM
On ARM event-channel upcalls are masked using the hardware''s interrupt mask bit and not by a software bit. Leaving this field present in the interface has caused some confusion already and is liable to mean it gets inadvertently used in the future. So arrange for this field to be turned into a padding field on ARM by introducing a XEN_HAVE_PV_UPCALL_MASK define. This bit is also unused for x86 PV-on-HVM guests, but we can''t realistically distinguish those from x86 PV guests in the headers. Add a per-arch vcpu_event_delivery_is_enabled function to replace an open coded use of evtchn_upcall_mask in common code (in a debug keyhandler). The existing local_event_delivery_is_enabled, which operates only on current, was unimplemented on ARM and unused on x86, so remove it. ifdef the use of evtchn_upcall_mask when setting up a new vcpu info page. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Cc: keir@xen.org Cc: jbeulich@suse.com --- v6: move compat #define into x86 config.h to remove it from public header, fixup new usage of upcall mask in common code. --- xen/common/domain.c | 2 ++ xen/common/keyhandler.c | 2 +- xen/include/asm-arm/event.h | 13 +++++++------ xen/include/asm-x86/config.h | 1 + xen/include/asm-x86/event.h | 10 +++++----- xen/include/public/arch-x86/xen.h | 2 ++ xen/include/public/xen.h | 4 ++++ 7 files changed, 22 insertions(+), 12 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 6c264a5..9390a22 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -921,7 +921,9 @@ int map_vcpu_info(struct vcpu *v, unsigned long gfn, unsigned offset) if ( v->vcpu_info == &dummy_vcpu_info ) { memset(new_info, 0, sizeof(*new_info)); +#ifdef XEN_HAVE_PV_UPCALL_MASK __vcpu_info(v, new_info, evtchn_upcall_mask) = 1; +#endif } else { diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c index 5072133..5725f90 100644 --- a/xen/common/keyhandler.c +++ b/xen/common/keyhandler.c @@ -293,7 +293,7 @@ static void dump_domains(unsigned char key) v->vcpu_id, v->processor, v->is_running ? ''T'':''F'', v->poll_evtchn, vcpu_info(v, evtchn_upcall_pending), - vcpu_info(v, evtchn_upcall_mask)); + !vcpu_event_delivery_is_enabled(v)); cpuset_print(tmpstr, sizeof(tmpstr), v->vcpu_dirty_cpumask); printk("dirty_cpus=%s ", tmpstr); cpuset_print(tmpstr, sizeof(tmpstr), v->cpu_affinity); diff --git a/xen/include/asm-arm/event.h b/xen/include/asm-arm/event.h index ed05901..04d854f 100644 --- a/xen/include/asm-arm/event.h +++ b/xen/include/asm-arm/event.h @@ -7,6 +7,12 @@ void vcpu_kick(struct vcpu *v); void vcpu_mark_events_pending(struct vcpu *v); +static inline int vcpu_event_delivery_is_enabled(struct vcpu *v) +{ + struct cpu_user_regs *regs = &v->arch.cpu_info->guest_cpu_user_regs; + return !(regs->cpsr & PSR_IRQ_MASK); +} + static inline int local_events_need_delivery_nomask(void) { struct pending_irq *p = irq_to_pending(current, VGIC_IRQ_EVTCHN_CALLBACK); @@ -31,16 +37,11 @@ static inline int local_events_need_delivery_nomask(void) static inline int local_events_need_delivery(void) { - struct cpu_user_regs *regs = guest_cpu_user_regs(); - - /* guest IRQs are masked */ - if ( (regs->cpsr & PSR_IRQ_MASK) ) + if ( !vcpu_event_delivery_is_enabled(current) ) return 0; return local_events_need_delivery_nomask(); } -int local_event_delivery_is_enabled(void); - static inline void local_event_delivery_enable(void) { struct cpu_user_regs *regs = guest_cpu_user_regs(); diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index 5d79593..0e6354c 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -265,6 +265,7 @@ extern unsigned char boot_edid_info[128]; #define COMPAT_LEGACY_MAX_VCPUS XEN_LEGACY_MAX_VCPUS #define COMPAT_HAVE_PV_GUEST_ENTRY XEN_HAVE_PV_GUEST_ENTRY +#define COMPAT_HAVE_PV_UPCALL_MASK XEN_HAVE_PV_UPCALL_MASK #endif diff --git a/xen/include/asm-x86/event.h b/xen/include/asm-x86/event.h index 06057c7..7edeb5b 100644 --- a/xen/include/asm-x86/event.h +++ b/xen/include/asm-x86/event.h @@ -14,6 +14,11 @@ void vcpu_kick(struct vcpu *v); void vcpu_mark_events_pending(struct vcpu *v); +static inline int vcpu_event_delivery_is_enabled(struct vcpu *v) +{ + return !vcpu_info(v, evtchn_upcall_mask); +} + int hvm_local_events_need_delivery(struct vcpu *v); static inline int local_events_need_delivery(void) { @@ -23,11 +28,6 @@ static inline int local_events_need_delivery(void) !vcpu_info(v, evtchn_upcall_mask))); } -static inline int local_event_delivery_is_enabled(void) -{ - return !vcpu_info(current, evtchn_upcall_mask); -} - static inline void local_event_delivery_disable(void) { vcpu_info(current, evtchn_upcall_mask) = 1; diff --git a/xen/include/public/arch-x86/xen.h b/xen/include/public/arch-x86/xen.h index 7ae8c90..908ef87 100644 --- a/xen/include/public/arch-x86/xen.h +++ b/xen/include/public/arch-x86/xen.h @@ -72,6 +72,8 @@ typedef unsigned long xen_pfn_t; #define XEN_HAVE_PV_GUEST_ENTRY 1 +#define XEN_HAVE_PV_UPCALL_MASK 1 + /* * `incontents 200 segdesc Segment Descriptor Tables */ diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index 037540d..2a40970 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -612,7 +612,11 @@ struct vcpu_info { * to block: this avoids wakeup-waiting races. */ uint8_t evtchn_upcall_pending; +#ifdef XEN_HAVE_PV_UPCALL_MASK uint8_t evtchn_upcall_mask; +#else /* XEN_HAVE_PV_UPCALL_MASK */ + uint8_t pad0; +#endif /* XEN_HAVE_PV_UPCALL_MASK */ xen_ulong_t evtchn_pending_sel; struct arch_vcpu_info arch; struct vcpu_time_info time; -- 1.7.2.5
Keir Fraser
2013-Jul-19 13:27 UTC
Re: [PATCH v6 0/5] xen: public interface and foreign struct check changes for arm
On 19/07/2013 12:49, "Ian Campbell" <Ian.Campbell@citrix.com> wrote:> I''m still not entirely sure whose Ack is needed for > tools/include/xen-foreign changes. At this stage I''ll take whatever I > can get ;-)Don''t think it really gets love from anyone, didn''t Gerd do it as part of libelf? You can have my Ack if you want: Acked-by: Keir Fraser <keir@xen.org>> Changes since v6: > Move the COMPAT_HAVE_FOO defines from public headers into > asm/config.h > > Handle a new use of evtchn_mask in common code (with an ifdef, > which I''m not entirely satisfied with) >
Ian Campbell
2013-Jul-19 13:40 UTC
Re: [PATCH v6 0/5] xen: public interface and foreign struct check changes for arm
On Fri, 2013-07-19 at 14:27 +0100, Keir Fraser wrote:> On 19/07/2013 12:49, "Ian Campbell" <Ian.Campbell@citrix.com> wrote: > > > I''m still not entirely sure whose Ack is needed for > > tools/include/xen-foreign changes. At this stage I''ll take whatever I > > can get ;-) > > Don''t think it really gets love from anyone, didn''t Gerd do it as part of > libelf?I think it was Gerd, yes.> You can have my Ack if you want: > Acked-by: Keir Fraser <keir@xen.org>Thanks. :-) Ian.
Ian Jackson
2013-Aug-07 15:48 UTC
Re: [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking
Ian Campbell writes ("[Xen-devel] [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking"):> mkheader.py doesn''t cope with > struct 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....> #ifdef XEN_HAVE_PV_GUEST_ENTRY > -#define MAX_GUEST_CMDLINE 1024...> +#define MAX_GUEST_CMDLINE 1024Is this deliberate ? It''s not mentioned in the commit message AFAICT. Ian.
Ian Jackson
2013-Aug-07 15:52 UTC
Re: [PATCH v6 0/5] xen: public interface and foreign struct check changes for arm
Ian Campbell writes ("[Xen-devel] [PATCH v6 0/5] xen: public interface and foreign struct check changes for arm"):> I''m still not entirely sure whose Ack is needed for > tools/include/xen-foreign changes. At this stage I''ll take whatever I > can get ;-)I''ve read this series and it all looks reasonable, although it''s not my area of expertise. Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> subject to my comment about the MAX_GUEST_CMDLINE change in 3/5. Ian.
Ian Campbell
2013-Aug-08 08:38 UTC
Re: [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking
On Wed, 2013-08-07 at 16:48 +0100, Ian Jackson wrote:> Ian Campbell writes ("[Xen-devel] [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking"): > > mkheader.py doesn''t cope with > > struct 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. > ... > > #ifdef XEN_HAVE_PV_GUEST_ENTRY > > -#define MAX_GUEST_CMDLINE 1024 > ... > > +#define MAX_GUEST_CMDLINE 1024 > > Is this deliberate ?IIRC the magic in mkheader.py requires #ifdef FOO struct ... and cannot cope with #ifdef FOO #define BAR struct ... I could make the regex more complicated to cope with this case but just moving the #define next to its only usage seemed simpler. The regex has other shortcomings like only dealing with a single struct per ifdef and such. I think regex lacks the expressive power to fix this and I don''t much fancy rewriting this script in something more capable.> It''s not mentioned in the commit message AFAICT.I rewrote the final line of the changelog to be: Teach mkheader.py to cope with structs which are ifdef''d. This cannot cope with #defines between the #ifdef and the struct definitions, so move MAX_GUEST_CMDLINE to be next to its only usage. Does that suffice? Ian.
Ian Jackson
2013-Aug-08 10:57 UTC
Re: [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking
Ian Campbell writes ("Re: [Xen-devel] [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking"):> IIRC the magic in mkheader.py requires > #ifdef FOO > struct ... > > and cannot cope with > > #ifdef FOO > #define BAR > struct ... > > I could make the regex more complicated to cope with this case but just > moving the #define next to its only usage seemed simpler.Urgh. Right.> I rewrote the final line of the changelog to be: > > Teach mkheader.py to cope with structs which are ifdef''d. This cannot cope > with #defines between the #ifdef and the struct definitions, so move > MAX_GUEST_CMDLINE to be next to its only usage. > > Does that suffice?Yes, thanks. Ian.
Ian Campbell
2013-Aug-08 14:44 UTC
Re: [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking
On Thu, 2013-08-08 at 11:57 +0100, Ian Jackson wrote:> Ian Campbell writes ("Re: [Xen-devel] [PATCH v6 3/5] xen: arm: include public/xen.h in foreign interface checking"): > > IIRC the magic in mkheader.py requires > > #ifdef FOO > > struct ... > > > > and cannot cope with > > > > #ifdef FOO > > #define BAR > > struct ... > > > > I could make the regex more complicated to cope with this case but just > > moving the #define next to its only usage seemed simpler. > > Urgh. Right. > > > I rewrote the final line of the changelog to be: > > > > Teach mkheader.py to cope with structs which are ifdef''d. This cannot cope > > with #defines between the #ifdef and the struct definitions, so move > > MAX_GUEST_CMDLINE to be next to its only usage. > > > > Does that suffice? > > Yes, thanks.I''ll take this as an Ack unless you object. Although since it is 15:44 and I''m away on holiday tomorrow and Monday I shan''t actually apply it until next week. Ian.
Ian Campbell
2013-Aug-20 15:02 UTC
Re: [PATCH v6 0/5] xen: public interface and foreign struct check changes for arm
On Wed, 2013-08-07 at 16:52 +0100, Ian Jackson wrote:> Ian Campbell writes ("[Xen-devel] [PATCH v6 0/5] xen: public interface and foreign struct check changes for arm"): > > I''m still not entirely sure whose Ack is needed for > > tools/include/xen-foreign changes. At this stage I''ll take whatever I > > can get ;-) > > I''ve read this series and it all looks reasonable, although it''s not > my area of expertise. > > Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>Keir acked too --> applied. Thanks.> subject to my comment about the MAX_GUEST_CMDLINE change in 3/5.Yes fixed that up on the way. Ian.