From 5f0855fadbb621d6ca4850fb86fd082e3a4abaee Mon Sep 17 00:00:00 2001 From: bouyer Date: Sun, 23 Sep 2007 16:54:07 +0000 Subject: [PATCH] Ajust for Xen 3.1.0 public headers. From Christoph Egger in private mail. --- sys/arch/xen/i386/genassym.cf | 10 +++--- sys/arch/xen/i386/hypervisor_machdep.c | 36 +++++++++++++------ sys/arch/xen/include/cpufunc.h | 8 ++--- sys/arch/xen/include/xen-public/xen.h | 4 +-- sys/arch/xen/include/xen.h | 14 ++++---- .../xen/include/xen3-public/grant_table.h | 22 +----------- sys/arch/xen/include/xen3-public/xen.h | 6 +--- sys/arch/xen/xen/evtchn.c | 12 ++++--- 8 files changed, 54 insertions(+), 58 deletions(-) diff --git a/sys/arch/xen/i386/genassym.cf b/sys/arch/xen/i386/genassym.cf index 1b7407e1e2ce..f82ba39837aa 100644 --- a/sys/arch/xen/i386/genassym.cf +++ b/sys/arch/xen/i386/genassym.cf @@ -1,4 +1,4 @@ -# $NetBSD: genassym.cf,v 1.12 2007/05/17 14:51:35 yamt Exp $ +# $NetBSD: genassym.cf,v 1.13 2007/09/23 16:54:07 bouyer Exp $ # NetBSD: genassym.cf,v 1.40 2004/02/20 17:35:01 yamt Exp # @@ -345,11 +345,11 @@ endif define SIF_INITDOMAIN SIF_INITDOMAIN ifdef XEN3 -define EVTCHN_UPCALL_PENDING offsetof(struct shared_info, vcpu_data[0].evtchn_upcall_pending) -define EVTCHN_UPCALL_MASK offsetof(struct shared_info, vcpu_data[0].evtchn_upcall_mask) +define EVTCHN_UPCALL_PENDING offsetof(struct shared_info, vcpu_info[0].evtchn_upcall_pending) +define EVTCHN_UPCALL_MASK offsetof(struct shared_info, vcpu_info[0].evtchn_upcall_mask) else -define EVTCHN_UPCALL_PENDING offsetof(struct shared_info_st, vcpu_data[0].evtchn_upcall_pending) -define EVTCHN_UPCALL_MASK offsetof(struct shared_info_st, vcpu_data[0].evtchn_upcall_mask) +define EVTCHN_UPCALL_PENDING offsetof(struct shared_info_st, vcpu_info[0].evtchn_upcall_pending) +define EVTCHN_UPCALL_MASK offsetof(struct shared_info_st, vcpu_info[0].evtchn_upcall_mask) endif define HYPERVISOR_sched_op __HYPERVISOR_sched_op diff --git a/sys/arch/xen/i386/hypervisor_machdep.c b/sys/arch/xen/i386/hypervisor_machdep.c index 1376c0e0cd91..ecf8e9d8723d 100644 --- a/sys/arch/xen/i386/hypervisor_machdep.c +++ b/sys/arch/xen/i386/hypervisor_machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: hypervisor_machdep.c,v 1.17 2007/01/29 01:52:46 hubertf Exp $ */ +/* $NetBSD: hypervisor_machdep.c,v 1.18 2007/09/23 16:54:07 bouyer Exp $ */ /* * @@ -59,7 +59,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.17 2007/01/29 01:52:46 hubertf Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.18 2007/09/23 16:54:07 bouyer Exp $"); #include #include @@ -111,12 +111,16 @@ stipending() * we're only called after STIC, so we know that we'll have to * STI at the end */ - while (s->vcpu_data[0].evtchn_upcall_pending) { + while (s->vcpu_info[0].evtchn_upcall_pending) { cli(); - s->vcpu_data[0].evtchn_upcall_pending = 0; + s->vcpu_info[0].evtchn_upcall_pending = 0; /* NB. No need for a barrier here -- XCHG is a barrier * on x86. */ +#ifdef XEN3 + l1 = xen_atomic_xchg(&s->vcpu_info[0].evtchn_pending_sel, 0); +#else l1 = xen_atomic_xchg(&s->evtchn_pending_sel, 0); +#endif while ((l1i = ffs(l1)) != 0) { l1i--; l1 &= ~(1 << l1i); @@ -184,11 +188,15 @@ do_hypervisor_callback(struct intrframe *regs) } #endif - while (s->vcpu_data[0].evtchn_upcall_pending) { - s->vcpu_data[0].evtchn_upcall_pending = 0; + while (s->vcpu_info[0].evtchn_upcall_pending) { + s->vcpu_info[0].evtchn_upcall_pending = 0; /* NB. No need for a barrier here -- XCHG is a barrier * on x86. */ +#ifdef XEN3 + l1 = xen_atomic_xchg(&s->vcpu_info[0].evtchn_pending_sel, 0); +#else l1 = xen_atomic_xchg(&s->evtchn_pending_sel, 0); +#endif while ((l1i = ffs(l1)) != 0) { l1i--; l1 &= ~(1 << l1i); @@ -226,8 +234,12 @@ do_hypervisor_callback(struct intrframe *regs) #ifdef DIAGNOSTIC if (level != ci->ci_ilevel) printf("hypervisor done %08x level %d/%d ipending %08x\n", - (uint)HYPERVISOR_shared_info->evtchn_pending_sel, level, - ci->ci_ilevel, ci->ci_ipending); +#ifdef XEN3 + (uint)HYPERVISOR_shared_info->vcpu_info[0].evtchn_pending_sel, +#else + (uint)HYPERVISOR_shared_info->evtchn_pending_sel, +#endif + level, ci->ci_ilevel, ci->ci_ipending); #endif } @@ -247,9 +259,13 @@ hypervisor_unmask_event(unsigned int ev) * interrupt edge' if the channel is masked. */ if (xen_atomic_test_bit(&s->evtchn_pending[0], ev) && +#ifdef XEN3 + !xen_atomic_test_and_set_bit(&s->vcpu_info[0].evtchn_pending_sel, ev>>5)) { +#else !xen_atomic_test_and_set_bit(&s->evtchn_pending_sel, ev>>5)) { - xen_atomic_set_bit(&s->vcpu_data[0].evtchn_upcall_pending, 0); - if (!s->vcpu_data[0].evtchn_upcall_mask) +#endif + xen_atomic_set_bit(&s->vcpu_info[0].evtchn_upcall_pending, 0); + if (!s->vcpu_info[0].evtchn_upcall_mask) hypervisor_force_callback(); } } diff --git a/sys/arch/xen/include/cpufunc.h b/sys/arch/xen/include/cpufunc.h index 905009557ec5..f3f6851d88e5 100644 --- a/sys/arch/xen/include/cpufunc.h +++ b/sys/arch/xen/include/cpufunc.h @@ -1,4 +1,4 @@ -/* $NetBSD: cpufunc.h,v 1.15 2007/03/04 06:01:10 christos Exp $ */ +/* $NetBSD: cpufunc.h,v 1.16 2007/09/23 16:54:07 bouyer Exp $ */ /* NetBSD: cpufunc.h,v 1.28 2004/01/14 11:31:55 yamt Exp */ /*- @@ -313,12 +313,12 @@ breakpoint(void) __asm volatile("int $3"); } -#define read_psl() (HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask) +#define read_psl() (HYPERVISOR_shared_info->vcpu_info[0].evtchn_upcall_mask) #define write_psl(x) do { \ __insn_barrier(); \ - HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask = (x) ; \ + HYPERVISOR_shared_info->vcpu_info[0].evtchn_upcall_mask = (x) ; \ x86_lfence(); \ - if ((x) == 0 && HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_pending) \ + if ((x) == 0 && HYPERVISOR_shared_info->vcpu_info[0].evtchn_upcall_pending) \ hypervisor_force_callback(); \ } while (0) diff --git a/sys/arch/xen/include/xen-public/xen.h b/sys/arch/xen/include/xen-public/xen.h index 6f7fb0b53bbf..25972ea3ecdd 100644 --- a/sys/arch/xen/include/xen-public/xen.h +++ b/sys/arch/xen/include/xen-public/xen.h @@ -1,4 +1,4 @@ -/* $NetBSD: xen.h,v 1.4 2006/01/15 22:09:52 bouyer Exp $ */ +/* $NetBSD: xen.h,v 1.5 2007/09/23 16:54:08 bouyer Exp $ */ /* * Copyright (c) 2004, K A Fraser @@ -315,7 +315,7 @@ typedef struct shared_info_st u8 evtchn_upcall_pending; u8 evtchn_upcall_mask; u8 pad0, pad1; - } PACKED vcpu_data[MAX_VIRT_CPUS]; /* 0 */ + } PACKED vcpu_info[MAX_VIRT_CPUS]; /* 0 */ /* * A domain can have up to 1024 "event channels" on which it can send diff --git a/sys/arch/xen/include/xen.h b/sys/arch/xen/include/xen.h index 6b7ab5fed0ce..34b51602bb2f 100644 --- a/sys/arch/xen/include/xen.h +++ b/sys/arch/xen/include/xen.h @@ -1,4 +1,4 @@ -/* $NetBSD: xen.h,v 1.21 2006/03/06 19:55:47 bouyer Exp $ */ +/* $NetBSD: xen.h,v 1.22 2007/09/23 16:54:08 bouyer Exp $ */ /* * @@ -136,23 +136,23 @@ void xpq_flush_cache(void); #define __save_flags(x) \ do { \ - (x) = HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask; \ + (x) = HYPERVISOR_shared_info->vcpu_info[0].evtchn_upcall_mask; \ } while (0) #define __restore_flags(x) \ do { \ volatile shared_info_t *_shared = HYPERVISOR_shared_info; \ __insn_barrier(); \ - if ((_shared->vcpu_data[0].evtchn_upcall_mask = (x)) == 0) { \ + if ((_shared->vcpu_info[0].evtchn_upcall_mask = (x)) == 0) { \ x86_lfence(); \ - if (__predict_false(_shared->vcpu_data[0].evtchn_upcall_pending)) \ + if (__predict_false(_shared->vcpu_info[0].evtchn_upcall_pending)) \ hypervisor_force_callback(); \ } \ } while (0) #define __cli() \ do { \ - HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask = 1; \ + HYPERVISOR_shared_info->vcpu_info[0].evtchn_upcall_mask = 1; \ x86_lfence(); \ } while (0) @@ -160,9 +160,9 @@ do { \ do { \ volatile shared_info_t *_shared = HYPERVISOR_shared_info; \ __insn_barrier(); \ - _shared->vcpu_data[0].evtchn_upcall_mask = 0; \ + _shared->vcpu_info[0].evtchn_upcall_mask = 0; \ x86_lfence(); /* unmask then check (avoid races) */ \ - if (__predict_false(_shared->vcpu_data[0].evtchn_upcall_pending)) \ + if (__predict_false(_shared->vcpu_info[0].evtchn_upcall_pending)) \ hypervisor_force_callback(); \ } while (0) diff --git a/sys/arch/xen/include/xen3-public/grant_table.h b/sys/arch/xen/include/xen3-public/grant_table.h index 2d71ff874757..93e869e53b6d 100644 --- a/sys/arch/xen/include/xen3-public/grant_table.h +++ b/sys/arch/xen/include/xen3-public/grant_table.h @@ -1,4 +1,4 @@ -/* $NetBSD: grant_table.h,v 1.5 2007/09/23 16:19:37 bouyer Exp $ */ +/* $NetBSD: grant_table.h,v 1.6 2007/09/23 16:54:08 bouyer Exp $ */ /****************************************************************************** * grant_table.h * @@ -330,26 +330,6 @@ typedef struct gnttab_query_size gnttab_query_size_t; DEFINE_XEN_GUEST_HANDLE(gnttab_query_size_t); -/* - * GNTTABOP_query_size: Query the current and maximum sizes of the shared - * grant table. - * NOTES: - * 1. may be specified as DOMID_SELF. - * 2. Only a sufficiently-privileged domain may specify != DOMID_SELF. - */ -#define GNTTABOP_query_size 6 -typedef struct gnttab_query_size { - /* IN parameters. */ - domid_t dom; - /* OUT parameters. */ - uint32_t nr_frames; - uint32_t max_nr_frames; - int16_t status; /* GNTST_* */ -} gnttab_query_size_t; - -DEFINE_GUEST_HANDLE(gnttab_query_size_t); - - /* * Bitfield values for update_pin_status.flags. */ diff --git a/sys/arch/xen/include/xen3-public/xen.h b/sys/arch/xen/include/xen3-public/xen.h index cb985881b716..e0bdb2a1c316 100644 --- a/sys/arch/xen/include/xen3-public/xen.h +++ b/sys/arch/xen/include/xen3-public/xen.h @@ -1,4 +1,4 @@ -/* $NetBSD: xen.h,v 1.5 2007/09/23 16:19:38 bouyer Exp $ */ +/* $NetBSD: xen.h,v 1.6 2007/09/23 16:54:08 bouyer Exp $ */ /****************************************************************************** * xen.h * @@ -414,10 +414,6 @@ struct vcpu_info { typedef struct vcpu_info vcpu_info_t; #endif -/* Xen2 compat */ -#define vcpu_data vcpu_info -#define evtchn_pending_sel vcpu_info[0].evtchn_pending_sel /* XXX smp */ - /* * Xen/kernel shared data -- pointer provided in start_info. * diff --git a/sys/arch/xen/xen/evtchn.c b/sys/arch/xen/xen/evtchn.c index 00b3e2a1f407..f63ec6d6edbd 100644 --- a/sys/arch/xen/xen/evtchn.c +++ b/sys/arch/xen/xen/evtchn.c @@ -1,4 +1,4 @@ -/* $NetBSD: evtchn.c,v 1.20 2006/12/08 15:05:18 yamt Exp $ */ +/* $NetBSD: evtchn.c,v 1.21 2007/09/23 16:54:09 bouyer Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -64,7 +64,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.20 2006/12/08 15:05:18 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.21 2007/09/23 16:54:09 bouyer Exp $"); #include "opt_xen.h" #include "isa.h" @@ -609,10 +609,14 @@ xen_debug_handler(void *arg) int ci_ipending = ci->ci_ipending; int ci_idepth = ci->ci_idepth; u_long upcall_pending = - HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_pending; + HYPERVISOR_shared_info->vcpu_info[0].evtchn_upcall_pending; u_long upcall_mask = - HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask; + HYPERVISOR_shared_info->vcpu_info[0].evtchn_upcall_mask; +#ifdef XEN3 + u_long pending_sel = HYPERVISOR_shared_info->vcpu_info[0].evtchn_pending_sel; +#else u_long pending_sel = HYPERVISOR_shared_info->evtchn_pending_sel; +#endif unsigned long evtchn_mask[sizeof(unsigned long) * 8]; unsigned long evtchn_pending[sizeof(unsigned long) * 8];