Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Jan 2011 14:49:54 +0000 (UTC)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r216956 - in head/sys: conf dev/xen/balloon dev/xen/blkfront dev/xen/netfront dev/xen/xenpci i386/include i386/include/xen
Message-ID:  <201101041449.p04EnsLS039312@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rwatson
Date: Tue Jan  4 14:49:54 2011
New Revision: 216956
URL: http://svn.freebsd.org/changeset/base/216956

Log:
  Make "options XENHVM" compile for i386, not just amd64 -- a largely
  mechanical change.  This opens the door for using PV device drivers
  under Xen HVM on i386, as well as more general harmonisation of i386
  and amd64 Xen support in FreeBSD.
  
  Reviewed by:    cperciva
  MFC after:      3 weeks

Modified:
  head/sys/conf/options.i386
  head/sys/dev/xen/balloon/balloon.c
  head/sys/dev/xen/blkfront/blkfront.c
  head/sys/dev/xen/netfront/netfront.c
  head/sys/dev/xen/xenpci/evtchn.c
  head/sys/i386/include/pcpu.h
  head/sys/i386/include/pmap.h
  head/sys/i386/include/xen/hypercall.h
  head/sys/i386/include/xen/xen-os.h
  head/sys/i386/include/xen/xenpmap.h
  head/sys/i386/include/xen/xenvar.h

Modified: head/sys/conf/options.i386
==============================================================================
--- head/sys/conf/options.i386	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/conf/options.i386	Tue Jan  4 14:49:54 2011	(r216956)
@@ -118,3 +118,4 @@ BPF_JITTER		opt_bpf.h
 
 NATIVE			opt_global.h
 XEN			opt_global.h
+XENHVM			opt_global.h

Modified: head/sys/dev/xen/balloon/balloon.c
==============================================================================
--- head/sys/dev/xen/balloon/balloon.c	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/dev/xen/balloon/balloon.c	Tue Jan  4 14:49:54 2011	(r216956)
@@ -41,8 +41,8 @@ __FBSDID("$FreeBSD$");
 #include <sys/sysctl.h>
 
 #include <machine/xen/xen-os.h>
-#include <machine/xen/xenfunc.h>
 #include <machine/xen/xenvar.h>
+#include <machine/xen/xenfunc.h>
 #include <xen/hypervisor.h>
 #include <xen/xenstore/xenstorevar.h>
 

Modified: head/sys/dev/xen/blkfront/blkfront.c
==============================================================================
--- head/sys/dev/xen/blkfront/blkfront.c	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/dev/xen/blkfront/blkfront.c	Tue Jan  4 14:49:54 2011	(r216956)
@@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$");
 
 #include <machine/_inttypes.h>
 #include <machine/xen/xen-os.h>
+#include <machine/xen/xenvar.h>
 #include <machine/xen/xenfunc.h>
 
 #include <xen/hypervisor.h>

Modified: head/sys/dev/xen/netfront/netfront.c
==============================================================================
--- head/sys/dev/xen/netfront/netfront.c	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/dev/xen/netfront/netfront.c	Tue Jan  4 14:49:54 2011	(r216956)
@@ -77,6 +77,7 @@ __FBSDID("$FreeBSD$");
 
 #include <machine/xen/xen-os.h>
 #include <machine/xen/xenfunc.h>
+#include <machine/xen/xenvar.h>
 #include <xen/hypervisor.h>
 #include <xen/xen_intr.h>
 #include <xen/evtchn.h>

Modified: head/sys/dev/xen/xenpci/evtchn.c
==============================================================================
--- head/sys/dev/xen/xenpci/evtchn.c	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/dev/xen/xenpci/evtchn.c	Tue Jan  4 14:49:54 2011	(r216956)
@@ -51,13 +51,19 @@ __FBSDID("$FreeBSD$");
 
 #include <dev/xen/xenpci/xenpcivar.h>
 
+#if defined(__i386__)
+#define	__ffs(word)	ffs(word)
+#elif defined(__amd64__)
 static inline unsigned long __ffs(unsigned long word)
 {
         __asm__("bsfq %1,%0"
                 :"=r" (word)
-                :"rm" (word));
+                :"rm" (word));	/* XXXRW: why no "cc"? */
         return word;
 }
+#else
+#error "evtchn: unsupported architecture"
+#endif
 
 #define is_valid_evtchn(x)	((x) != 0)
 #define evtchn_from_irq(x)	(irq_evtchn[irq].evtchn)

Modified: head/sys/i386/include/pcpu.h
==============================================================================
--- head/sys/i386/include/pcpu.h	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/i386/include/pcpu.h	Tue Jan  4 14:49:54 2011	(r216956)
@@ -44,13 +44,16 @@
  * other processors"
  */
 
-#ifdef XEN
+#if defined(XEN) || defined(XENHVM)
 #ifndef NR_VIRQS
 #define	NR_VIRQS	24
 #endif
 #ifndef NR_IPIS
 #define	NR_IPIS		2
 #endif
