svn commit: r184110 - in head/sys/i386/include: . xen
Kip Macy
kmacy at FreeBSD.org
Tue Oct 21 06:38:05 UTC 2008
Author: kmacy
Date: Tue Oct 21 06:38:05 2008
New Revision: 184110
URL: http://svn.freebsd.org/changeset/base/184110
Log:
Header cleanups and addition of IPI declarations for xen
Modified:
head/sys/i386/include/apicvar.h
head/sys/i386/include/smp.h
head/sys/i386/include/xen/evtchn.h
head/sys/i386/include/xen/xen-os.h
head/sys/i386/include/xen/xen_intr.h
head/sys/i386/include/xen/xenfunc.h
Modified: head/sys/i386/include/apicvar.h
==============================================================================
--- head/sys/i386/include/apicvar.h Tue Oct 21 05:08:35 2008 (r184109)
+++ head/sys/i386/include/apicvar.h Tue Oct 21 06:38:05 2008 (r184110)
@@ -113,6 +113,17 @@
#define APIC_THERMAL_INT (APIC_LOCAL_INTS + 1)
#define APIC_IPI_INTS (APIC_LOCAL_INTS + 2)
+#ifdef XEN
+#define IPI_RENDEZVOUS (0) /* Inter-CPU rendezvous. */
+#define IPI_INVLTLB (1) /* TLB Shootdown IPIs */
+#define IPI_INVLPG (2)
+#define IPI_INVLRNG (3)
+#define IPI_INVLCACHE (4)
+#define IPI_LAZYPMAP (5) /* Lazy pmap release. */
+/* Vector to handle bitmap based IPIs */
+#define IPI_BITMAP_VECTOR (6)
+
+#else
#define IPI_RENDEZVOUS (APIC_IPI_INTS) /* Inter-CPU rendezvous. */
#define IPI_INVLTLB (APIC_IPI_INTS + 1) /* TLB Shootdown IPIs */
#define IPI_INVLPG (APIC_IPI_INTS + 2)
@@ -121,6 +132,7 @@
#define IPI_LAZYPMAP (APIC_IPI_INTS + 5) /* Lazy pmap release. */
/* Vector to handle bitmap based IPIs */
#define IPI_BITMAP_VECTOR (APIC_IPI_INTS + 6)
+#endif
/* IPIs handled by IPI_BITMAPED_VECTOR (XXX ups is there a better place?) */
#define IPI_AST 0 /* Generate software trap. */
Modified: head/sys/i386/include/smp.h
==============================================================================
--- head/sys/i386/include/smp.h Tue Oct 21 05:08:35 2008 (r184109)
+++ head/sys/i386/include/smp.h Tue Oct 21 06:38:05 2008 (r184110)
@@ -83,6 +83,11 @@ int ipi_nmi_handler(void);
#endif
#ifdef XEN
void ipi_to_irq_init(void);
+
+#define RESCHEDULE_VECTOR 0
+#define CALL_FUNCTION_VECTOR 1
+#define NR_IPIS 2
+
#endif
#endif /* !LOCORE */
#endif /* SMP */
Modified: head/sys/i386/include/xen/evtchn.h
==============================================================================
--- head/sys/i386/include/xen/evtchn.h Tue Oct 21 05:08:35 2008 (r184109)
+++ head/sys/i386/include/xen/evtchn.h Tue Oct 21 06:38:05 2008 (r184110)
@@ -37,13 +37,24 @@ void mask_evtchn(int port);
void unmask_evtchn(int port);
+#ifdef SMP
+void rebind_evtchn_to_cpu(int port, unsigned int cpu);
+#else
+#define rebind_evtchn_to_cpu(port, cpu) ((void)0)
+#endif
+static inline
+int test_and_set_evtchn_mask(int port)
+{
+ shared_info_t *s = HYPERVISOR_shared_info;
+ return synch_test_and_set_bit(port, s->evtchn_mask);
+}
static inline void
clear_evtchn(int port)
{
- shared_info_t *s = HYPERVISOR_shared_info;
- synch_clear_bit(port, &s->evtchn_pending[0]);
+ shared_info_t *s = HYPERVISOR_shared_info;
+ synch_clear_bit(port, &s->evtchn_pending[0]);
}
static inline void
Modified: head/sys/i386/include/xen/xen-os.h
==============================================================================
--- head/sys/i386/include/xen/xen-os.h Tue Oct 21 05:08:35 2008 (r184109)
+++ head/sys/i386/include/xen/xen-os.h Tue Oct 21 06:38:05 2008 (r184110)
@@ -98,12 +98,6 @@ void printk(const char *fmt, ...);
/* some function prototypes */
void trap_init(void);
-extern int preemptable;
-#define preempt_disable() (preemptable = 0)
-#define preempt_enable() (preemptable = 1)
-#define preempt_enable_no_resched() (preemptable = 1)
-
-
/*
* STI/CLI equivalents. These basically set and clear the virtual
* event_enable flag in teh shared_info structure. Note that when
@@ -115,10 +109,8 @@ extern int preemptable;
#define __cli() \
do { \
vcpu_info_t *_vcpu; \
- preempt_disable(); \
_vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
_vcpu->evtchn_upcall_mask = 1; \
- preempt_enable_no_resched(); \
barrier(); \
} while (0)
@@ -126,36 +118,23 @@ do {
do { \
vcpu_info_t *_vcpu; \
barrier(); \
- preempt_disable(); \
_vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
_vcpu->evtchn_upcall_mask = 0; \
barrier(); /* unmask then check (avoid races) */ \
if ( unlikely(_vcpu->evtchn_upcall_pending) ) \
force_evtchn_callback(); \
- preempt_enable(); \
-} while (0)
-
-
-#define __save_flags(x) \
-do { \
- vcpu_info_t *vcpu; \
- vcpu = HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
- (x) = _vcpu->evtchn_upcall_mask; \
} while (0)
#define __restore_flags(x) \
do { \
vcpu_info_t *_vcpu; \
barrier(); \
- preempt_disable(); \
_vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \
if ((_vcpu->evtchn_upcall_mask = (x)) == 0) { \
barrier(); /* unmask then check (avoid races) */ \
if ( unlikely(_vcpu->evtchn_upcall_pending) ) \
force_evtchn_callback(); \
- preempt_enable(); \
- } else \
- preempt_enable_no_resched(); \
+ } \
} while (0)
/*
Modified: head/sys/i386/include/xen/xen_intr.h
==============================================================================
--- head/sys/i386/include/xen/xen_intr.h Tue Oct 21 05:08:35 2008 (r184109)
+++ head/sys/i386/include/xen/xen_intr.h Tue Oct 21 06:38:05 2008 (r184110)
@@ -32,7 +32,6 @@
/* Dynamic binding of event channels and VIRQ sources to Linux IRQ space. */
extern void unbind_from_irq(int irq);
-extern void bind_evtchn_to_cpu(unsigned int chn, unsigned int cpu);
extern int bind_caller_port_to_irqhandler(unsigned int caller_port,
const char *devname, driver_intr_t handler, void *arg,
unsigned long irqflags, void **cookiep);
@@ -41,8 +40,12 @@ extern int bind_listening_port_to_irqhan
void **cookiep);
extern int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, const char *devname,
driver_filter_t filter, driver_intr_t handler, unsigned long irqflags);
-extern int bind_ipi_to_irqhandler(unsigned int ipi, unsigned int cpu, const char *devname,
- driver_intr_t handler, unsigned long irqflags);
+extern int bind_ipi_to_irqhandler(unsigned int ipi,
+ unsigned int cpu,
+ const char *devname,
+ driver_intr_t handler,
+ unsigned long irqflags);
+
extern int bind_interdomain_evtchn_to_irqhandler(unsigned int remote_domain,
unsigned int remote_port,
const char *devname,
@@ -65,7 +68,7 @@ extern void enable_irq(unsigned int);
extern void irq_suspend(void);
extern void irq_resume(void);
-extern void idle_block(void);
-
+extern void idle_block(void);
+extern int ap_cpu_initclocks(int cpu);
#endif /* _XEN_INTR_H_ */
Modified: head/sys/i386/include/xen/xenfunc.h
==============================================================================
--- head/sys/i386/include/xen/xenfunc.h Tue Oct 21 05:08:35 2008 (r184109)
+++ head/sys/i386/include/xen/xenfunc.h Tue Oct 21 06:38:05 2008 (r184110)
@@ -67,8 +67,6 @@ void _xen_machphys_update(vm_paddr_t, vm
void xen_update_descriptor(union descriptor *, union descriptor *);
-void ap_cpu_initclocks(void);
-
extern struct mtx balloon_lock;
#if 0
#define balloon_lock(__flags) mtx_lock_irqsave(&balloon_lock, __flags)
More information about the svn-src-all
mailing list