Date: Fri, 28 Nov 2008 15:49:36 +0000 (UTC) From: Doug Rabson <dfr@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r185386 - in user/dfr/xenhvm/6/sys/amd64/include: . xen Message-ID: <200811281549.mASFnapa022825@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dfr Date: Fri Nov 28 15:49:36 2008 New Revision: 185386 URL: http://svn.freebsd.org/changeset/base/185386 Log: Add some Xen support for amd64 - initially HVM only. Added: user/dfr/xenhvm/6/sys/amd64/include/xen/ (props changed) - copied from r185181, user/dfr/xenhvm/6/sys/i386/include/xen/ Modified: user/dfr/xenhvm/6/sys/amd64/include/pcpu.h user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h user/dfr/xenhvm/6/sys/amd64/include/xen/hypervisor.h user/dfr/xenhvm/6/sys/amd64/include/xen/synch_bitops.h user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h Modified: user/dfr/xenhvm/6/sys/amd64/include/pcpu.h ============================================================================== --- user/dfr/xenhvm/6/sys/amd64/include/pcpu.h Fri Nov 28 14:53:18 2008 (r185385) +++ user/dfr/xenhvm/6/sys/amd64/include/pcpu.h Fri Nov 28 15:49:36 2008 (r185386) @@ -35,6 +35,24 @@ #ifdef _KERNEL +#if defined(XEN) || defined(XENHVM) +#ifndef NR_VIRQS +#define NR_VIRQS 24 +#endif +#ifndef NR_IPIS +#define NR_IPIS 2 +#endif +#endif + +#ifdef XENHVM +#define PCPU_XEN_FIELDS \ + ; \ + unsigned int pc_last_processed_l1i; \ + unsigned int pc_last_processed_l2i +#else +#define PCPU_XEN_FIELDS +#endif + /* * The SMP parts are setup in pmap.c and locore.s for the BSP, and * mp_machdep.c sets up the data for the AP's to "see" when they awake. @@ -49,7 +67,8 @@ register_t pc_rsp0; \ register_t pc_scratch_rsp; /* User %rsp in syscall */ \ u_int pc_apic_id; \ - u_int pc_acpi_id /* ACPI CPU id */ + u_int pc_acpi_id /* ACPI CPU id */ \ + PCPU_XEN_FIELDS #if defined(lint) Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h ============================================================================== --- user/dfr/xenhvm/6/sys/i386/include/xen/hypercall.h Sat Nov 22 16:14:52 2008 (r185181) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h Fri Nov 28 15:49:36 2008 (r185386) @@ -5,8 +5,15 @@ * * Copyright (c) 2002-2004, K A Fraser * - * This file may be distributed separately from the Linux kernel, or - * incorporated into other software packages, subject to the following license: + * 64-bit updates: + * Benjamin Liu <benjamin.liu@intel.com> + * Jun Nakajima <jun.nakajima@intel.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation; or, when distributed + * separately from the Linux kernel or incorporated into other + * software packages, subject to the following license: * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this source file (the "Software"), to deal in the Software without @@ -31,141 +38,151 @@ #define __HYPERCALL_H__ #include <sys/systm.h> -#include <xen/interface/xen.h> -#include <xen/interface/sched.h> + +#ifndef __HYPERVISOR_H__ +# error "please don't include this file directly" +#endif #define __STR(x) #x #define STR(x) __STR(x) #define ENOXENSYS 38 #define CONFIG_XEN_COMPAT 0x030002 +#define __must_check - -#if defined(XEN) -#define HYPERCALL_STR(name) \ - "call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)" +#ifdef XEN +#define HYPERCALL_STR(name) \ + "call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)" #else -#define HYPERCALL_STR(name) \ - "mov hypercall_stubs,%%eax; " \ - "add $("STR(__HYPERVISOR_##name)" * 32),%%eax; " \ - "call *%%eax" +#define HYPERCALL_STR(name) \ + "mov $("STR(__HYPERVISOR_##name)" * 32),%%eax; "\ + "add hypercall_stubs(%%rip),%%rax; " \ + "call *%%rax" #endif -#define _hypercall0(type, name) \ -({ \ - long __res; \ - __asm__ volatile ( \ - HYPERCALL_STR(name) \ - : "=a" (__res) \ - : \ - : "memory" ); \ - (type)__res; \ +#define _hypercall0(type, name) \ +({ \ + type __res; \ + __asm__ volatile ( \ + HYPERCALL_STR(name) \ + : "=a" (__res) \ + : \ + : "memory" ); \ + __res; \ }) -#define _hypercall1(type, name, a1) \ -({ \ - long __res, __ign1; \ - __asm__ volatile ( \ - HYPERCALL_STR(name) \ - : "=a" (__res), "=b" (__ign1) \ - : "1" ((long)(a1)) \ - : "memory" ); \ - (type)__res; \ +#define _hypercall1(type, name, a1) \ +({ \ + type __res; \ + long __ign1; \ + __asm__ volatile ( \ + HYPERCALL_STR(name) \ + : "=a" (__res), "=D" (__ign1) \ + : "1" ((long)(a1)) \ + : "memory" ); \ + __res; \ }) -#define _hypercall2(type, name, a1, a2) \ -({ \ - long __res, __ign1, __ign2; \ - __asm__ volatile ( \ - HYPERCALL_STR(name) \ - : "=a" (__res), "=b" (__ign1), "=c" (__ign2) \ - : "1" ((long)(a1)), "2" ((long)(a2)) \ - : "memory" ); \ - (type)__res; \ +#define _hypercall2(type, name, a1, a2) \ +({ \ + type __res; \ + long __ign1, __ign2; \ + __asm__ volatile ( \ + HYPERCALL_STR(name) \ + : "=a" (__res), "=D" (__ign1), "=S" (__ign2) \ + : "1" ((long)(a1)), "2" ((long)(a2)) \ + : "memory" ); \ + __res; \ }) -#define _hypercall3(type, name, a1, a2, a3) \ -({ \ - long __res, __ign1, __ign2, __ign3; \ - __asm__ volatile ( \ - HYPERCALL_STR(name) \ - : "=a" (__res), "=b" (__ign1), "=c" (__ign2), \ - "=d" (__ign3) \ - : "1" ((long)(a1)), "2" ((long)(a2)), \ - "3" ((long)(a3)) \ - : "memory" ); \ - (type)__res; \ +#define _hypercall3(type, name, a1, a2, a3) \ +({ \ + type __res; \ + long __ign1, __ign2, __ign3; \ + __asm__ volatile ( \ + HYPERCALL_STR(name) \ + : "=a" (__res), "=D" (__ign1), "=S" (__ign2), \ + "=d" (__ign3) \ + : "1" ((long)(a1)), "2" ((long)(a2)), \ + "3" ((long)(a3)) \ + : "memory" ); \ + __res; \ }) -#define _hypercall4(type, name, a1, a2, a3, a4) \ -({ \ - long __res, __ign1, __ign2, __ign3, __ign4; \ - __asm__ volatile ( \ - HYPERCALL_STR(name) \ - : "=a" (__res), "=b" (__ign1), "=c" (__ign2), \ - "=d" (__ign3), "=S" (__ign4) \ - : "1" ((long)(a1)), "2" ((long)(a2)), \ - "3" ((long)(a3)), "4" ((long)(a4)) \ - : "memory" ); \ - (type)__res; \ +#define _hypercall4(type, name, a1, a2, a3, a4) \ +({ \ + type __res; \ + long __ign1, __ign2, __ign3; \ + register long __arg4 __asm__("r10") = (long)(a4); \ + __asm__ volatile ( \ + HYPERCALL_STR(name) \ + : "=a" (__res), "=D" (__ign1), "=S" (__ign2), \ + "=d" (__ign3), "+r" (__arg4) \ + : "1" ((long)(a1)), "2" ((long)(a2)), \ + "3" ((long)(a3)) \ + : "memory" ); \ + __res; \ }) -#define _hypercall5(type, name, a1, a2, a3, a4, a5) \ -({ \ - long __res, __ign1, __ign2, __ign3, __ign4, __ign5; \ - __asm__ volatile ( \ - HYPERCALL_STR(name) \ - : "=a" (__res), "=b" (__ign1), "=c" (__ign2), \ - "=d" (__ign3), "=S" (__ign4), "=D" (__ign5) \ - : "1" ((long)(a1)), "2" ((long)(a2)), \ - "3" ((long)(a3)), "4" ((long)(a4)), \ - "5" ((long)(a5)) \ - : "memory" ); \ - (type)__res; \ -}) +#define _hypercall5(type, name, a1, a2, a3, a4, a5) \ +({ \ + type __res; \ + long __ign1, __ign2, __ign3; \ + register long __arg4 __asm__("r10") = (long)(a4); \ + register long __arg5 __asm__("r8") = (long)(a5); \ + __asm__ volatile ( \ + HYPERCALL_STR(name) \ + : "=a" (__res), "=D" (__ign1), "=S" (__ign2), \ + "=d" (__ign3), "+r" (__arg4), "+r" (__arg5) \ + : "1" ((long)(a1)), "2" ((long)(a2)), \ + "3" ((long)(a3)) \ + : "memory" ); \ + __res; \ +}) -static inline int +static inline int __must_check HYPERVISOR_set_trap_table( - trap_info_t *table) + const trap_info_t *table) { return _hypercall1(int, set_trap_table, table); } -static inline int +static inline int __must_check HYPERVISOR_mmu_update( - mmu_update_t *req, int count, int *success_count, domid_t domid) + mmu_update_t *req, unsigned int count, unsigned int *success_count, + domid_t domid) { return _hypercall4(int, mmu_update, req, count, success_count, domid); } -static inline int +static inline int __must_check HYPERVISOR_mmuext_op( - mmuext_op_t *op, int count, int *success_count, domid_t domid) + struct mmuext_op *op, unsigned int count, unsigned int *success_count, + domid_t domid) { return _hypercall4(int, mmuext_op, op, count, success_count, domid); } -static inline int +static inline int __must_check HYPERVISOR_set_gdt( - unsigned long *frame_list, int entries) + unsigned long *frame_list, unsigned int entries) { return _hypercall2(int, set_gdt, frame_list, entries); } -static inline int +static inline int __must_check HYPERVISOR_stack_switch( unsigned long ss, unsigned long esp) { return _hypercall2(int, stack_switch, ss, esp); } -static inline int +static inline int __must_check HYPERVISOR_set_callbacks( - unsigned long event_selector, unsigned long event_address, - unsigned long failsafe_selector, unsigned long failsafe_address) + unsigned long event_address, unsigned long failsafe_address, + unsigned long syscall_address) { - return _hypercall4(int, set_callbacks, - event_selector, event_address, - failsafe_selector, failsafe_address); + return _hypercall3(int, set_callbacks, + event_address, failsafe_address, syscall_address); } static inline int @@ -175,93 +192,85 @@ HYPERVISOR_fpu_taskswitch( return _hypercall1(int, fpu_taskswitch, set); } -static inline int +static inline int __must_check HYPERVISOR_sched_op_compat( int cmd, unsigned long arg) { return _hypercall2(int, sched_op_compat, cmd, arg); } -static inline int +static inline int __must_check HYPERVISOR_sched_op( int cmd, void *arg) { return _hypercall2(int, sched_op, cmd, arg); } -static inline long +static inline long __must_check HYPERVISOR_set_timer_op( uint64_t timeout) { - unsigned long timeout_hi = (unsigned long)(timeout>>32); - unsigned long timeout_lo = (unsigned long)timeout; - return _hypercall2(long, set_timer_op, timeout_lo, timeout_hi); + return _hypercall1(long, set_timer_op, timeout); } -#if 0 -static inline int + +static inline int __must_check HYPERVISOR_platform_op( - struct xen_platform_op *platform_op) + struct xen_platform_op *platform_op) { - platform_op->interface_version = XENPF_INTERFACE_VERSION; - return _hypercall1(int, platform_op, platform_op); + platform_op->interface_version = XENPF_INTERFACE_VERSION; + return _hypercall1(int, platform_op, platform_op); } -#endif -static inline int + +static inline int __must_check HYPERVISOR_set_debugreg( - int reg, unsigned long value) + unsigned int reg, unsigned long value) { return _hypercall2(int, set_debugreg, reg, value); } -static inline unsigned long +static inline unsigned long __must_check HYPERVISOR_get_debugreg( - int reg) + unsigned int reg) { return _hypercall1(unsigned long, get_debugreg, reg); } -static inline int +static inline int __must_check HYPERVISOR_update_descriptor( - uint64_t ma, uint64_t desc) + unsigned long ma, unsigned long word) { - return _hypercall4(int, update_descriptor, ma, ma>>32, desc, desc>>32); + return _hypercall2(int, update_descriptor, ma, word); } -static inline int +static inline int __must_check HYPERVISOR_memory_op( unsigned int cmd, void *arg) { return _hypercall2(int, memory_op, cmd, arg); } -static inline int +static inline int __must_check HYPERVISOR_multicall( - void *call_list, int nr_calls) + multicall_entry_t *call_list, unsigned int nr_calls) { return _hypercall2(int, multicall, call_list, nr_calls); } -static inline int +static inline int __must_check HYPERVISOR_update_va_mapping( unsigned long va, uint64_t new_val, unsigned long flags) { - uint32_t hi, lo; - - lo = (uint32_t)(new_val & 0xffffffff); - hi = (uint32_t)(new_val >> 32); - - return _hypercall4(int, update_va_mapping, va, - lo, hi, flags); + return _hypercall3(int, update_va_mapping, va, new_val, flags); } -static inline int +static inline int __must_check HYPERVISOR_event_channel_op( int cmd, void *arg) { int rc = _hypercall2(int, event_channel_op, cmd, arg); #if CONFIG_XEN_COMPAT <= 0x030002 - if (__predict_false(rc == -ENOXENSYS)) { + if (unlikely(rc == -ENOXENSYS)) { struct evtchn_op op; op.cmd = cmd; memcpy(&op.u, arg, sizeof(op.u)); @@ -269,30 +278,32 @@ HYPERVISOR_event_channel_op( memcpy(arg, &op.u, sizeof(op.u)); } #endif - return (rc); + + return rc; } -static inline int +static inline int __must_check HYPERVISOR_xen_version( int cmd, void *arg) { return _hypercall2(int, xen_version, cmd, arg); } -static inline int +static inline int __must_check HYPERVISOR_console_io( - int cmd, int count, char *str) + int cmd, unsigned int count, char *str) { return _hypercall3(int, console_io, cmd, count, str); } -static inline int +static inline int __must_check HYPERVISOR_physdev_op( int cmd, void *arg) { int rc = _hypercall2(int, physdev_op, cmd, arg); + #if CONFIG_XEN_COMPAT <= 0x030002 - if (__predict_false(rc == -ENOXENSYS)) { + if (unlikely(rc == -ENOXENSYS)) { struct physdev_op op; op.cmd = cmd; memcpy(&op.u, arg, sizeof(op.u)); @@ -300,78 +311,77 @@ HYPERVISOR_physdev_op( memcpy(arg, &op.u, sizeof(op.u)); } #endif - return (rc); + + return rc; } -static inline int +static inline int __must_check HYPERVISOR_grant_table_op( unsigned int cmd, void *uop, unsigned int count) { return _hypercall3(int, grant_table_op, cmd, uop, count); } -static inline int +static inline int __must_check HYPERVISOR_update_va_mapping_otherdomain( unsigned long va, uint64_t new_val, unsigned long flags, domid_t domid) { - uint32_t hi, lo; - - lo = (uint32_t)(new_val & 0xffffffff); - hi = (uint32_t)(new_val >> 32); - - return _hypercall5(int, update_va_mapping_otherdomain, va, - lo, hi, flags, domid); + return _hypercall4(int, update_va_mapping_otherdomain, va, + new_val, flags, domid); } -static inline int +static inline int __must_check HYPERVISOR_vm_assist( unsigned int cmd, unsigned int type) { return _hypercall2(int, vm_assist, cmd, type); } -static inline int +static inline int __must_check HYPERVISOR_vcpu_op( - int cmd, int vcpuid, void *extra_args) + int cmd, unsigned int vcpuid, void *extra_args) { return _hypercall3(int, vcpu_op, cmd, vcpuid, extra_args); } -static inline int +static inline int __must_check +HYPERVISOR_set_segment_base( + int reg, unsigned long value) +{ + return _hypercall2(int, set_segment_base, reg, value); +} + +static inline int __must_check HYPERVISOR_suspend( unsigned long srec) { struct sched_shutdown sched_shutdown = { .reason = SHUTDOWN_suspend }; + int rc = _hypercall3(int, sched_op, SCHEDOP_shutdown, - &sched_shutdown, srec); + &sched_shutdown, srec); + #if CONFIG_XEN_COMPAT <= 0x030002 if (rc == -ENOXENSYS) rc = _hypercall3(int, sched_op_compat, SCHEDOP_shutdown, SHUTDOWN_suspend, srec); -#endif - return (rc); +#endif + + return rc; } #if CONFIG_XEN_COMPAT <= 0x030002 static inline int HYPERVISOR_nmi_op( - unsigned long op, void *arg) + unsigned long op, void *arg) { - return _hypercall2(int, nmi_op, op, arg); + return _hypercall2(int, nmi_op, op, arg); } #endif -static inline int -HYPERVISOR_callback_op( - int cmd, void *arg) -{ - return _hypercall2(int, callback_op, cmd, arg); -} - #ifndef CONFIG_XEN -static inline unsigned long +static inline unsigned long __must_check HYPERVISOR_hvm_op( int op, void *arg) { @@ -379,27 +389,27 @@ HYPERVISOR_hvm_op( } #endif -static inline int +static inline int __must_check +HYPERVISOR_callback_op( + int cmd, const void *arg) +{ + return _hypercall2(int, callback_op, cmd, arg); +} + +static inline int __must_check HYPERVISOR_xenoprof_op( - int op, void *arg) + int op, void *arg) { - return _hypercall2(int, xenoprof_op, op, arg); + return _hypercall2(int, xenoprof_op, op, arg); } -static inline int +static inline int __must_check HYPERVISOR_kexec_op( - unsigned long op, void *args) + unsigned long op, void *args) { - return _hypercall2(int, kexec_op, op, args); + return _hypercall2(int, kexec_op, op, args); } -#endif /* __HYPERCALL_H__ */ -/* - * Local variables: - * c-file-style: "linux" - * indent-tabs-mode: t - * c-indent-level: 8 - * c-basic-offset: 8 - * tab-width: 8 - * End: - */ +#undef __must_check + +#endif /* __HYPERCALL_H__ */ Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/hypervisor.h ============================================================================== --- user/dfr/xenhvm/6/sys/i386/include/xen/hypervisor.h Sat Nov 22 16:14:52 2008 (r185181) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/hypervisor.h Fri Nov 28 15:49:36 2008 (r185386) @@ -9,8 +9,16 @@ #ifndef __HYPERVISOR_H__ #define __HYPERVISOR_H__ +#ifdef XENHVM + +#define is_running_on_xen() (HYPERVISOR_shared_info != NULL) + +#else + #define is_running_on_xen() 1 +#endif + #ifdef PAE #ifndef CONFIG_X86_PAE #define CONFIG_X86_PAE @@ -42,7 +50,9 @@ #define is_initial_xendomain() 0 #endif +#ifndef XENHVM extern start_info_t *xen_start_info; +#endif extern uint64_t get_system_time(int ticks); @@ -130,7 +140,7 @@ MULTI_update_va_mapping( mcl->op = __HYPERVISOR_update_va_mapping; mcl->args[0] = va; #if defined(__amd64__) - mcl->args[1] = new_val.pte; + mcl->args[1] = new_val; #elif defined(PAE) mcl->args[1] = (uint32_t)(new_val & 0xffffffff) ; mcl->args[2] = (uint32_t)(new_val >> 32); Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/synch_bitops.h ============================================================================== --- user/dfr/xenhvm/6/sys/i386/include/xen/synch_bitops.h Sat Nov 22 16:14:52 2008 (r185181) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/synch_bitops.h Fri Nov 28 15:49:36 2008 (r185386) @@ -88,7 +88,6 @@ static inline unsigned long __synch_cmpx "0"(old) : "memory"); return prev; -#ifdef CONFIG_X86_64 case 4: __asm__ __volatile__("lock; cmpxchgl %k1,%2" : "=a"(prev) @@ -103,15 +102,6 @@ static inline unsigned long __synch_cmpx "0"(old) : "memory"); return prev; -#else - case 4: - __asm__ __volatile__("lock; cmpxchgl %1,%2" - : "=a"(prev) - : "q"(new), "m"(*__synch_xg(ptr)), - "0"(old) - : "memory"); - return prev; -#endif } return old; } Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h ============================================================================== --- user/dfr/xenhvm/6/sys/i386/include/xen/xen-os.h Sat Nov 22 16:14:52 2008 (r185181) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h Fri Nov 28 15:49:36 2008 (r185386) @@ -11,7 +11,7 @@ #define CONFIG_X86_PAE #endif -#if defined(XEN) && !defined(__XEN_INTERFACE_VERSION__) +#if !defined(__XEN_INTERFACE_VERSION__) /* * Can update to a more recent version when we implement * the hypercall page @@ -51,7 +51,7 @@ smp_processor_id(void) #endif #ifndef PANIC_IF -#define PANIC_IF(exp) if (unlikely(exp)) {printk("panic - %s: %s:%d\n",#exp, __FILE__, __LINE__); panic("%s: %s:%d", #exp, __FILE__, __LINE__);} +#define PANIC_IF(exp) if (unlikely(exp)) {panic("%s: %s:%d", #exp, __FILE__, __LINE__);} #endif extern shared_info_t *HYPERVISOR_shared_info; @@ -91,16 +91,17 @@ void printk(const char *fmt, ...); /* some function prototypes */ void trap_init(void); +#define likely(x) __builtin_expect((x),1) +#define unlikely(x) __builtin_expect((x),0) + +#ifndef XENHVM + /* * STI/CLI equivalents. These basically set and clear the virtual * event_enable flag in teh shared_info structure. Note that when * the enable bit is set, there may be pending events to be handled. * We may therefore call into do_hypervisor_callback() directly. */ -#define likely(x) __builtin_expect((x),1) -#define unlikely(x) __builtin_expect((x),0) - - #define __cli() \ do { \ @@ -163,12 +164,14 @@ do { #define spin_lock_irqsave mtx_lock_irqsave #define spin_unlock_irqrestore mtx_unlock_irqrestore +#else +#endif #ifndef mb -#define mb() __asm__ __volatile__("lock; addl $0, 0(%%esp)": : :"memory") +#define mb() __asm__ __volatile__("mfence":::"memory") #endif #ifndef rmb -#define rmb() mb() +#define rmb() __asm__ __volatile__("lfence":::"memory"); #endif #ifndef wmb #define wmb() barrier() Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h ============================================================================== --- user/dfr/xenhvm/6/sys/i386/include/xen/xenfunc.h Sat Nov 22 16:14:52 2008 (r185181) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h Fri Nov 28 15:49:36 2008 (r185386) @@ -32,8 +32,12 @@ #include <machine/xen/xen-os.h> #include <machine/xen/hypervisor.h> +#ifdef XENHVM +#include <machine/xen/xenvar.h> +#else #include <machine/xen/xenpmap.h> #include <machine/segments.h> +#endif #include <sys/pcpu.h> #define BKPT __asm__("int3"); #define XPQ_CALL_DEPTH 5 @@ -63,7 +67,9 @@ void _xen_machphys_update(vm_paddr_t, vm #define xen_machphys_update(a, b) _xen_machphys_update((a), (b), NULL, 0) #endif +#ifndef XENHVM void xen_update_descriptor(union descriptor *, union descriptor *); +#endif extern struct mtx balloon_lock; #if 0 Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h ============================================================================== --- user/dfr/xenhvm/6/sys/i386/include/xen/xenvar.h Sat Nov 22 16:14:52 2008 (r185181) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h Fri Nov 28 15:49:36 2008 (r185386) @@ -39,8 +39,6 @@ extern int xendebug_flags; #endif #include <machine/xen/features.h> -extern xen_pfn_t *xen_phys_machine; - #if 0 #define TRACE_ENTER XENPRINTF("(file=%s, line=%d) entered %s\n", __FILE__, __LINE__, __FUNCTION__) #define TRACE_EXIT XENPRINTF("(file=%s, line=%d) exiting %s\n", __FILE__, __LINE__, __FUNCTION__) @@ -52,6 +50,33 @@ if (xendebug_flags & argflags) XENPRINTF #define TRACE_DEBUG(argflags, _f, _a...) #endif +#ifdef XENHVM + +static inline vm_paddr_t +phystomach(vm_paddr_t pa) +{ + + return (pa); +} + +static inline vm_paddr_t +machtophys(vm_paddr_t ma) +{ + + return (ma); +} + +#define vtomach(va) pmap_kextract((vm_offset_t) (va)) +#define PFNTOMFN(pa) (pa) + +#define set_phys_to_machine(pfn, mfn) ((void)0) +#define PT_UPDATES_FLUSH() ((void)0) + +#else + +extern xen_pfn_t *xen_phys_machine; + + extern xen_pfn_t *xen_machine_phys; /* Xen starts physical pages after the 4MB ISA hole - * FreeBSD doesn't @@ -84,6 +109,8 @@ extern xen_pfn_t *xen_machine_phys; #define phystomach(pa) (((vm_paddr_t)(PFNTOMFN((pa) >> PAGE_SHIFT))) << PAGE_SHIFT) #define machtophys(ma) (((vm_paddr_t)(MFNTOPFN((ma) >> PAGE_SHIFT))) << PAGE_SHIFT) +#endif + void xpq_init(void);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811281549.mASFnapa022825>