+#endif
+
+#if defined(XEN)
 
 /* These are peridically updated in shared_info, and then copied here. */
 struct shadow_time_info {
@@ -72,8 +75,18 @@ struct shadow_time_info {
 	int	pc_callfunc_irq;					\
 	int	pc_virq_to_irq[NR_VIRQS];				\
 	int	pc_ipi_to_irq[NR_IPIS]	
-#else
+
+#elif defined(XENHVM)
+
+#define	PCPU_XEN_FIELDS							\
+	;								\
+	unsigned int pc_last_processed_l1i;				\
+	unsigned int pc_last_processed_l2i
+
+#else /* !XEN && !XENHVM */
+
 #define PCPU_XEN_FIELDS
+
 #endif
 
 #define	PCPU_MD_FIELDS							\

Modified: head/sys/i386/include/pmap.h
==============================================================================
--- head/sys/i386/include/pmap.h	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/i386/include/pmap.h	Tue Jan  4 14:49:54 2011	(r216956)
@@ -208,7 +208,7 @@ extern pd_entry_t *IdlePTD;	/* physical 
  */
 #define	vtophys(va)	pmap_kextract((vm_offset_t)(va))
 
-#ifdef XEN
+#if defined(XEN)
 #include <sys/param.h>
 #include <machine/xen/xen-os.h>
 #include <machine/xen/xenvar.h>
@@ -315,7 +315,9 @@ pmap_kextract(vm_offset_t va)
 	}
 	return (pa);
 }
+#endif
 
+#if !defined(XEN)
 #define PT_UPDATES_FLUSH()
 #endif
 

Modified: head/sys/i386/include/xen/hypercall.h
==============================================================================
--- head/sys/i386/include/xen/hypercall.h	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/i386/include/xen/hypercall.h	Tue Jan  4 14:49:54 2011	(r216956)
@@ -234,9 +234,14 @@ HYPERVISOR_memory_op(
 	return _hypercall2(int, memory_op, cmd, arg);
 }
 
+#if defined(XEN)
 int HYPERVISOR_multicall(multicall_entry_t *, int);
 static inline int
 _HYPERVISOR_multicall(
+#else /* XENHVM */
+static inline int
+HYPERVISOR_multicall(
+#endif
 	void *call_list, int nr_calls)
 {
 	return _hypercall2(int, multicall, call_list, nr_calls);

Modified: head/sys/i386/include/xen/xen-os.h
==============================================================================
--- head/sys/i386/include/xen/xen-os.h	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/i386/include/xen/xen-os.h	Tue Jan  4 14:49:54 2011	(r216956)
@@ -12,7 +12,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 
@@ -95,6 +95,8 @@ void printk(const char *fmt, ...);
 /* some function prototypes */
 void trap_init(void);
 
+#ifndef XENHVM
+
 /*
  * STI/CLI equivalents. These basically set and clear the virtual
  * event_enable flag in teh shared_info structure. Note that when
@@ -164,6 +166,7 @@ do {                                    
 #define spin_lock_irqsave mtx_lock_irqsave
 #define spin_unlock_irqrestore mtx_unlock_irqrestore
 
+#endif
 
 #ifdef SMP
 #define smp_mb() mb() 

Modified: head/sys/i386/include/xen/xenpmap.h
==============================================================================
--- head/sys/i386/include/xen/xenpmap.h	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/i386/include/xen/xenpmap.h	Tue Jan  4 14:49:54 2011	(r216956)
@@ -35,6 +35,8 @@
 
 #ifndef _XEN_XENPMAP_H_
 #define _XEN_XENPMAP_H_
+
+#if defined(XEN)
 void _xen_queue_pt_update(vm_paddr_t, vm_paddr_t, char *, int);
 void xen_pt_switch(vm_paddr_t);
 void xen_set_ldt(vm_paddr_t, unsigned long);
@@ -230,5 +232,15 @@ phys_to_machine_mapping_valid(unsigned l
 	return xen_phys_machine[pfn] != INVALID_P2M_ENTRY;
 }
 
+#elif defined(XENHVM)
+
+#define	set_phys_to_machine(pfn, mfn)		((void)0)
+#define	phys_to_machine_mapping_valid(pfn)	(TRUE)
+
+#if !defined(PAE)
+#define	vtomach(va)	pmap_kextract((vm_offset_t) (va))
+#endif
+
+#endif /* !XEN && !XENHVM */
 
 #endif /* _XEN_XENPMAP_H_ */

Modified: head/sys/i386/include/xen/xenvar.h
==============================================================================
--- head/sys/i386/include/xen/xenvar.h	Tue Jan  4 14:13:09 2011	(r216955)
+++ head/sys/i386/include/xen/xenvar.h	Tue Jan  4 14:49:54 2011	(r216956)
@@ -28,6 +28,11 @@
 
 #ifndef XENVAR_H_
 #define XENVAR_H_
+
+#include <machine/xen/features.h>
+
+#if defined(XEN)
+
 #define XBOOTUP 0x1
 #define XPMAP   0x2
 extern int xendebug_flags;
@@ -36,7 +41,6 @@ extern int xendebug_flags;
 #else
 #define XENPRINTF printf
 #endif
-#include <machine/xen/features.h>
 
 extern	xen_pfn_t *xen_phys_machine;
 extern	xen_pfn_t *xen_pfn_to_mfn_frame_list[16];
@@ -101,4 +105,11 @@ int  xen_create_contiguous_region(vm_pag
 
 void  xen_destroy_contiguous_region(void * addr, int npages);
 
+#elif defined(XENHVM)
+
+#define	PFNTOMFN(pa)	(pa)
+#define	MFNTOPFN(ma)	(ma)
+
+#endif /* !XEN && !XENHVM */
+
 #endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101041449.p04EnsLS039312>