svn commit: r185637 - in user/dfr/xenhvm/6/sys: amd64/include/xen
dev/xen/blkfront dev/xen/console dev/xen/netfront
dev/xen/xenpci i386/conf i386/i386 i386/include
i386/include/xen i386/isa i386/xe...
Doug Rabson
dfr at FreeBSD.org
Fri Dec 5 07:01:01 PST 2008
Author: dfr
Date: Fri Dec 5 15:00:59 2008
New Revision: 185637
URL: http://svn.freebsd.org/changeset/base/185637
Log:
Major cleaning up and refactoring, including but not limited to:
* Move MI Xen headers from <machine/xen/foo.h> to <xen/foo.h>
* Try to cut down the amount of times one include cross-includes another
* Remove all the linux compatibiity macros in favour of an unobfuscated
native FreeBSD style.
* Don't multiplex error and result values using negative errno return values.
* On FreeBSD, malloc(..., M_WAITOK) doesn't return NULL - simplify accordingly.
Added:
user/dfr/xenhvm/6/sys/xen/evtchn.h (contents, props changed)
- copied, changed from r185387, user/dfr/xenhvm/6/sys/i386/include/xen/evtchn.h
user/dfr/xenhvm/6/sys/xen/features.h (props changed)
- copied unchanged from r185387, user/dfr/xenhvm/6/sys/i386/include/xen/features.h
user/dfr/xenhvm/6/sys/xen/hypervisor.h (contents, props changed)
- copied, changed from r185387, user/dfr/xenhvm/6/sys/amd64/include/xen/hypervisor.h
user/dfr/xenhvm/6/sys/xen/xen_intr.h (contents, props changed)
- copied, changed from r185387, user/dfr/xenhvm/6/sys/i386/include/xen/xen_intr.h
Deleted:
user/dfr/xenhvm/6/sys/amd64/include/xen/evtchn.h
user/dfr/xenhvm/6/sys/amd64/include/xen/features.h
user/dfr/xenhvm/6/sys/amd64/include/xen/hypervisor.h
user/dfr/xenhvm/6/sys/amd64/include/xen/xen_intr.h
user/dfr/xenhvm/6/sys/amd64/include/xen/xenstored.h
user/dfr/xenhvm/6/sys/i386/include/xen/evtchn.h
user/dfr/xenhvm/6/sys/i386/include/xen/features.h
user/dfr/xenhvm/6/sys/i386/include/xen/hypervisor.h
user/dfr/xenhvm/6/sys/i386/include/xen/xen_intr.h
user/dfr/xenhvm/6/sys/i386/include/xen/xenstored.h
Modified:
user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.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/xenpmap.h
user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h
user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c
user/dfr/xenhvm/6/sys/dev/xen/console/console.c
user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c
user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c
user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c
user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c
user/dfr/xenhvm/6/sys/i386/conf/XEN
user/dfr/xenhvm/6/sys/i386/i386/genassym.c
user/dfr/xenhvm/6/sys/i386/i386/machdep.c
user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c
user/dfr/xenhvm/6/sys/i386/i386/vm_machdep.c
user/dfr/xenhvm/6/sys/i386/include/pcpu.h
user/dfr/xenhvm/6/sys/i386/include/xen/hypercall.h
user/dfr/xenhvm/6/sys/i386/include/xen/xen-os.h
user/dfr/xenhvm/6/sys/i386/include/xen/xenfunc.h
user/dfr/xenhvm/6/sys/i386/include/xen/xenpmap.h
user/dfr/xenhvm/6/sys/i386/include/xen/xenvar.h
user/dfr/xenhvm/6/sys/i386/isa/npx.c
user/dfr/xenhvm/6/sys/i386/xen/clock.c
user/dfr/xenhvm/6/sys/i386/xen/mp_machdep.c
user/dfr/xenhvm/6/sys/i386/xen/mptable.c
user/dfr/xenhvm/6/sys/i386/xen/pmap.c
user/dfr/xenhvm/6/sys/i386/xen/xen_bus.c
user/dfr/xenhvm/6/sys/i386/xen/xen_machdep.c
user/dfr/xenhvm/6/sys/xen/evtchn/evtchn.c
user/dfr/xenhvm/6/sys/xen/evtchn/evtchn_dev.c
user/dfr/xenhvm/6/sys/xen/features.c
user/dfr/xenhvm/6/sys/xen/gnttab.c
user/dfr/xenhvm/6/sys/xen/gnttab.h
user/dfr/xenhvm/6/sys/xen/reboot.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_client.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.h
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_dev.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_probe.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_probe_backend.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbusvar.h
Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h
==============================================================================
--- user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h Fri Dec 5 15:00:59 2008 (r185637)
@@ -34,12 +34,12 @@
* IN THE SOFTWARE.
*/
-#ifndef __HYPERCALL_H__
-#define __HYPERCALL_H__
+#ifndef __MACHINE_XEN_HYPERCALL_H__
+#define __MACHINE_XEN_HYPERCALL_H__
#include <sys/systm.h>
-#ifndef __HYPERVISOR_H__
+#ifndef __XEN_HYPERVISOR_H__
# error "please don't include this file directly"
#endif
@@ -412,4 +412,4 @@ HYPERVISOR_kexec_op(
#undef __must_check
-#endif /* __HYPERCALL_H__ */
+#endif /* __MACHINE_XEN_HYPERCALL_H__ */
Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h
==============================================================================
--- user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h Fri Dec 5 15:00:59 2008 (r185637)
@@ -6,7 +6,7 @@
#ifndef _XEN_OS_H_
#define _XEN_OS_H_
-#include <machine/param.h>
+
#ifdef PAE
#define CONFIG_X86_PAE
#endif
@@ -24,43 +24,10 @@
/* Force a proper event-channel callback from Xen. */
void force_evtchn_callback(void);
-#ifndef vtophys
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
-#endif
-
extern int gdtset;
-#ifdef SMP
-#include <sys/time.h> /* XXX for pcpu.h */
-#include <sys/pcpu.h> /* XXX for PCPU_GET */
-static inline int
-smp_processor_id(void)
-{
- if (__predict_true(gdtset))
- return PCPU_GET(cpuid);
- return 0;
-}
-
-#else
-#define smp_processor_id() 0
-#endif
-
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-#ifndef PANIC_IF
-#define PANIC_IF(exp) if (unlikely(exp)) {panic("%s: %s:%d", #exp, __FILE__, __LINE__);}
-#endif
extern shared_info_t *HYPERVISOR_shared_info;
-/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented
- a mechanism by which the user can annotate likely branch directions and
- expect the blocks to be reordered appropriately. Define __builtin_expect
- to nothing for earlier compilers. */
-
/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
static inline void rep_nop(void)
{
@@ -68,13 +35,6 @@ static inline void rep_nop(void)
}
#define cpu_relax() rep_nop()
-
-#if __GNUC__ == 2 && __GNUC_MINOR__ < 96
-#define __builtin_expect(x, expected_value) (x)
-#endif
-
-#define per_cpu(var, cpu) (pcpu_find((cpu))->pc_ ## var)
-
/* crude memory allocator for memory allocation early in
* boot
*/
@@ -84,7 +44,6 @@ void bootmem_free(void *ptr, unsigned in
/* Everything below this point is not included by assembler (.S) files. */
#ifndef __ASSEMBLY__
-#include <sys/types.h>
void printk(const char *fmt, ...);
@@ -106,7 +65,7 @@ void trap_init(void);
#define __cli() \
do { \
vcpu_info_t *_vcpu; \
- _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
+ _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \
_vcpu->evtchn_upcall_mask = 1; \
barrier(); \
} while (0)
@@ -115,7 +74,7 @@ do {
do { \
vcpu_info_t *_vcpu; \
barrier(); \
- _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
+ _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \
_vcpu->evtchn_upcall_mask = 0; \
barrier(); /* unmask then check (avoid races) */ \
if ( unlikely(_vcpu->evtchn_upcall_pending) ) \
@@ -126,7 +85,7 @@ do {
do { \
vcpu_info_t *_vcpu; \
barrier(); \
- _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
+ _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \
if ((_vcpu->evtchn_upcall_mask = (x)) == 0) { \
barrier(); /* unmask then check (avoid races) */ \
if ( unlikely(_vcpu->evtchn_upcall_pending) ) \
@@ -141,7 +100,7 @@ do {
#define __save_and_cli(x) \
do { \
vcpu_info_t *_vcpu; \
- _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
+ _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \
(x) = _vcpu->evtchn_upcall_mask; \
_vcpu->evtchn_upcall_mask = 1; \
barrier(); \
@@ -332,33 +291,6 @@ static __inline__ void atomic_inc(atomic
#define rdtscll(val) \
__asm__ __volatile__("rdtsc" : "=A" (val))
-
-
-/*
- * Kernel pointers have redundant information, so we can use a
- * scheme where we can return either an error code or a dentry
- * pointer with the same return value.
- *
- * This should be a per-architecture thing, to allow different
- * error and pointer decisions.
- */
-#define IS_ERR_VALUE(x) unlikely((x) > (unsigned long)-1000L)
-
-static inline void *ERR_PTR(long error)
-{
- return (void *) error;
-}
-
-static inline long PTR_ERR(const void *ptr)
-{
- return (long) ptr;
-}
-
-static inline long IS_ERR(const void *ptr)
-{
- return IS_ERR_VALUE((unsigned long)ptr);
-}
-
#endif /* !__ASSEMBLY__ */
#endif /* _OS_H_ */
Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h
==============================================================================
--- user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h Fri Dec 5 15:00:59 2008 (r185637)
@@ -30,15 +30,13 @@
#ifndef _XEN_XENFUNC_H_
#define _XEN_XENFUNC_H_
-#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
#define XPQ_CALL_COUNT 2
Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenpmap.h
==============================================================================
--- user/dfr/xenhvm/6/sys/amd64/include/xen/xenpmap.h Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenpmap.h Fri Dec 5 15:00:59 2008 (r185637)
@@ -33,6 +33,9 @@
#ifndef _XEN_XENPMAP_H_
#define _XEN_XENPMAP_H_
+
+#include <machine/xen/features.h>
+
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);
@@ -53,10 +56,6 @@ void pmap_ref(pt_entry_t *pte, vm_paddr_
#define xen_queue_pt_update(a, b) _xen_queue_pt_update((a), (b), NULL, 0)
#endif
-
-#include <sys/param.h>
-#include <sys/pcpu.h>
-
#ifdef PMAP_DEBUG
#define PMAP_REF pmap_ref
#define PMAP_DEC_REF_PAGE pmap_dec_ref_page
Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h
==============================================================================
--- user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h Fri Dec 5 15:00:59 2008 (r185637)
@@ -37,7 +37,7 @@ extern int xendebug_flags;
#else
#define XENPRINTF printf
#endif
-#include <machine/xen/features.h>
+#include <xen/features.h>
#if 0
#define TRACE_ENTER XENPRINTF("(file=%s, line=%d) entered %s\n", __FILE__, __LINE__, __FUNCTION__)
@@ -111,18 +111,8 @@ extern xen_pfn_t *xen_machine_phys;
#endif
-
void xpq_init(void);
-#define BITS_PER_LONG 32
-#define NR_CPUS MAX_VIRT_CPUS
-
-#define BITS_TO_LONGS(bits) \
- (((bits)+BITS_PER_LONG-1)/BITS_PER_LONG)
-#define DECLARE_BITMAP(name,bits) \
- unsigned long name[BITS_TO_LONGS(bits)]
-typedef struct { DECLARE_BITMAP(bits, NR_CPUS); } xen_cpumask_t;
-
int xen_create_contiguous_region(vm_page_t pages, int npages);
void xen_destroy_contiguous_region(void * addr, int npages);
Modified: user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -40,17 +40,18 @@ __FBSDID("$FreeBSD$");
#include <machine/intr_machdep.h>
#include <machine/vmparam.h>
-#include <machine/xen/hypervisor.h>
#include <machine/xen/xen-os.h>
-#include <machine/xen/xen_intr.h>
-#include <machine/xen/evtchn.h>
+#include <xen/hypervisor.h>
+#include <machine/xen/xenfunc.h>
+
+#include <xen/xen_intr.h>
+#include <xen/evtchn.h>
+#include <xen/gnttab.h>
#include <xen/interface/grant_table.h>
#include <xen/interface/io/protocols.h>
#include <xen/xenbus/xenbusvar.h>
#include <geom/geom_disk.h>
-#include <machine/xen/xenfunc.h>
-#include <xen/gnttab.h>
#include <dev/xen/blkfront/block.h>
@@ -106,7 +107,7 @@ static char * blkif_status_name[] = {
#endif
#define WPRINTK(fmt, args...) printf("[XEN] " fmt, ##args)
#if 0
-#define DPRINTK(fmt, args...) printf("[XEN] %s:%d" fmt ".\n", __FUNCTION__, __LINE__,##args)
+#define DPRINTK(fmt, args...) printf("[XEN] %s:%d: " fmt ".\n", __func__, __LINE__, ##args)
#else
#define DPRINTK(fmt, args...)
#endif
@@ -322,17 +323,17 @@ blkfront_probe(device_t dev)
static int
blkfront_attach(device_t dev)
{
- int err, vdevice, i, unit;
+ int error, vdevice, i, unit;
struct blkfront_info *info;
const char *name;
/* FIXME: Use dynamic device id if this is not set. */
- err = xenbus_scanf(XBT_NIL, xenbus_get_node(dev),
- "virtual-device", "%i", &vdevice);
- if (err != 1) {
- xenbus_dev_fatal(dev, err, "reading virtual-device");
+ error = xenbus_scanf(XBT_NIL, xenbus_get_node(dev),
+ "virtual-device", NULL, "%i", &vdevice);
+ if (error) {
+ xenbus_dev_fatal(dev, error, "reading virtual-device");
printf("couldn't find virtual device");
- return (err);
+ return (error);
}
blkfront_vdevice_to_unit(vdevice, &unit, &name);
@@ -361,10 +362,9 @@ blkfront_attach(device_t dev)
/* Front end dir is a number, which is used as the id. */
info->handle = strtoul(strrchr(xenbus_get_node(dev),'/')+1, NULL, 0);
- err = talk_to_backend(dev, info);
- if (err) {
- return err;
- }
+ error = talk_to_backend(dev, info);
+ if (error)
+ return (error);
return (0);
}
@@ -375,7 +375,7 @@ blkfront_resume(device_t dev)
struct blkfront_info *info = device_get_softc(dev);
int err;
- DPRINTK("blkfront_resume: %s\n", dev->nodename);
+ DPRINTK("blkfront_resume: %s\n", xenbus_get_node(dev));
blkif_free(info, 1);
@@ -450,7 +450,7 @@ static int
setup_blkring(device_t dev, struct blkfront_info *info)
{
blkif_sring_t *sring;
- int err;
+ int error;
info->ring_ref = GRANT_INVALID_REF;
@@ -462,28 +462,27 @@ setup_blkring(device_t dev, struct blkfr
SHARED_RING_INIT(sring);
FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE);
- err = xenbus_grant_ring(dev, (vtomach(info->ring.sring) >> PAGE_SHIFT));
- if (err < 0) {
+ error = xenbus_grant_ring(dev,
+ (vtomach(info->ring.sring) >> PAGE_SHIFT), &info->ring_ref);
+ if (error) {
free(sring, M_DEVBUF);
info->ring.sring = NULL;
goto fail;
}
- info->ring_ref = err;
- err = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev),
- "xbd", (driver_intr_t *)blkif_int, info,
- INTR_TYPE_BIO | INTR_MPSAFE, NULL);
- if (err <= 0) {
- xenbus_dev_fatal(dev, err,
- "bind_evtchn_to_irqhandler failed");
+ error = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev),
+ "xbd", (driver_intr_t *)blkif_int, info,
+ INTR_TYPE_BIO | INTR_MPSAFE, &info->irq);
+ if (error) {
+ xenbus_dev_fatal(dev, error,
+ "bind_evtchn_to_irqhandler failed");
goto fail;
}
- info->irq = err;
- return 0;
+ return (0);
fail:
blkif_free(info, 0);
- return err;
+ return (error);
}
@@ -495,7 +494,7 @@ blkfront_backend_changed(device_t dev, X
{
struct blkfront_info *info = device_get_softc(dev);
- DPRINTK("blkfront:backend_changed.\n");
+ DPRINTK("backend_state=%d\n", backend_state);
switch (backend_state) {
case XenbusStateUnknown:
@@ -708,7 +707,7 @@ blkif_open(struct disk *dp)
struct xb_softc *sc = (struct xb_softc *)dp->d_drv1;
if (sc == NULL) {
- printk("xb%d: not found", sc->xb_unit);
+ printf("xb%d: not found", sc->xb_unit);
return (ENXIO);
}
@@ -999,7 +998,7 @@ blkif_free(struct blkfront_info *info, i
info->ring.sring = NULL;
}
if (info->irq)
- unbind_from_irqhandler(info->irq, info);
+ unbind_from_irqhandler(info->irq);
info->irq = 0;
}
@@ -1022,7 +1021,6 @@ blkif_recover(struct blkfront_info *info
/* Stage 1: Make a safe copy of the shadow state. */
copy = (struct blk_shadow *)malloc(sizeof(info->shadow), M_DEVBUF, M_NOWAIT|M_ZERO);
- PANIC_IF(copy == NULL);
memcpy(copy, info->shadow, sizeof(info->shadow));
/* Stage 2: Set up free list. */
Modified: user/dfr/xenhvm/6/sys/dev/xen/console/console.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/console/console.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/dev/xen/console/console.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -15,8 +15,8 @@
#include <sys/bus.h>
#include <machine/stdarg.h>
#include <machine/xen/xen-os.h>
-#include <machine/xen/hypervisor.h>
-#include <machine/xen/xen_intr.h>
+#include <xen/hypervisor.h>
+#include <xen/xen_intr.h>
#include <sys/cons.h>
#include <sys/proc.h>
@@ -234,7 +234,7 @@ static int
xc_attach(device_t dev)
{
struct xc_softc *sc = (struct xc_softc *)device_get_softc(dev);
-
+ int error;
if (xen_start_info->flags & SIF_INITDOMAIN) {
xc_consdev.cn_putc = xccnputc_dom0;
@@ -259,16 +259,11 @@ xc_attach(device_t dev)
callout_reset(&xc_callout, XC_POLLTIME, xc_timeout, xccons);
if (xen_start_info->flags & SIF_INITDOMAIN) {
- PANIC_IF(bind_virq_to_irqhandler(
- VIRQ_CONSOLE,
- 0,
- "console",
- xencons_priv_interrupt,
- INTR_TYPE_TTY) < 0);
-
+ error = bind_virq_to_irqhandler(VIRQ_CONSOLE, 0, "console",
+ xencons_priv_interrupt, INTR_TYPE_TTY, NULL);
+ KASSERT(error >= 0, ("can't register console interrupt"));
}
-
/* register handler to flush console on shutdown */
if ((EVENTHANDLER_REGISTER(shutdown_post_sync, xc_shutdown,
NULL, SHUTDOWN_PRI_DEFAULT)) == NULL)
Modified: user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -13,17 +13,17 @@ __FBSDID("$FreeBSD$");
#include <sys/conf.h>
#include <sys/kernel.h>
#include <sys/bus.h>
-#include <machine/stdarg.h>
-#include <machine/xen/xen-os.h>
-#include <machine/xen/hypervisor.h>
-#include <machine/xen/xen_intr.h>
#include <sys/cons.h>
+#include <machine/stdarg.h>
+#include <machine/xen/xen-os.h>
+#include <xen/hypervisor.h>
-#include <dev/xen/console/xencons_ring.h>
-#include <machine/xen/evtchn.h>
+#include <xen/xen_intr.h>
+#include <xen/evtchn.h>
#include <xen/interface/io/console.h>
+#include <dev/xen/console/xencons_ring.h>
#define console_evtchn console.domU.evtchn
extern char *console_page;
@@ -59,7 +59,8 @@ xencons_ring_send(const char *data, unsi
sent = 0;
mb();
- PANIC_IF((prod - cons) > sizeof(intf->out));
+ KASSERT((prod - cons) <= sizeof(intf->out),
+ ("console send ring inconsistent"));
while ((sent < len) && ((prod - cons) < sizeof(intf->out)))
intf->out[MASK_XENCONS_IDX(prod++, intf->out)] = data[sent++];
@@ -116,8 +117,8 @@ xencons_ring_init(void)
return 0;
err = bind_caller_port_to_irqhandler(xen_start_info->console_evtchn,
- "xencons", xencons_handle_input, NULL,
- INTR_TYPE_MISC | INTR_MPSAFE, NULL);
+ "xencons", xencons_handle_input, NULL,
+ INTR_TYPE_MISC | INTR_MPSAFE, NULL);
if (err) {
return err;
}
Modified: user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -63,17 +63,19 @@ __FBSDID("$FreeBSD$");
#include <machine/intr_machdep.h>
#include <machine/xen/xen-os.h>
-#include <machine/xen/hypervisor.h>
-#include <machine/xen/xen_intr.h>
-#include <machine/xen/evtchn.h>
+#include <xen/hypervisor.h>
#include <machine/xen/xenvar.h>
+#include <xen/features.h>
+
+#include <xen/xen_intr.h>
+#include <xen/evtchn.h>
#include <xen/gnttab.h>
#include <xen/interface/memory.h>
-#include <dev/xen/netfront/mbufq.h>
-#include <machine/xen/features.h>
#include <xen/interface/io/netif.h>
#include <xen/xenbus/xenbusvar.h>
+#include <dev/xen/netfront/mbufq.h>
+
#include "xenbus_if.h"
#define GRANT_INVALID_REF 0
@@ -368,24 +370,25 @@ makembuf (struct mbuf *buf)
static int
xen_net_read_mac(device_t dev, uint8_t mac[])
{
- char *s;
- int i;
- char *e;
- char *macstr = xenbus_read(XBT_NIL, xenbus_get_node(dev), "mac", NULL);
- if (IS_ERR(macstr)) {
- return PTR_ERR(macstr);
- }
+ int error, i;
+ char *s, *e, *macstr;
+
+ error = xenbus_read(XBT_NIL, xenbus_get_node(dev), "mac", NULL,
+ (void **) &macstr);
+ if (error)
+ return (error);
+
s = macstr;
for (i = 0; i < ETHER_ADDR_LEN; i++) {
mac[i] = strtoul(s, &e, 16);
if (s == e || (e[0] != ':' && e[0] != 0)) {
free(macstr, M_DEVBUF);
- return ENOENT;
+ return (ENOENT);
}
s = &e[1];
}
free(macstr, M_DEVBUF);
- return 0;
+ return (0);
}
/**
@@ -537,7 +540,7 @@ setup_device(device_t dev, struct netfro
{
netif_tx_sring_t *txs;
netif_rx_sring_t *rxs;
- int err;
+ int error;
struct ifnet *ifp;
ifp = info->xn_ifp;
@@ -550,51 +553,48 @@ setup_device(device_t dev, struct netfro
txs = (netif_tx_sring_t *)malloc(PAGE_SIZE, M_DEVBUF, M_NOWAIT|M_ZERO);
if (!txs) {
- err = ENOMEM;
- xenbus_dev_fatal(dev, err, "allocating tx ring page");
+ error = ENOMEM;
+ xenbus_dev_fatal(dev, error, "allocating tx ring page");
goto fail;
}
SHARED_RING_INIT(txs);
FRONT_RING_INIT(&info->tx, txs, PAGE_SIZE);
- err = xenbus_grant_ring(dev, virt_to_mfn(txs));
- if (err < 0)
+ error = xenbus_grant_ring(dev, virt_to_mfn(txs), &info->tx_ring_ref);
+ if (error)
goto fail;
- info->tx_ring_ref = err;
rxs = (netif_rx_sring_t *)malloc(PAGE_SIZE, M_DEVBUF, M_NOWAIT|M_ZERO);
if (!rxs) {
- err = ENOMEM;
- xenbus_dev_fatal(dev, err, "allocating rx ring page");
+ error = ENOMEM;
+ xenbus_dev_fatal(dev, error, "allocating rx ring page");
goto fail;
}
SHARED_RING_INIT(rxs);
FRONT_RING_INIT(&info->rx, rxs, PAGE_SIZE);
- err = xenbus_grant_ring(dev, virt_to_mfn(rxs));
- if (err < 0)
+ error = xenbus_grant_ring(dev, virt_to_mfn(rxs), &info->rx_ring_ref);
+ if (error)
goto fail;
- info->rx_ring_ref = err;
#if 0
network_connect(info);
#endif
- err = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev),
- "xn", xn_intr, info, INTR_TYPE_NET | INTR_MPSAFE, NULL);
+ error = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev),
+ "xn", xn_intr, info, INTR_TYPE_NET | INTR_MPSAFE, &info->irq);
- if (err <= 0) {
- xenbus_dev_fatal(dev, err,
+ if (error) {
+ xenbus_dev_fatal(dev, error,
"bind_evtchn_to_irqhandler failed");
goto fail;
}
- info->irq = err;
show_device(info);
- return 0;
+ return (0);
fail:
netif_free(info);
- return err;
+ return (error);
}
/**
@@ -1562,18 +1562,18 @@ xn_stop(struct netfront_info *sc)
int
network_connect(struct netfront_info *np)
{
- int i, requeue_idx, err;
+ int i, requeue_idx, error;
grant_ref_t ref;
netif_rx_request_t *req;
u_int feature_rx_copy, feature_rx_flip;
- err = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev),
- "feature-rx-copy", "%u", &feature_rx_copy);
- if (err != 1)
+ error = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev),
+ "feature-rx-copy", NULL, "%u", &feature_rx_copy);
+ if (error)
feature_rx_copy = 0;
- err = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev),
- "feature-rx-flip", "%u", &feature_rx_flip);
- if (err != 1)
+ error = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev),
+ "feature-rx-flip", NULL, "%u", &feature_rx_flip);
+ if (error)
feature_rx_flip = 1;
/*
@@ -1586,9 +1586,9 @@ network_connect(struct netfront_info *np
XN_LOCK(np);
/* Recovery procedure: */
- err = talk_to_backend(np->xbdev, np);
- if (err)
- return (err);
+ error = talk_to_backend(np->xbdev, np);
+ if (error)
+ return (error);
/* Step 1: Reinitialise variables. */
netif_release_tx_bufs(np);
@@ -1796,7 +1796,7 @@ static void netif_disconnect_backend(str
#if 0
if (info->irq)
- unbind_from_irqhandler(info->irq, info->netdev);
+ unbind_from_irqhandler(info->irq);
#else
panic("FIX ME");
#endif
Modified: user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -36,20 +36,17 @@ __FBSDID("$FreeBSD: user/dfr/xenhvm/6/sy
#include <sys/bus.h>
#include <sys/malloc.h>
#include <sys/kernel.h>
+#include <sys/limits.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/interrupt.h>
#include <sys/pcpu.h>
-#include <machine/cpufunc.h>
-#include <machine/intr_machdep.h>
-
#include <machine/xen/xen-os.h>
#include <machine/xen/xenvar.h>
-#include <machine/xen/xen_intr.h>
-#include <machine/xen/synch_bitops.h>
-#include <machine/xen/evtchn.h>
-#include <machine/xen/hypervisor.h>
+#include <xen/hypervisor.h>
+#include <xen/xen_intr.h>
+#include <xen/evtchn.h>
#include <sys/smp.h>
#include <dev/xen/xenpci/xenpcivar.h>
@@ -81,10 +78,11 @@ static struct mtx irq_alloc_lock;
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
-static int alloc_xen_irq(void)
+static unsigned int
+alloc_xen_irq(void)
{
static int warned;
- int irq;
+ unsigned int irq;
mtx_lock(&irq_alloc_lock);
@@ -107,40 +105,46 @@ static int alloc_xen_irq(void)
return -ENOSPC;
}
-static void free_xen_irq(int irq)
+static void
+free_xen_irq(int irq)
{
+
mtx_lock(&irq_alloc_lock);
irq_evtchn[irq].inuse = 0;
mtx_unlock(&irq_alloc_lock);
}
-int irq_to_evtchn_port(int irq)
+int
+irq_to_evtchn_port(int irq)
{
+
return irq_evtchn[irq].evtchn;
}
-void mask_evtchn(int port)
+void
+mask_evtchn(int port)
{
shared_info_t *s = HYPERVISOR_shared_info;
+
synch_set_bit(port, &s->evtchn_mask[0]);
}
-void unmask_evtchn(int port)
+void
+unmask_evtchn(int port)
{
evtchn_unmask_t op = { .port = port };
+
HYPERVISOR_event_channel_op(EVTCHNOP_unmask, &op);
}
-int bind_listening_port_to_irqhandler(
- unsigned int remote_domain,
- const char *devname,
- driver_intr_t handler,
- void *arg,
- unsigned long irqflags,
- void **cookiep)
+int
+bind_listening_port_to_irqhandler(unsigned int remote_domain,
+ const char *devname, driver_intr_t handler, void *arg,
+ unsigned long irqflags, unsigned int *irqp)
{
struct evtchn_alloc_unbound alloc_unbound;
- int err, irq;
+ unsigned int irq;
+ int error;
irq = alloc_xen_irq();
if (irq < 0)
@@ -150,12 +154,12 @@ int bind_listening_port_to_irqhandler(
alloc_unbound.dom = DOMID_SELF;
alloc_unbound.remote_dom = remote_domain;
- err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
+ error = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
&alloc_unbound);
- if (err) {
+ if (error) {
mtx_unlock(&irq_evtchn[irq].lock);
free_xen_irq(irq);
- return err;
+ return (-error);
}
irq_evtchn[irq].handler = handler;
@@ -169,18 +173,17 @@ int bind_listening_port_to_irqhandler(
mtx_unlock(&irq_evtchn[irq].lock);
- return irq;
+ if (irqp)
+ *irqp = irq;
+ return (0);
}
-int bind_caller_port_to_irqhandler(
- unsigned int caller_port,
- const char *devname,
- driver_intr_t handler,
- void *arg,
- unsigned long irqflags,
- void **cookiep)
+int
+bind_caller_port_to_irqhandler(unsigned int caller_port,
+ const char *devname, driver_intr_t handler, void *arg,
+ unsigned long irqflags, unsigned int *irqp)
{
- int irq;
+ unsigned int irq;
irq = alloc_xen_irq();
if (irq < 0)
@@ -199,10 +202,13 @@ int bind_caller_port_to_irqhandler(
mtx_unlock(&irq_evtchn[irq].lock);
- return irq;
+ if (irqp)
+ *irqp = irq;
+ return (0);
}
-void unbind_from_irqhandler(unsigned int irq, void *dev_id)
+void
+unbind_from_irqhandler(unsigned int irq)
{
int evtchn;
@@ -258,6 +264,7 @@ evtchn_interrupt(void *arg)
int irq;
shared_info_t *s = HYPERVISOR_shared_info;
vcpu_info_t *v = &s->vcpu_info[cpu];
+ struct pcpu *pc = pcpu_find(cpu);
unsigned long l1, l2;
v->evtchn_upcall_pending = 0;
@@ -271,17 +278,17 @@ evtchn_interrupt(void *arg)
l1 = atomic_readandclear_long(&v->evtchn_pending_sel);
- l1i = per_cpu(last_processed_l1i, cpu);
- l2i = per_cpu(last_processed_l2i, cpu);
+ l1i = pc->pc_last_processed_l1i;
+ l2i = pc->pc_last_processed_l2i;
while (l1 != 0) {
- l1i = (l1i + 1) % BITS_PER_LONG;
+ l1i = (l1i + 1) % LONG_BIT;
masked_l1 = l1 & ((~0UL) << l1i);
if (masked_l1 == 0) { /* if we masked out all events, wrap around to the beginning */
- l1i = BITS_PER_LONG - 1;
- l2i = BITS_PER_LONG - 1;
+ l1i = LONG_BIT - 1;
+ l2i = LONG_BIT - 1;
continue;
}
l1i = __ffs(masked_l1);
@@ -289,17 +296,17 @@ evtchn_interrupt(void *arg)
do {
l2 = active_evtchns(cpu, s, l1i);
- l2i = (l2i + 1) % BITS_PER_LONG;
+ l2i = (l2i + 1) % LONG_BIT;
masked_l2 = l2 & ((~0UL) << l2i);
if (masked_l2 == 0) { /* if we masked out all events, move on */
- l2i = BITS_PER_LONG - 1;
+ l2i = LONG_BIT - 1;
break;
}
l2i = __ffs(masked_l2);
/* process port */
- port = (l1i * BITS_PER_LONG) + l2i;
+ port = (l1i * LONG_BIT) + l2i;
synch_clear_bit(port, &s->evtchn_pending[0]);
irq = evtchn_to_irq[port];
@@ -327,10 +334,10 @@ evtchn_interrupt(void *arg)
mtx_unlock(&irq_evtchn[irq].lock);
/* if this is the final port processed, we'll pick up here+1 next time */
- per_cpu(last_processed_l1i, cpu) = l1i;
- per_cpu(last_processed_l2i, cpu) = l2i;
+ pc->pc_last_processed_l1i = l1i;
+ pc->pc_last_processed_l2i = l2i;
- } while (l2i != BITS_PER_LONG - 1);
+ } while (l2i != LONG_BIT - 1);
l2 = active_evtchns(cpu, s, l1i);
if (l2 == 0) /* we handled all ports, so we can clear the selector bit */
@@ -363,8 +370,8 @@ xenpci_irq_init(device_t device, struct
mtx_init(&irq_evtchn[irq].lock, "irq-evtchn", NULL, MTX_DEF);
for (cpu = 0; cpu < mp_ncpus; cpu++) {
- per_cpu(last_processed_l1i, cpu) = BITS_PER_LONG - 1;
- per_cpu(last_processed_l2i, cpu) = BITS_PER_LONG - 1;
+ pcpu_find(cpu)->pc_last_processed_l1i = LONG_BIT - 1;
+ pcpu_find(cpu)->pc_last_processed_l2i = LONG_BIT - 1;
}
error = BUS_SETUP_INTR(device_get_parent(device), device,
Modified: user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -41,8 +41,9 @@ __FBSDID("$FreeBSD$");
#include <sys/rman.h>
#include <machine/stdarg.h>
-#include <machine/xen/features.h>
-#include <machine/xen/hypervisor.h>
+#include <machine/xen/xen-os.h>
+#include <xen/features.h>
+#include <xen/hypervisor.h>
#include <xen/interface/memory.h>
#include <xen/interface/hvm/params.h>
Modified: user/dfr/xenhvm/6/sys/i386/conf/XEN
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/conf/XEN Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/i386/conf/XEN Fri Dec 5 15:00:59 2008 (r185637)
@@ -61,8 +61,8 @@ options AUDIT # Security event auditi
options KDB # Enable kernel debugger support.
options DDB # Support DDB.
options GDB # Support remote GDB.
-options INVARIANTS # Enable calls of extra sanity checking
-options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS
+#options INVARIANTS # Enable calls of extra sanity checking
+#options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS
#options WITNESS # Enable checks to detect deadlocks and cycles
#options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
Modified: user/dfr/xenhvm/6/sys/i386/i386/genassym.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/i386/genassym.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/i386/i386/genassym.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -229,7 +229,7 @@ ASSYM(BUS_SPACE_HANDLE_IAT, offsetof(str
#endif
#ifdef XEN
-#include <machine/xen/hypervisor.h>
+#include <xen/hypervisor.h>
ASSYM(PC_CR3, offsetof(struct pcpu, pc_cr3));
ASSYM(HYPERVISOR_VIRT_START, __HYPERVISOR_VIRT_START);
#endif
Modified: user/dfr/xenhvm/6/sys/i386/i386/machdep.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/i386/machdep.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/i386/i386/machdep.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -143,11 +143,11 @@ uint32_t arch_i386_xbox_memsize = 0;
#ifdef XEN
/* XEN includes */
-#include <machine/xen/hypervisor.h>
+#include <xen/hypervisor.h>
#include <machine/xen/xen-os.h>
#include <machine/xen/xenvar.h>
#include <machine/xen/xenfunc.h>
-#include <machine/xen/xen_intr.h>
+#include <xen/xen_intr.h>
void Xhypervisor_callback(void);
void failsafe_callback(void);
@@ -2255,13 +2255,16 @@ init386(int first)
ssdtosd(&gdt_segs[x], &gdt[x].sd);
- printk("gdt=%p\n", gdt);
- printk("PTmap=%p\n", PTmap);
- printk("addr=%p\n", *vtopte((unsigned long)gdt) & ~PG_RW);
+ if (bootverbose) {
+ printf("gdt=%p\n", gdt);
+ printf("PTmap=%p\n", PTmap);
+ printf("addr=%#jx\n", (uintmax_t)*vtopte((unsigned long)gdt) & ~PG_RW);
+ }
gdtmachpfn = vtomach(gdt) >> PAGE_SHIFT;
PT_SET_MA(gdt, *vtopte((unsigned long)gdt) & ~(PG_RW|PG_M|PG_A));
- PANIC_IF(HYPERVISOR_set_gdt(&gdtmachpfn, 512) != 0);
+ error = HYPERVISOR_set_gdt(&gdtmachpfn, 512);
+ KASSERT(error == 0, ("unexpected result from set_gdt"));
lgdt(&r_gdt /* unused */);
gdtset = 1;
Modified: user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c Fri Dec 5 14:37:14 2008 (r185636)
+++ user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c Fri Dec 5 15:00:59 2008 (r185637)
@@ -59,6 +59,8 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_kern.h> /* for kernel_map */
#ifdef XEN
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list