summaryrefslogtreecommitdiff
path: root/sysutils/xenkernel46
diff options
context:
space:
mode:
authorjoerg <joerg@pkgsrc.org>2017-02-14 21:38:34 +0000
committerjoerg <joerg@pkgsrc.org>2017-02-14 21:38:34 +0000
commit9eb0a079e84ee30e68e4c85b12d5729f94341e26 (patch)
tree82c2d8817c8e81e6363e878946ca072e7c52a20b /sysutils/xenkernel46
parentb8d866a3acd623a30689a06482fa99ee0e329213 (diff)
downloadpkgsrc-9eb0a079e84ee30e68e4c85b12d5729f94341e26.tar.gz
Disable a couple more warnings for the clang build and merge some
patches from Git to fix another set of issues.
Diffstat (limited to 'sysutils/xenkernel46')
-rw-r--r--sysutils/xenkernel46/Makefile7
-rw-r--r--sysutils/xenkernel46/distinfo6
-rw-r--r--sysutils/xenkernel46/patches/patch-tools_xentrace_xenalyze.c264
-rw-r--r--sysutils/xenkernel46/patches/patch-xen_arch_x86_mm.c15
-rw-r--r--sysutils/xenkernel46/patches/patch-xen_arch_x86_xen.lds.S15
-rw-r--r--sysutils/xenkernel46/patches/patch-xen_include_asm-x86_spinlock.h16
6 files changed, 320 insertions, 3 deletions
diff --git a/sysutils/xenkernel46/Makefile b/sysutils/xenkernel46/Makefile
index cec283515fa..59483f6ed58 100644
--- a/sysutils/xenkernel46/Makefile
+++ b/sysutils/xenkernel46/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.8 2017/01/01 14:43:59 wiz Exp $
+# $NetBSD: Makefile,v 1.9 2017/02/14 21:38:34 joerg Exp $
VERSION= 4.6.3
DISTNAME= xen-${VERSION}
@@ -34,7 +34,10 @@ MESSAGE_SUBST+= XENKERNELDIR=${XENKERNELDIR}
EXTRA_CFLAGS+= -Qunused-arguments -no-integrated-as -Wno-error=format \
-Wno-error=parentheses-equality -Wno-error=enum-conversion \
-Wno-error=unused-function -Wno-error=unused-const-variable \
- -Wno-error=ignored-attributes -Wno-error=initializer-overrides
+ -Wno-error=ignored-attributes -Wno-error=constant-conversion \
+ -Wno-error=address-of-packed-member \
+ -Wno-error=initializer-overrides \
+ -Wno-error=tautological-compare
.endif
MAKE_ENV+= EXTRA_CFLAGS=${EXTRA_CFLAGS:Q}
diff --git a/sysutils/xenkernel46/distinfo b/sysutils/xenkernel46/distinfo
index 41f53b98f5c..17159dee776 100644
--- a/sysutils/xenkernel46/distinfo
+++ b/sysutils/xenkernel46/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.5 2016/12/21 15:36:39 bouyer Exp $
+$NetBSD: distinfo,v 1.6 2017/02/14 21:38:34 joerg Exp $
SHA1 (xen-4.6.3.tar.gz) = 2aa59d0a05a6c5ac7f336f2069c66a54f95c4349
RMD160 (xen-4.6.3.tar.gz) = 2798bd888ee001a4829165e55feb705a86af4f74
@@ -20,9 +20,13 @@ SHA1 (patch-XSA-200) = 37254653e3f9016de0440047465fddce7e9b1874
SHA1 (patch-XSA-202) = 52cb1da3bb078f6b7574f606b8c9cacdf24f6518
SHA1 (patch-XSA-203) = 43310c4e95e0070a24e6a847502e057b9e0eefe9
SHA1 (patch-XSA-204) = 05defb8d99976a712024d35a81f4dde5627107d9
+SHA1 (patch-tools_xentrace_xenalyze.c) = ab973cb7090dc90867dcddf9ab8965f8f2f36c46
SHA1 (patch-xen_Makefile) = be3f4577a205b23187b91319f91c50720919f70b
SHA1 (patch-xen_arch_x86_Rules.mk) = 7b0894ba7311edb02118a021671f304cf3872154
+SHA1 (patch-xen_arch_x86_mm.c) = 3c1435fa5db6a0f542e5efe726997f262fa04041
+SHA1 (patch-xen_arch_x86_xen.lds.S) = 58a890c404ca4f86ccfb58cf5a83b07e235034fc
SHA1 (patch-xen_common_page__alloc.c) = c4d606de1cada8cf89b5abd16efada3d58c68a03
SHA1 (patch-xen_drivers_passthrough_vtd_x86_ats.c) = f72fd4bb2aeeaeb0b167031dfd5498e73666aa4e
SHA1 (patch-xen_include_asm-x86_current.h) = 8a21577be06383c0c7f53c15ba828f77fb6314ad
+SHA1 (patch-xen_include_asm-x86_spinlock.h) = a78fe84c87632f0524af255f173676732418a75e
SHA1 (patch-xen_include_xen_lib.h) = 82a219b7d9c5deaa2b8e0adc774f60395adc4815
diff --git a/sysutils/xenkernel46/patches/patch-tools_xentrace_xenalyze.c b/sysutils/xenkernel46/patches/patch-tools_xentrace_xenalyze.c
new file mode 100644
index 00000000000..128dce83bea
--- /dev/null
+++ b/sysutils/xenkernel46/patches/patch-tools_xentrace_xenalyze.c
@@ -0,0 +1,264 @@
+$NetBSD: patch-tools_xentrace_xenalyze.c,v 1.1 2017/02/14 21:38:34 joerg Exp $
+
+Based on 28ab9f3d0e7cbb22f5ce77500af7873f6e2d3c59.
+
+--- tools/xentrace/xenalyze.c.orig 2016-06-20 12:08:22.000000000 +0000
++++ tools/xentrace/xenalyze.c
+@@ -509,7 +509,6 @@ struct {
+ #define HVM_VMX_EXIT_REASON_MAX (EXIT_REASON_XSETBV+1)
+
+ char * hvm_vmx_exit_reason_name[HVM_VMX_EXIT_REASON_MAX] = {
+- [0] = "NONE",
+ [EXIT_REASON_EXCEPTION_NMI]="EXCEPTION_NMI",
+ [EXIT_REASON_EXTERNAL_INTERRUPT]="EXTERNAL_INTERRUPT",
+ [EXIT_REASON_TRIPLE_FAULT]="TRIPLE_FAULT",
+@@ -2262,11 +2261,6 @@ static inline void update_summary(struct
+ s->count++;
+ }
+
+-static inline void clear_interval_summary(struct event_cycle_summary *s) {
+- s->interval.count = 0;
+- s->interval.cycles = 0;
+-}
+-
+ static inline void update_cycles(struct cycle_summary *s, long long c) {
+ /* We don't know ahead of time how many samples there are, and working
+ * with dynamic stuff is a pain, and unnecessary. This algorithm will
+@@ -2314,6 +2308,7 @@ static inline void clear_interval_cycles
+ e->instructions = 0;
+ }
+
++#if 0
+ static inline void update_cpi(struct weighted_cpi_summary *s,
+ unsigned long long i,
+ unsigned long long c) {
+@@ -2359,6 +2354,7 @@ static inline void clear_interval_cpi(st
+ s->interval.count = 0;
+ s->interval.instructions = 0;
+ }
++#endif
+
+ static inline void print_cpu_affinity(struct cycle_summary *s, char *p) {
+ if(s->count) {
+@@ -2639,6 +2635,23 @@ void interval_cr3_value_check(struct cr3
+ }
+ }
+
++int cr3_time_compare(const void *_a, const void *_b) {
++ struct cr3_value_struct *a=*(typeof(&a))_a;
++ struct cr3_value_struct *b=*(typeof(&a))_b;
++
++ if(a->total_time.interval.cycles < b->total_time.interval.cycles)
++ return 1;
++ else if(b->total_time.interval.cycles == a->total_time.interval.cycles) {
++ if(a->total_time.interval.count < b->total_time.interval.count)
++ return 1;
++ else if(a->total_time.interval.count == b->total_time.interval.count)
++ return 0;
++ else
++ return -1;
++ } else
++ return -1;
++}
++
+ void interval_cr3_schedule_ordered_output(void) {
+ struct cr3_value_struct *p;
+ int i;
+@@ -2646,23 +2659,6 @@ void interval_cr3_schedule_ordered_outpu
+ struct cr3_value_struct **qsort_array;
+ int N=0;
+
+- int cr3_time_compare(const void *_a, const void *_b) {
+- struct cr3_value_struct *a=*(typeof(&a))_a;
+- struct cr3_value_struct *b=*(typeof(&a))_b;
+-
+- if(a->total_time.interval.cycles < b->total_time.interval.cycles)
+- return 1;
+- else if(b->total_time.interval.cycles == a->total_time.interval.cycles) {
+- if(a->total_time.interval.count < b->total_time.interval.count)
+- return 1;
+- else if(a->total_time.interval.count == b->total_time.interval.count)
+- return 0;
+- else
+- return -1;
+- } else
+- return -1;
+- }
+-
+ for(p=P.cr3.head; p; p=p->gnext)
+ N++;
+
+@@ -2958,6 +2954,23 @@ void update_eip(struct eip_list_struct *
+ update_summary(&p->summary, cycles);
+ }
+
++int eip_compare(const void *_a, const void *_b) {
++ struct eip_list_struct *a=*(typeof(&a))_a;
++ struct eip_list_struct *b=*(typeof(&a))_b;
++
++ if(a->summary.cycles < b->summary.cycles)
++ return 1;
++ else if(b->summary.cycles == a->summary.cycles) {
++ if(a->summary.count < b->summary.count)
++ return 1;
++ else if(a->summary.count == b->summary.count)
++ return 0;
++ else
++ return -1;
++ } else
++ return -1;
++}
++
+ void dump_eip(struct eip_list_struct *head) {
+ struct eip_list_struct *p;
+ int i;
+@@ -2966,23 +2979,6 @@ void dump_eip(struct eip_list_struct *he
+ struct eip_list_struct **qsort_array;
+ int N=0;
+
+- int eip_compare(const void *_a, const void *_b) {
+- struct eip_list_struct *a=*(typeof(&a))_a;
+- struct eip_list_struct *b=*(typeof(&a))_b;
+-
+- if(a->summary.cycles < b->summary.cycles)
+- return 1;
+- else if(b->summary.cycles == a->summary.cycles) {
+- if(a->summary.count < b->summary.count)
+- return 1;
+- else if(a->summary.count == b->summary.count)
+- return 0;
+- else
+- return -1;
+- } else
+- return -1;
+- }
+-
+ for(p=head; p; p=p->next)
+ {
+ total += p->summary.count;
+@@ -3549,6 +3545,50 @@ struct outstanding_ipi *find_vec(struct
+ return o;
+ }
+
++void ipi_send(struct vcpu_data *ov, int vec)
++{
++ struct vlapic_struct *vla;
++ struct outstanding_ipi *o = NULL;
++
++ if(ov->runstate.state == RUNSTATE_LOST) {
++ if(opt.dump_all)
++ fprintf(warn, "%s: v%d in state RUNSTATE_LOST, not counting ipi\n",
++ __func__, ov->vid);
++ return;
++ }
++
++ vla = &ov->vlapic;
++
++ o = find_vec(vla, vec);
++
++ if(!o)
++ {
++ fprintf(warn, "%s: Couldn't find an open slot!\n",
++ __func__);
++ return;
++ }
++
++ if(!o->first_tsc)
++ o->first_tsc = P.now;
++
++ if(opt.dump_all && o->count == 0 && o->injected)
++ printf(" [vla] Pre-injection\n");
++
++ o->count++;
++
++ if((opt.dump_all)
++#if 0
++ && (ov->runstate.state != RUNSTATE_RUNNING
++ || ov->hvm.vmexit_valid)
++#endif
++ )
++ printf(" [vla] d%dv%d vec %d state %s (outstanding ipis %d)\n",
++ ov->d->did, ov->vid,
++ o->vec,
++ runstate_name[ov->runstate.state],
++ o->count);
++}
++
+ void hvm_vlapic_icr_handler(struct hvm_data *h)
+ {
+ struct mmio_info *m = &h->inflight.mmio;
+@@ -3567,50 +3607,6 @@ void hvm_vlapic_icr_handler(struct hvm_d
+ };
+ } icr = { .val = m->data };
+
+- void ipi_send(struct vcpu_data *ov, int vec)
+- {
+- struct vlapic_struct *vla;
+- struct outstanding_ipi *o = NULL;
+-
+- if(ov->runstate.state == RUNSTATE_LOST) {
+- if(opt.dump_all)
+- fprintf(warn, "%s: v%d in state RUNSTATE_LOST, not counting ipi\n",
+- __func__, ov->vid);
+- return;
+- }
+-
+- vla = &ov->vlapic;
+-
+- o = find_vec(vla, vec);
+-
+- if(!o)
+- {
+- fprintf(warn, "%s: Couldn't find an open slot!\n",
+- __func__);
+- return;
+- }
+-
+- if(!o->first_tsc)
+- o->first_tsc = P.now;
+-
+- if(opt.dump_all && o->count == 0 && o->injected)
+- printf(" [vla] Pre-injection\n");
+-
+- o->count++;
+-
+- if((opt.dump_all)
+-#if 0
+- && (ov->runstate.state != RUNSTATE_RUNNING
+- || ov->hvm.vmexit_valid)
+-#endif
+- )
+- printf(" [vla] d%dv%d vec %d state %s (outstanding ipis %d)\n",
+- ov->d->did, ov->vid,
+- o->vec,
+- runstate_name[ov->runstate.state],
+- o->count);
+- }
+-
+ if(m->is_write) {
+ if(opt.dump_all) {
+ printf(" [vla] d%dv%d icr vec %d %s\n",
+@@ -4116,11 +4112,6 @@ void cr3_prealloc_unpin(struct vcpu_data
+ gmfn, cr3->prealloc_unpin.count);
+ }
+
+-void cr3_dump_list(struct cr3_value_struct *head){
+- struct cr3_value_struct *p;
+- struct cr3_value_struct **qsort_array;
+- int i, N=0;
+-
+ int cr3_compare_total(const void *_a, const void *_b) {
+ struct cr3_value_struct *a=*(typeof(&a))_a;
+ struct cr3_value_struct *b=*(typeof(&a))_b;
+@@ -4150,6 +4141,11 @@ void cr3_dump_list(struct cr3_value_stru
+ return -1;
+ }
+
++void cr3_dump_list(struct cr3_value_struct *head){
++ struct cr3_value_struct *p;
++ struct cr3_value_struct **qsort_array;
++ int i, N=0;
++
+ if(!head)
+ return;
+
diff --git a/sysutils/xenkernel46/patches/patch-xen_arch_x86_mm.c b/sysutils/xenkernel46/patches/patch-xen_arch_x86_mm.c
new file mode 100644
index 00000000000..437ebcc79cc
--- /dev/null
+++ b/sysutils/xenkernel46/patches/patch-xen_arch_x86_mm.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-xen_arch_x86_mm.c,v 1.1 2017/02/14 21:38:34 joerg Exp $
+
+From e0a97098e20d8fe334b76b37dd6fb0a358a6953c.
+
+--- xen/arch/x86/mm.c.orig 2017-02-10 22:44:48.124078150 +0000
++++ xen/arch/x86/mm.c
+@@ -517,7 +517,7 @@ void update_cr3(struct vcpu *v)
+ make_cr3(v, cr3_mfn);
+ }
+
+-static const char __section(".bss.page_aligned") zero_page[PAGE_SIZE];
++static const char __section(".bss.page_aligned.const") zero_page[PAGE_SIZE];
+
+ static void invalidate_shadow_ldt(struct vcpu *v, int flush)
+ {
diff --git a/sysutils/xenkernel46/patches/patch-xen_arch_x86_xen.lds.S b/sysutils/xenkernel46/patches/patch-xen_arch_x86_xen.lds.S
new file mode 100644
index 00000000000..57243a21245
--- /dev/null
+++ b/sysutils/xenkernel46/patches/patch-xen_arch_x86_xen.lds.S
@@ -0,0 +1,15 @@
+$NetBSD: patch-xen_arch_x86_xen.lds.S,v 1.1 2017/02/14 21:38:34 joerg Exp $
+
+From e0a97098e20d8fe334b76b37dd6fb0a358a6953c.
+
+--- xen/arch/x86/xen.lds.S.orig 2017-02-10 22:45:18.382878546 +0000
++++ xen/arch/x86/xen.lds.S
+@@ -166,7 +166,7 @@ SECTIONS
+ __bss_start = .;
+ *(.bss.stack_aligned)
+ . = ALIGN(PAGE_SIZE);
+- *(.bss.page_aligned)
++ *(.bss.page_aligned*)
+ *(.bss)
+ . = ALIGN(SMP_CACHE_BYTES);
+ __per_cpu_start = .;
diff --git a/sysutils/xenkernel46/patches/patch-xen_include_asm-x86_spinlock.h b/sysutils/xenkernel46/patches/patch-xen_include_asm-x86_spinlock.h
new file mode 100644
index 00000000000..560e71c9594
--- /dev/null
+++ b/sysutils/xenkernel46/patches/patch-xen_include_asm-x86_spinlock.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-xen_include_asm-x86_spinlock.h,v 1.1 2017/02/14 21:38:34 joerg Exp $
+
+From c86aa9a250ca0c87760b369f295f67ae01542fa9.
+
+--- xen/include/asm-x86/spinlock.h.orig 2017-02-10 22:33:31.337508849 +0000
++++ xen/include/asm-x86/spinlock.h
+@@ -2,7 +2,8 @@
+ #define __ASM_SPINLOCK_H
+
+ #define _raw_read_unlock(l) \
+- asm volatile ( "lock; dec%z0 %0" : "+m" ((l)->lock) :: "memory" )
++ BUILD_BUG_ON(sizeof((l)->lock) != 4); /* Clang doesn't support %z in asm. */ \
++ asm volatile ( "lock; decl %0" : "+m" ((l)->lock) :: "memory" )
+
+ /*
+ * On x86 the only reordering is of reads with older writes. In the