svn commit: r186780 - in user/dfr/xenhvm/6: . bin/cp contrib/bind9
contrib/ntp contrib/openpam contrib/sendmail contrib/tcsh
contrib/telnet etc games/fortune/fortune include
lib/libarchive lib/libb...
Doug Rabson
dfr at FreeBSD.org
Mon Jan 5 07:02:07 PST 2009
Author: dfr
Date: Mon Jan 5 15:02:05 2009
New Revision: 186780
URL: http://svn.freebsd.org/changeset/base/186780
Log:
Merge r185180:186767 from projects/releng_6_xen
Modified:
user/dfr/xenhvm/6/ (props changed)
user/dfr/xenhvm/6/Makefile.inc1 (props changed)
user/dfr/xenhvm/6/bin/cp/ (props changed)
user/dfr/xenhvm/6/contrib/bind9/ (props changed)
user/dfr/xenhvm/6/contrib/ntp/ (props changed)
user/dfr/xenhvm/6/contrib/openpam/ (props changed)
user/dfr/xenhvm/6/contrib/sendmail/ (props changed)
user/dfr/xenhvm/6/contrib/tcsh/ (props changed)
user/dfr/xenhvm/6/contrib/telnet/ (props changed)
user/dfr/xenhvm/6/etc/ (props changed)
user/dfr/xenhvm/6/games/fortune/fortune/ (props changed)
user/dfr/xenhvm/6/include/ (props changed)
user/dfr/xenhvm/6/lib/libarchive/ (props changed)
user/dfr/xenhvm/6/lib/libbluetooth/ (props changed)
user/dfr/xenhvm/6/lib/libc/ (props changed)
user/dfr/xenhvm/6/lib/libc/sys/ (props changed)
user/dfr/xenhvm/6/lib/libexpat/ (props changed)
user/dfr/xenhvm/6/lib/libfetch/ (props changed)
user/dfr/xenhvm/6/lib/libftpio/ (props changed)
user/dfr/xenhvm/6/lib/libgeom/ (props changed)
user/dfr/xenhvm/6/lib/libpam/ (props changed)
user/dfr/xenhvm/6/lib/libutil/ (props changed)
user/dfr/xenhvm/6/libexec/rpc.rstatd/ (props changed)
user/dfr/xenhvm/6/sbin/devfs/ (props changed)
user/dfr/xenhvm/6/sbin/fdisk/ (props changed)
user/dfr/xenhvm/6/sbin/ping6/ (props changed)
user/dfr/xenhvm/6/sbin/routed/main.c (props changed)
user/dfr/xenhvm/6/share/colldef/ (props changed)
user/dfr/xenhvm/6/share/man/man4/ (props changed)
user/dfr/xenhvm/6/share/man/man4/xl.4 (props changed)
user/dfr/xenhvm/6/share/man/man5/ (props changed)
user/dfr/xenhvm/6/share/man/man7/ports.7 (props changed)
user/dfr/xenhvm/6/share/man/man9/ (props changed)
user/dfr/xenhvm/6/share/mk/ (props changed)
user/dfr/xenhvm/6/share/sendmail/ (props changed)
user/dfr/xenhvm/6/share/syscons/keymaps/ (props changed)
user/dfr/xenhvm/6/share/timedef/ (props changed)
user/dfr/xenhvm/6/share/zoneinfo/ (props changed)
user/dfr/xenhvm/6/sys/ (props changed)
user/dfr/xenhvm/6/sys/conf/kern.pre.mk
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/evtchn/evtchn_dev.c
user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c
user/dfr/xenhvm/6/sys/i386/conf/XEN
user/dfr/xenhvm/6/sys/i386/include/xen/xenfunc.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/pmap.c
user/dfr/xenhvm/6/sys/i386/xen/xen_machdep.c
user/dfr/xenhvm/6/sys/kern/kern_condvar.c
user/dfr/xenhvm/6/sys/kern/kern_lock.c
user/dfr/xenhvm/6/sys/kern/kern_mutex.c
user/dfr/xenhvm/6/sys/kern/kern_rwlock.c
user/dfr/xenhvm/6/sys/kern/kern_sx.c
user/dfr/xenhvm/6/sys/kern/kern_synch.c
user/dfr/xenhvm/6/sys/kern/kern_timeout.c
user/dfr/xenhvm/6/sys/sys/lock.h
user/dfr/xenhvm/6/sys/sys/mutex.h
user/dfr/xenhvm/6/sys/sys/sleepqueue.h
user/dfr/xenhvm/6/sys/sys/sx.h
user/dfr/xenhvm/6/sys/sys/systm.h
user/dfr/xenhvm/6/sys/xen/evtchn.h
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/gnttab.c
user/dfr/xenhvm/6/sys/xen/gnttab.h
user/dfr/xenhvm/6/sys/xen/hypervisor.h
user/dfr/xenhvm/6/sys/xen/interface/arch-x86/xen.h
user/dfr/xenhvm/6/sys/xen/xen_intr.h
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_if.m
user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c
user/dfr/xenhvm/6/sys/xen/xenbus/xenbusvar.h
user/dfr/xenhvm/6/tools/regression/usr.bin/ (props changed)
user/dfr/xenhvm/6/tools/regression/usr.bin/calendar/ (props changed)
user/dfr/xenhvm/6/usr.bin/calendar/ (props changed)
user/dfr/xenhvm/6/usr.bin/cksum/ (props changed)
user/dfr/xenhvm/6/usr.bin/fetch/ (props changed)
user/dfr/xenhvm/6/usr.bin/gzip/ (props changed)
user/dfr/xenhvm/6/usr.bin/ipcrm/ (props changed)
user/dfr/xenhvm/6/usr.bin/ipcs/ (props changed)
user/dfr/xenhvm/6/usr.bin/ldd/ (props changed)
user/dfr/xenhvm/6/usr.bin/lockf/ (props changed)
user/dfr/xenhvm/6/usr.bin/make/ (props changed)
user/dfr/xenhvm/6/usr.bin/netstat/ (props changed)
user/dfr/xenhvm/6/usr.bin/shar/ (props changed)
user/dfr/xenhvm/6/usr.bin/su/ (props changed)
user/dfr/xenhvm/6/usr.bin/tar/ (props changed)
user/dfr/xenhvm/6/usr.bin/truncate/ (props changed)
user/dfr/xenhvm/6/usr.bin/units/ (props changed)
user/dfr/xenhvm/6/usr.bin/whereis/ (props changed)
user/dfr/xenhvm/6/usr.bin/window/ (props changed)
user/dfr/xenhvm/6/usr.sbin/adduser/ (props changed)
user/dfr/xenhvm/6/usr.sbin/cdcontrol/ (props changed)
user/dfr/xenhvm/6/usr.sbin/config/ (props changed)
user/dfr/xenhvm/6/usr.sbin/cron/ (props changed)
user/dfr/xenhvm/6/usr.sbin/freebsd-update/ (props changed)
user/dfr/xenhvm/6/usr.sbin/mountd/ (props changed)
user/dfr/xenhvm/6/usr.sbin/newsyslog/newsyslog.conf.5 (props changed)
user/dfr/xenhvm/6/usr.sbin/ntp/ (props changed)
user/dfr/xenhvm/6/usr.sbin/ntp/doc/ (props changed)
user/dfr/xenhvm/6/usr.sbin/pkg_install/ (props changed)
user/dfr/xenhvm/6/usr.sbin/portsnap/ (props changed)
user/dfr/xenhvm/6/usr.sbin/pw/ (props changed)
user/dfr/xenhvm/6/usr.sbin/rpc.lockd/ (props changed)
user/dfr/xenhvm/6/usr.sbin/sysinstall/ (props changed)
user/dfr/xenhvm/6/usr.sbin/syslogd/ (props changed)
user/dfr/xenhvm/6/usr.sbin/tzsetup/ (props changed)
Modified: user/dfr/xenhvm/6/sys/conf/kern.pre.mk
==============================================================================
--- user/dfr/xenhvm/6/sys/conf/kern.pre.mk Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/conf/kern.pre.mk Mon Jan 5 15:02:05 2009 (r186780)
@@ -20,12 +20,12 @@ SIZE?= size
COPTFLAGS?= -O
.else
. if defined(DEBUG)
-_MINUS_O= -O
+_MINUS_O= -O -fno-optimize-sibling-calls
. else
_MINUS_O= -O2
. endif
. if ${MACHINE_ARCH} == "amd64"
-COPTFLAGS?=-O2 -frename-registers -pipe
+COPTFLAGS?=${_MINUS_O} -frename-registers -pipe
. else
COPTFLAGS?=${_MINUS_O} -pipe
. endif
@@ -70,7 +70,7 @@ INCLUDES+= -I$S/dev/twa
# .. and the same for em
INCLUDES+= -I$S/dev/em
-INCLUDES+= -I$S/xen/interface -I$S/xen/interface/io
+INCLUDES+= -I$S/xen/interface -I$S/xen/interface/io -I$S/xen/interface/hvm
CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG}
Modified: user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -41,9 +41,8 @@ __FBSDID("$FreeBSD$");
#include <machine/vmparam.h>
#include <machine/xen/xen-os.h>
-#include <xen/hypervisor.h>
#include <machine/xen/xenfunc.h>
-
+#include <xen/hypervisor.h>
#include <xen/xen_intr.h>
#include <xen/evtchn.h>
#include <xen/gnttab.h>
@@ -1010,7 +1009,7 @@ blkif_free(struct blkfront_info *info, i
info->ring.sring = NULL;
}
if (info->irq)
- unbind_from_irqhandler(info->irq);
+ unbind_from_irqhandler(info->irq);
info->irq = 0;
}
Modified: user/dfr/xenhvm/6/sys/dev/xen/console/console.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/console/console.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/dev/xen/console/console.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -77,17 +77,17 @@ static unsigned int wc, wp; /* write_con
#define XCUNIT(x) (minor(x))
#define ISTTYOPEN(tp) ((tp) && ((tp)->t_state & TS_ISOPEN))
#define CN_LOCK_INIT(x, _name) \
- mtx_init(&x, _name, NULL, MTX_SPIN|MTX_RECURSE)
+ mtx_init(&x, _name, NULL, MTX_DEF|MTX_RECURSE)
#define CN_LOCK(l) \
do { \
if (panicstr == NULL) \
- mtx_lock_spin(&(l)); \
+ mtx_lock(&(l)); \
} while (0)
#define CN_UNLOCK(l) \
do { \
if (panicstr == NULL) \
- mtx_unlock_spin(&(l)); \
+ mtx_unlock(&(l)); \
} while (0)
#define CN_LOCK_ASSERT(x) mtx_assert(&x, MA_OWNED)
#define CN_LOCK_DESTROY(x) mtx_destroy(&x)
@@ -241,6 +241,7 @@ xc_probe(device_t dev)
static int
xc_attach(device_t dev)
{
+ int error;
struct xc_softc *sc = (struct xc_softc *)device_get_softc(dev);
int error;
@@ -267,9 +268,14 @@ xc_attach(device_t dev)
callout_reset(&xc_callout, XC_POLLTIME, xc_timeout, xccons);
if (xen_start_info->flags & SIF_INITDOMAIN) {
- error = bind_virq_to_irqhandler(VIRQ_CONSOLE, 0, "console",
- xencons_priv_interrupt, INTR_TYPE_TTY, NULL);
- KASSERT(error >= 0, ("can't register console interrupt"));
+ 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 */
Modified: user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -18,17 +18,22 @@ __FBSDID("$FreeBSD$");
#include <machine/stdarg.h>
#include <machine/xen/xen-os.h>
#include <xen/hypervisor.h>
+#include <xen/xen_intr.h>
+#include <sys/cons.h>
#include <xen/xen_intr.h>
#include <xen/evtchn.h>
#include <xen/interface/io/console.h>
#include <dev/xen/console/xencons_ring.h>
+#include <xen/evtchn.h>
+#include <xen/interface/io/console.h>
#define console_evtchn console.domU.evtchn
static unsigned int console_irq;
extern char *console_page;
-
+extern struct mtx cn_mtx;
+
static inline struct xencons_interface *
xencons_interface(void)
{
@@ -84,6 +89,7 @@ xencons_handle_input(void *unused)
struct xencons_interface *intf;
XENCONS_RING_IDX cons, prod;
+ mtx_lock(&cn_mtx);
intf = xencons_interface();
cons = intf->in_cons;
@@ -101,6 +107,7 @@ xencons_handle_input(void *unused)
notify_remote_via_evtchn(xen_start_info->console_evtchn);
xencons_tx();
+ mtx_unlock(&cn_mtx);
}
void
Modified: user/dfr/xenhvm/6/sys/dev/xen/evtchn/evtchn_dev.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/evtchn/evtchn_dev.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/dev/xen/evtchn/evtchn_dev.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -26,13 +26,13 @@ __FBSDID("$FreeBSD$");
#include <machine/cpufunc.h>
#include <machine/intr_machdep.h>
#include <machine/xen-os.h>
-#include <machine/xen_intr.h>
+#include <xen/xen_intr.h>
#include <machine/bus.h>
#include <sys/rman.h>
#include <machine/resource.h>
#include <machine/synch_bitops.h>
-#include <machine/hypervisor.h>
+#include <xen/hypervisor.h>
typedef struct evtchn_sotfc {
Modified: user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c
==============================================================================
--- user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -63,10 +63,8 @@ __FBSDID("$FreeBSD$");
#include <machine/intr_machdep.h>
#include <machine/xen/xen-os.h>
+#include <machine/xen/xenfunc.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>
@@ -357,7 +355,7 @@ makembuf (struct mbuf *buf)
m_copydata(buf, 0, buf->m_pkthdr.len, mtod(m,caddr_t) );
m->m_ext.ext_args = (caddr_t *)(uintptr_t)(vtophys(mtod(m,caddr_t)) >> PAGE_SHIFT);
-
+
return m;
}
@@ -575,14 +573,14 @@ setup_device(device_t dev, struct netfro
goto fail;
error = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev),
- "xn", xn_intr, info, INTR_TYPE_NET | INTR_MPSAFE, &info->irq);
+ "xn", xn_intr, info, INTR_TYPE_NET | INTR_MPSAFE, &info->irq);
if (error) {
xenbus_dev_fatal(dev, error,
"bind_evtchn_to_irqhandler failed");
goto fail;
}
-
+
show_device(info);
return (0);
@@ -1450,9 +1448,9 @@ xn_ioctl(struct ifnet *ifp, u_long cmd,
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
xn_ifinit_locked(sc);
arp_ifinit(ifp, ifa);
- XN_UNLOCK(sc);
+ XN_UNLOCK(sc);
} else {
- XN_UNLOCK(sc);
+ XN_UNLOCK(sc);
error = ether_ioctl(ifp, cmd, data);
}
break;
@@ -1779,8 +1777,6 @@ static void netif_free(struct netfront_i
#endif
}
-
-
static void netif_disconnect_backend(struct netfront_info *info)
{
XN_RX_LOCK(info);
@@ -1798,6 +1794,7 @@ static void netif_disconnect_backend(str
if (info->irq)
unbind_from_irqhandler(info->irq);
+
info->irq = 0;
}
Modified: user/dfr/xenhvm/6/sys/i386/conf/XEN
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/conf/XEN Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/i386/conf/XEN Mon Jan 5 15:02:05 2009 (r186780)
@@ -67,8 +67,8 @@ options GDB # Support remote GDB.
#options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
# To make an SMP kernel, the next two lines are needed
-options SMP # Symmetric MultiProcessor Kernel
-device apic # I/O APIC
+#options SMP # Symmetric MultiProcessor Kernel
+#device apic # I/O APIC
options PAE
@@ -153,3 +153,4 @@ options KTR_COMPILE=(KTR_PMAP)
options KTR_CPUMASK=0xff
options KTR_ENTRIES=65536
options KTR_MASK=(KTR_PMAP)
+options KVA_PAGES=1600
Modified: user/dfr/xenhvm/6/sys/i386/include/xen/xenfunc.h
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/include/xen/xenfunc.h Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/i386/include/xen/xenfunc.h Mon Jan 5 15:02:05 2009 (r186780)
@@ -30,6 +30,11 @@
#ifndef _XEN_XENFUNC_H_
#define _XEN_XENFUNC_H_
+#include <machine/xen/xen-os.h>
+#include <xen/hypervisor.h>
+#include <machine/xen/xenpmap.h>
+#include <machine/segments.h>
+#include <sys/pcpu.h>
#define BKPT __asm__("int3");
#define XPQ_CALL_DEPTH 5
#define XPQ_CALL_COUNT 2
Modified: user/dfr/xenhvm/6/sys/i386/isa/npx.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/isa/npx.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/i386/isa/npx.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -69,8 +69,8 @@ __FBSDID("$FreeBSD$");
#include <machine/ucontext.h>
#include <machine/intr_machdep.h>
-#ifdef XEN
#include <machine/xen/xen-os.h>
+#ifdef XEN
#include <xen/hypervisor.h>
#endif
#ifdef DEV_ISA
Modified: user/dfr/xenhvm/6/sys/i386/xen/clock.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/xen/clock.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/i386/xen/clock.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -295,11 +295,12 @@ static struct timecounter xen_timecounte
};
static void
-clkintr(struct clockframe *frame)
+clkintr(void *arg)
{
int64_t delta_cpu, delta;
struct shadow_time_info *shadow = PCPU_PTR(shadow_time);
-
+ struct clockframe *frame = (struct clockframe *)arg;
+
do {
__get_time_values_from_xen();
@@ -839,7 +840,8 @@ static struct vcpu_set_periodic_timer xe
void
cpu_initclocks(void)
{
-
+ int error;
+
xen_set_periodic_tick.period_ns = NS_PER_TICK;
HYPERVISOR_vcpu_op(VCPUOP_set_periodic_timer, 0,
@@ -849,11 +851,11 @@ cpu_initclocks(void)
unbind_from_irqhandler(time_irq);
time_irq = 0;
- if (bind_virq_to_irqhandler(VIRQ_TIMER, 0, "clk",
- (driver_intr_t *)clkintr, INTR_TYPE_CLK | INTR_FAST,
- &time_irq)) {
+ error = bind_virq_to_irqhandler(VIRQ_TIMER, 0, "clk",
+ clkintr,
+ INTR_TYPE_CLK | INTR_FAST, &time_irq);
+ if (error)
panic("failed to register clock interrupt\n");
- }
/* should fast clock be enabled ? */
}
@@ -861,23 +863,23 @@ cpu_initclocks(void)
int
ap_cpu_initclocks(int cpu)
{
- int time_irq;
+ unsigned int time_irq;
+ int error;
xen_set_periodic_tick.period_ns = NS_PER_TICK;
HYPERVISOR_vcpu_op(VCPUOP_set_periodic_timer, cpu,
&xen_set_periodic_tick);
-
- if ((time_irq = bind_virq_to_irqhandler(VIRQ_TIMER, cpu, "clk",
- (driver_intr_t *)clkintr,
- INTR_TYPE_CLK | INTR_FAST, NULL)) < 0) {
+ error = bind_virq_to_irqhandler(VIRQ_TIMER, 0, "clk",
+ clkintr,
+ INTR_TYPE_CLK | INTR_FAST, &time_irq);
+ if (error)
panic("failed to register clock interrupt\n");
- }
+
return (0);
}
-
void
cpu_startprofclock(void)
{
Modified: user/dfr/xenhvm/6/sys/i386/xen/mp_machdep.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/xen/mp_machdep.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/i386/xen/mp_machdep.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -83,9 +83,10 @@ __FBSDID("$FreeBSD$");
#include <machine/specialreg.h>
#include <xen/hypervisor.h>
-
#include <xen/xen_intr.h>
#include <xen/evtchn.h>
+#include <xen/xen_intr.h>
+#include <xen/hypervisor.h>
#include <xen/interface/vcpu.h>
#define WARMBOOT_TARGET 0
@@ -557,25 +558,31 @@ static int
xen_smp_intr_init(unsigned int cpu)
{
int rc;
- struct pcpu *pc = pcpu_find(cpu);
-
+ unsigned int irq;
+
pc->pc_resched_irq = pc->pc_callfunc_irq = ~0;
sprintf(resched_name[cpu], "resched%u", cpu);
- rc = bind_ipi_to_irqhandler(RESCHEDULE_VECTOR, cpu,
- resched_name[cpu], smp_reschedule_interrupt,
- INTR_FAST|INTR_TYPE_TTY|INTR_MPSAFE, &pc->pc_resched_irq);
+ rc = bind_ipi_to_irqhandler(RESCHEDULE_VECTOR,
+ cpu,
+ resched_name[cpu],
+ smp_reschedule_interrupt,
+ INTR_FAST|INTR_TYPE_TTY|INTR_MPSAFE, &irq);
printf("cpu=%d irq=%d vector=%d\n",
cpu, pc->pc_resched_irq, RESCHEDULE_VECTOR);
+ per_cpu(resched_irq, cpu) = irq;
+
sprintf(callfunc_name[cpu], "callfunc%u", cpu);
- rc = bind_ipi_to_irqhandler(CALL_FUNCTION_VECTOR, cpu,
- callfunc_name[cpu],
- smp_call_function_interrupt,
- INTR_FAST|INTR_TYPE_TTY|INTR_MPSAFE, &pc->pc_callfunc_irq);
+ rc = bind_ipi_to_irqhandler(CALL_FUNCTION_VECTOR,
+ cpu,
+ callfunc_name[cpu],
+ smp_call_function_interrupt,
+ INTR_FAST|INTR_TYPE_TTY|INTR_MPSAFE, &irq);
if (rc < 0)
goto fail;
+ per_cpu(callfunc_irq, cpu) = irq;
printf("cpu=%d irq=%d vector=%d\n",
cpu, pc->pc_callfunc_irq, CALL_FUNCTION_VECTOR);
@@ -586,10 +593,10 @@ xen_smp_intr_init(unsigned int cpu)
return 0;
fail:
- if (pc->pc_resched_irq != ~0)
- unbind_from_irqhandler(pc->pc_resched_irq);
- if (pc->pc_callfunc_irq != ~0)
- unbind_from_irqhandler(pc->pc_callfunc_irq);
+ if (per_cpu(resched_irq, cpu) >= 0)
+ unbind_from_irqhandler(per_cpu(resched_irq, cpu));
+ if (per_cpu(callfunc_irq, cpu) >= 0)
+ unbind_from_irqhandler(per_cpu(callfunc_irq, cpu));
return rc;
}
Modified: user/dfr/xenhvm/6/sys/i386/xen/pmap.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/xen/pmap.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/i386/xen/pmap.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -159,6 +159,16 @@ __FBSDID("$FreeBSD$");
#include <machine/smp.h>
#endif
+#ifdef XBOX
+#include <machine/xbox.h>
+#endif
+
+#include <xen/interface/xen.h>
+#include <xen/hypervisor.h>
+#include <machine/xen/hypercall.h>
+#include <machine/xen/xenvar.h>
+#include <machine/xen/xenfunc.h>
+
#if !defined(CPU_DISABLE_SSE) && defined(I686_CPU)
#define CPU_ENABLE_SSE
#endif
Modified: user/dfr/xenhvm/6/sys/i386/xen/xen_machdep.c
==============================================================================
--- user/dfr/xenhvm/6/sys/i386/xen/xen_machdep.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/i386/xen/xen_machdep.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -413,10 +413,11 @@ void
_xen_queue_pt_update(vm_paddr_t ptr, vm_paddr_t val, char *file, int line)
{
SET_VCPU();
-
+#if 0
if (__predict_true(gdtset))
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
-
+#endif
+
KASSERT((ptr & 7) == 0, ("misaligned update"));
if (__predict_true(gdtset))
@@ -925,6 +926,39 @@ initvalues(start_info_t *startinfo)
xen_start_info = startinfo;
xen_phys_machine = (xen_pfn_t *)startinfo->mfn_list;
+ IdlePTD = (pd_entry_t *)((uint8_t *)startinfo->pt_base + PAGE_SIZE);
+ l1_pages = 0;
+
+#ifdef PAE
+ l3_pages = 1;
+ l2_pages = 0;
+ IdlePDPT = (pd_entry_t *)startinfo->pt_base;
+ IdlePDPTma = xpmap_ptom(VTOP(startinfo->pt_base));
+ for (i = (KERNBASE >> 30);
+ (i < 4) && (IdlePDPT[i] != 0); i++)
+ l2_pages++;
+ /*
+ * Note that only one page directory has been allocated at this point.
+ * Thus, if KERNBASE
+ */
+#if 0
+ for (i = 0; i < l2_pages; i++)
+ IdlePTDma[i] = xpmap_ptom(VTOP(IdlePTD + i*PAGE_SIZE));
+#endif
+
+ l2_pages = (l2_pages == 0) ? 1 : l2_pages;
+#else
+ l3_pages = 0;
+ l2_pages = 1;
+#endif
+ for (i = (((KERNBASE>>18) & PAGE_MASK)>>PAGE_SHIFT);
+ (i<l2_pages*NPDEPG) && (i<(VM_MAX_KERNEL_ADDRESS>>PDRSHIFT)); i++) {
+
+ if (IdlePTD[i] == 0)
+ break;
+ l1_pages++;
+ }
+
/* number of pages allocated after the pts + 1*/;
cur_space = xen_start_info->pt_base +
((xen_start_info->nr_pt_frames) + 3 )*PAGE_SIZE;
Modified: user/dfr/xenhvm/6/sys/kern/kern_condvar.c
==============================================================================
--- user/dfr/xenhvm/6/sys/kern/kern_condvar.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/kern/kern_condvar.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -124,8 +124,7 @@ cv_wait(struct cv *cvp, struct mtx *mp)
DROP_GIANT();
mtx_unlock(mp);
- sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR,
- 0);
+ sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR, 0);
sleepq_wait(cvp);
#ifdef KTRACE
@@ -232,8 +231,7 @@ cv_timedwait(struct cv *cvp, struct mtx
DROP_GIANT();
mtx_unlock(mp);
- sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR,
- 0);
+ sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR, 0);
sleepq_set_timeout(cvp, timo);
rval = sleepq_timedwait(cvp);
Modified: user/dfr/xenhvm/6/sys/kern/kern_lock.c
==============================================================================
--- user/dfr/xenhvm/6/sys/kern/kern_lock.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/kern/kern_lock.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -62,6 +62,43 @@ __FBSDID("$FreeBSD$");
#include <ddb/ddb.h>
#endif
+
+#ifdef DDB
+#include <ddb/ddb.h>
+static void db_show_lockmgr(struct lock_object *lock);
+#endif
+static void lock_lockmgr(struct lock_object *lock, int how);
+static int unlock_lockmgr(struct lock_object *lock);
+
+struct lock_class lock_class_lockmgr = {
+ .lc_name = "lockmgr",
+ .lc_flags = LC_SLEEPLOCK | LC_SLEEPABLE | LC_RECURSABLE | LC_UPGRADABLE,
+#ifdef DDB
+ .lc_ddb_show = db_show_lockmgr,
+#endif
+ .lc_lock = lock_lockmgr,
+ .lc_unlock = unlock_lockmgr,
+};
+
+/*
+ * Locking primitives implementation.
+ * Locks provide shared/exclusive sychronization.
+ */
+
+void
+lock_lockmgr(struct lock_object *lock, int how)
+{
+
+ panic("lockmgr locks do not support sleep interlocking");
+}
+
+int
+unlock_lockmgr(struct lock_object *lock)
+{
+
+ panic("lockmgr locks do not support sleep interlocking");
+}
+
/*
* Locking primitives implementation.
* Locks provide shared/exclusive sychronization.
@@ -639,14 +676,13 @@ ok:
return (1);
}
-DB_SHOW_COMMAND(lockmgr, db_show_lockmgr)
+void
+db_show_lockmgr(struct lock_object *lock)
{
struct thread *td;
struct lock *lkp;
- if (!have_addr)
- return;
- lkp = (struct lock *)addr;
+ lkp = (struct lock *)lock;
db_printf("lock type: %s\n", lkp->lk_wmesg);
db_printf("state: ");
Modified: user/dfr/xenhvm/6/sys/kern/kern_mutex.c
==============================================================================
--- user/dfr/xenhvm/6/sys/kern/kern_mutex.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/kern/kern_mutex.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -92,25 +92,66 @@ __FBSDID("$FreeBSD$");
#ifdef DDB
static void db_show_mtx(struct lock_object *lock);
#endif
+static void lock_mtx(struct lock_object *lock, int how);
+static void lock_spin(struct lock_object *lock, int how);
+static int unlock_mtx(struct lock_object *lock);
+static int unlock_spin(struct lock_object *lock);
+
/*
* Lock classes for sleep and spin mutexes.
*/
struct lock_class lock_class_mtx_sleep = {
- "sleep mutex",
- LC_SLEEPLOCK | LC_RECURSABLE,
+ .lc_name = "sleep mutex",
+ .lc_flags = LC_SLEEPLOCK | LC_RECURSABLE,
#ifdef DDB
- db_show_mtx
+ .lc_ddb_show = db_show_mtx,
#endif
+ .lc_lock = lock_mtx,
+ .lc_unlock = unlock_mtx,
};
struct lock_class lock_class_mtx_spin = {
- "spin mutex",
- LC_SPINLOCK | LC_RECURSABLE,
+ .lc_name = "spin mutex",
+ .lc_flags = LC_SPINLOCK | LC_RECURSABLE,
#ifdef DDB
- db_show_mtx
+ .lc_ddb_show = db_show_mtx,
#endif
+ .lc_lock = lock_spin,
+ .lc_unlock = unlock_spin,
};
+void
+lock_mtx(struct lock_object *lock, int how)
+{
+
+ mtx_lock((struct mtx *)lock);
+}
+
+void
+lock_spin(struct lock_object *lock, int how)
+{
+
+ panic("spin locks can only use msleep_spin");
+}
+
+int
+unlock_mtx(struct lock_object *lock)
+{
+ struct mtx *m;
+
+ m = (struct mtx *)lock;
+ mtx_assert(m, MA_OWNED | MA_NOTRECURSED);
+ mtx_unlock(m);
+ return (0);
+}
+
+int
+unlock_spin(struct lock_object *lock)
+{
+
+ panic("spin locks can only use msleep_spin");
+}
+
/*
* System-wide mutexes
*/
Modified: user/dfr/xenhvm/6/sys/kern/kern_rwlock.c
==============================================================================
--- user/dfr/xenhvm/6/sys/kern/kern_rwlock.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/kern/kern_rwlock.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -60,13 +60,19 @@ CTASSERT((RW_RECURSE & LO_CLASSFLAGS) ==
static void db_show_rwlock(struct lock_object *lock);
#endif
+static void lock_rw(struct lock_object *lock, int how);
+static int unlock_rw(struct lock_object *lock);
+
struct lock_class lock_class_rw = {
.lc_name = "rw",
.lc_flags = LC_SLEEPLOCK | LC_RECURSABLE | LC_UPGRADABLE,
#ifdef DDB
.lc_ddb_show = db_show_rwlock,
#endif
+ .lc_lock = lock_rw,
+ .lc_unlock = unlock_rw
};
+
/*
* Return a pointer to the owning thread if the lock is write-locked or
@@ -99,6 +105,34 @@ struct lock_class lock_class_rw = {
#endif
void
+lock_rw(struct lock_object *lock, int how)
+{
+ struct rwlock *rw;
+
+ rw = (struct rwlock *)lock;
+ if (how)
+ rw_wlock(rw);
+ else
+ rw_rlock(rw);
+}
+
+int
+unlock_rw(struct lock_object *lock)
+{
+ struct rwlock *rw;
+
+ rw = (struct rwlock *)lock;
+ rw_assert(rw, RA_LOCKED | LA_NOTRECURSED);
+ if (rw->rw_lock & RW_LOCK_READ) {
+ rw_runlock(rw);
+ return (0);
+ } else {
+ rw_wunlock(rw);
+ return (1);
+ }
+}
+
+void
rw_init_flags(struct rwlock *rw, const char *name, int opts)
{
int flags;
Modified: user/dfr/xenhvm/6/sys/kern/kern_sx.c
==============================================================================
--- user/dfr/xenhvm/6/sys/kern/kern_sx.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/kern/kern_sx.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -108,12 +108,17 @@ CTASSERT(((SX_ADAPTIVESPIN | SX_RECURSE)
static void db_show_sx(struct lock_object *lock);
#endif
+static void lock_sx(struct lock_object *lock, int how);
+static int unlock_sx(struct lock_object *lock);
+
struct lock_class lock_class_sx = {
.lc_name = "sx",
.lc_flags = LC_SLEEPLOCK | LC_SLEEPABLE | LC_RECURSABLE | LC_UPGRADABLE,
#ifdef DDB
.lc_ddb_show = db_show_sx,
#endif
+ .lc_lock = lock_sx,
+ .lc_unlock = unlock_sx,
};
#ifndef INVARIANTS
@@ -121,6 +126,34 @@ struct lock_class lock_class_sx = {
#endif
void
+lock_sx(struct lock_object *lock, int how)
+{
+ struct sx *sx;
+
+ sx = (struct sx *)lock;
+ if (how)
+ sx_xlock(sx);
+ else
+ sx_slock(sx);
+}
+
+int
+unlock_sx(struct lock_object *lock)
+{
+ struct sx *sx;
+
+ sx = (struct sx *)lock;
+ sx_assert(sx, SA_LOCKED | SA_NOTRECURSED);
+ if (sx_xlocked(sx)) {
+ sx_xunlock(sx);
+ return (1);
+ } else {
+ sx_sunlock(sx);
+ return (0);
+ }
+}
+
+void
sx_sysinit(void *arg)
{
struct sx_args *sargs = arg;
@@ -845,6 +878,7 @@ _sx_sunlock_hard(struct sx *sx, const ch
}
}
+#if 0
/*
* Atomically drop an sx lock while going to sleep. This is just a hack
* for 6.x. In 7.0 and later this is done more cleanly.
@@ -961,6 +995,7 @@ sx_sleep(void *ident, struct sx *sx, int
}
return (rval);
}
+#endif
#ifdef INVARIANT_SUPPORT
#ifndef INVARIANTS
Modified: user/dfr/xenhvm/6/sys/kern/kern_synch.c
==============================================================================
--- user/dfr/xenhvm/6/sys/kern/kern_synch.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/kern/kern_synch.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -75,6 +75,7 @@ SYSINIT(synch_setup, SI_SUB_KICK_SCHEDUL
int hogticks;
int lbolt;
+static int pause_wchan;
static struct callout loadav_callout;
static struct callout lbolt_callout;
@@ -106,6 +107,143 @@ sleepinit(void)
init_sleepqueues();
}
+
+/*
+ * General sleep call. Suspends the current thread until a wakeup is
+ * performed on the specified identifier. The thread will then be made
+ * runnable with the specified priority. Sleeps at most timo/hz seconds
+ * (0 means no timeout). If pri includes PCATCH flag, signals are checked
+ * before and after sleeping, else signals are not checked. Returns 0 if
+ * awakened, EWOULDBLOCK if the timeout expires. If PCATCH is set and a
+ * signal needs to be delivered, ERESTART is returned if the current system
+ * call should be restarted if possible, and EINTR is returned if the system
+ * call should be interrupted by the signal (return EINTR).
+ *
+ * The lock argument is unlocked before the caller is suspended, and
+ * re-locked before _sleep() returns. If priority includes the PDROP
+ * flag the lock is not re-locked before returning.
+ */
+int
+_sleep(void *ident, struct lock_object *lock, int priority,
+ const char *wmesg, int timo)
+{
+ struct thread *td;
+ struct proc *p;
+ struct lock_class *class;
+ int catch, flags, lock_state, pri, rval;
+ WITNESS_SAVE_DECL(lock_witness);
+
+ td = curthread;
+ p = td->td_proc;
+#ifdef KTRACE
+ if (KTRPOINT(td, KTR_CSW))
+ ktrcsw(1, 0);
+#endif
+ WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock,
+ "Sleeping on \"%s\"", wmesg);
+ KASSERT(timo != 0 || mtx_owned(&Giant) || lock != NULL ||
+ ident == &lbolt, ("sleeping without a lock"));
+ KASSERT(p != NULL, ("msleep1"));
+ KASSERT(ident != NULL && TD_IS_RUNNING(td), ("msleep"));
+ if (lock != NULL)
+ class = LOCK_CLASS(lock);
+ else
+ class = NULL;
+
+ if (cold) {
+ /*
+ * During autoconfiguration, just return;
+ * don't run any other threads or panic below,
+ * in case this is the idle thread and already asleep.
+ * XXX: this used to do "s = splhigh(); splx(safepri);
+ * splx(s);" to give interrupts a chance, but there is
+ * no way to give interrupts a chance now.
+ */
+ if (lock != NULL && priority & PDROP)
+ class->lc_unlock(lock);
+ return (0);
+ }
+ catch = priority & PCATCH;
+ rval = 0;
+
+ /*
+ * If we are already on a sleep queue, then remove us from that
+ * sleep queue first. We have to do this to handle recursive
+ * sleeps.
+ */
+ if (TD_ON_SLEEPQ(td))
+ sleepq_remove(td, td->td_wchan);
+
+ if (ident == &pause_wchan)
+ flags = SLEEPQ_PAUSE;
+ else
+ flags = SLEEPQ_SLEEP;
+ if (catch)
+ flags |= SLEEPQ_INTERRUPTIBLE;
+
+ sleepq_lock(ident);
+ CTR5(KTR_PROC, "sleep: thread %ld (pid %ld, %s) on %s (%p)",
+ td->td_tid, p->p_pid, p->p_comm, wmesg, ident);
+
+ DROP_GIANT();
+ if (lock != NULL && !(class->lc_flags & LC_SLEEPABLE)) {
+ WITNESS_SAVE(lock, lock_witness);
+ lock_state = class->lc_unlock(lock);
+ } else
+ /* GCC needs to follow the Yellow Brick Road */
+ lock_state = -1;
+
+ /*
+ * We put ourselves on the sleep queue and start our timeout
+ * before calling thread_suspend_check, as we could stop there,
+ * and a wakeup or a SIGCONT (or both) could occur while we were
+ * stopped without resuming us. Thus, we must be ready for sleep
+ * when cursig() is called. If the wakeup happens while we're
+ * stopped, then td will no longer be on a sleep queue upon
+ * return from cursig().
+ */
+ sleepq_add(ident, ident == &lbolt ? NULL : lock, wmesg, flags, 0);
+ if (timo)
+ sleepq_set_timeout(ident, timo);
+ if (lock != NULL && class->lc_flags & LC_SLEEPABLE) {
+ sleepq_release(ident);
+ WITNESS_SAVE(lock, lock_witness);
+ lock_state = class->lc_unlock(lock);
+ sleepq_lock(ident);
+ }
+
+ /*
+ * Adjust this thread's priority, if necessary.
+ */
+ pri = priority & PRIMASK;
+ if (pri != 0 && pri != td->td_priority) {
+ mtx_lock_spin(&sched_lock);
+ sched_prio(td, pri);
+ mtx_unlock_spin(&sched_lock);
+ }
+
+ if (timo && catch)
+ rval = sleepq_timedwait_sig(ident);
+ else if (timo)
+ rval = sleepq_timedwait(ident);
+ else if (catch)
+ rval = sleepq_wait_sig(ident);
+ else {
+ sleepq_wait(ident);
+ rval = 0;
+ }
+#ifdef KTRACE
+ if (KTRPOINT(td, KTR_CSW))
+ ktrcsw(0, 0);
+#endif
+ PICKUP_GIANT();
+ if (lock != NULL && !(priority & PDROP)) {
+ class->lc_lock(lock, lock_state);
+ WITNESS_RESTORE(lock, lock_witness);
+ }
+ return (rval);
+}
+
/*
* General sleep call. Suspends the current process until a wakeup is
* performed on the specified identifier. The process will then be made
@@ -170,7 +308,7 @@ msleep(ident, mtx, priority, wmesg, timo
if (TD_ON_SLEEPQ(td))
sleepq_remove(td, td->td_wchan);
- flags = SLEEPQ_MSLEEP;
+ flags = SLEEPQ_SLEEP;
if (catch)
flags |= SLEEPQ_INTERRUPTIBLE;
@@ -271,7 +409,7 @@ msleep_spin(ident, mtx, wmesg, timo)
/*
* We put ourselves on the sleep queue and start our timeout.
*/
- sleepq_add(ident, &mtx->mtx_object, wmesg, SLEEPQ_MSLEEP, 0);
+ sleepq_add(ident, &mtx->mtx_object, wmesg, SLEEPQ_SLEEP, 0);
if (timo)
sleepq_set_timeout(ident, timo);
@@ -320,7 +458,7 @@ wakeup(ident)
{
sleepq_lock(ident);
- sleepq_broadcast(ident, SLEEPQ_MSLEEP, -1, 0);
+ sleepq_broadcast(ident, SLEEPQ_SLEEP, -1, 0);
}
/*
@@ -334,7 +472,7 @@ wakeup_one(ident)
{
sleepq_lock(ident);
- sleepq_signal(ident, SLEEPQ_MSLEEP, -1, 0);
+ sleepq_signal(ident, SLEEPQ_SLEEP, -1, 0);
}
/*
Modified: user/dfr/xenhvm/6/sys/kern/kern_timeout.c
==============================================================================
--- user/dfr/xenhvm/6/sys/kern/kern_timeout.c Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/kern/kern_timeout.c Mon Jan 5 15:02:05 2009 (r186780)
@@ -557,7 +557,7 @@ again:
mtx_unlock_spin(&callout_lock);
sleepq_add(&callout_wait,
&callout_lock.mtx_object, "codrain",
- SLEEPQ_MSLEEP, 0);
+ SLEEPQ_SLEEP, 0);
sleepq_wait(&callout_wait);
sq_locked = 0;
Modified: user/dfr/xenhvm/6/sys/sys/lock.h
==============================================================================
--- user/dfr/xenhvm/6/sys/sys/lock.h Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/sys/lock.h Mon Jan 5 15:02:05 2009 (r186780)
@@ -51,6 +51,8 @@ struct lock_class {
const char *lc_name;
u_int lc_flags;
void (*lc_ddb_show)(struct lock_object *lock);
+ void (*lc_lock)(struct lock_object *lock, int how);
+ int (*lc_unlock)(struct lock_object *lock);
};
#define LC_SLEEPLOCK 0x00000001 /* Sleep lock. */
Modified: user/dfr/xenhvm/6/sys/sys/mutex.h
==============================================================================
--- user/dfr/xenhvm/6/sys/sys/mutex.h Mon Jan 5 14:48:43 2009 (r186779)
+++ user/dfr/xenhvm/6/sys/sys/mutex.h Mon Jan 5 15:02:05 2009 (r186780)
@@ -325,6 +325,9 @@ extern struct mtx_pool *mtxpool_sleep;
#define mtx_trylock_flags(m, opts) \
_mtx_trylock((m), (opts), LOCK_FILE, LOCK_LINE)
+#define mtx_sleep(chan, mtx, pri, wmesg, timo) \
+ _sleep((chan), &(mtx)->mtx_object, (pri), (wmesg), (timo))
+
#define mtx_initialized(m) lock_initalized(&(m)->mtx_object)
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list