Module Name: src Committed By: jmcneill Date: Sat Aug 13 10:31:24 UTC 2011
Modified Files: src/sys/arch/usermode/dev: clock.c cpu.c src/sys/arch/usermode/include: cpu.h lock.h src/sys/arch/usermode/usermode: machdep.c pmap.c Log Message: - initialize cpu_info_primary early, before cpu0 attaches - track idepth in cpu_info struct and use it in cpu_intr_p - for debug and diagnostic kernels, abort when rebooting - fill in __cpu_simple_lock_* stubs - splraise(IPL_HIGH) before calling kernmain - pmap_extract: only return phys addr if pap is not NULL To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/usermode/dev/clock.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/usermode/dev/cpu.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/usermode/include/cpu.h cvs rdiff -u -r1.2 -r1.3 src/sys/arch/usermode/include/lock.h cvs rdiff -u -r1.12 -r1.13 src/sys/arch/usermode/usermode/machdep.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/usermode/usermode/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/usermode/dev/clock.c diff -u src/sys/arch/usermode/dev/clock.c:1.6 src/sys/arch/usermode/dev/clock.c:1.7 --- src/sys/arch/usermode/dev/clock.c:1.6 Fri Aug 12 00:57:24 2011 +++ src/sys/arch/usermode/dev/clock.c Sat Aug 13 10:31:24 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: clock.c,v 1.6 2011/08/12 00:57:24 jmcneill Exp $ */ +/* $NetBSD: clock.c,v 1.7 2011/08/13 10:31:24 jmcneill Exp $ */ /*- * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.6 2011/08/12 00:57:24 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.7 2011/08/13 10:31:24 jmcneill Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -101,13 +101,11 @@ extern int usermode_x; struct clockframe cf; -#if notyet - /* XXXJDM */ - if (usermode_x > IPL_SOFTCLOCK) - return; -#endif + curcpu()->ci_idepth++; hardclock(&cf); + + curcpu()->ci_idepth--; } static u_int Index: src/sys/arch/usermode/dev/cpu.c diff -u src/sys/arch/usermode/dev/cpu.c:1.12 src/sys/arch/usermode/dev/cpu.c:1.13 --- src/sys/arch/usermode/dev/cpu.c:1.12 Fri Aug 12 12:59:13 2011 +++ src/sys/arch/usermode/dev/cpu.c Sat Aug 13 10:31:24 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.c,v 1.12 2011/08/12 12:59:13 jmcneill Exp $ */ +/* $NetBSD: cpu.c,v 1.13 2011/08/13 10:31:24 jmcneill Exp $ */ /*- * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.12 2011/08/12 12:59:13 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.13 2011/08/13 10:31:24 jmcneill Exp $"); #include <sys/param.h> #include <sys/conf.h> @@ -54,7 +54,13 @@ static int cpu_match(device_t, cfdata_t, void *); static void cpu_attach(device_t, device_t, void *); -struct cpu_info cpu_info_primary; +struct cpu_info cpu_info_primary = { + .ci_dev = 0, + .ci_self = &cpu_info_primary, + .ci_idepth = -1, + .ci_curlwp = &lwp0, +}; + char cpu_model[48] = "virtual processor"; typedef struct cpu_softc { @@ -87,9 +93,6 @@ sc->sc_dev = self; sc->sc_ci = &cpu_info_primary; - sc->sc_ci->ci_dev = 0; - sc->sc_ci->ci_self = &cpu_info_primary; - sc->sc_ci->ci_curlwp = &lwp0; if (thunk_getcontext(&lwp0pcb)) panic("getcontext failed"); @@ -126,6 +129,10 @@ printf("rebooting...\n"); +#if defined(DIAGNOSTIC) || defined(DEBUG) + thunk_abort(); +#endif + usermode_reboot(); /* NOTREACHED */ @@ -310,6 +317,8 @@ { char pbuf[9]; + banner(); + printf("%s%s", copyright, version); format_bytes(pbuf, sizeof(pbuf), ptoa(physmem)); printf("total memory = %s\n", pbuf); @@ -335,6 +344,11 @@ bool cpu_intr_p(void) { - printf("cpu_intr_p\n"); - return false; + int idepth; + + kpreempt_disable(); + idepth = curcpu()->ci_idepth; + kpreempt_enable(); + + return (idepth >= 0); } Index: src/sys/arch/usermode/include/cpu.h diff -u src/sys/arch/usermode/include/cpu.h:1.5 src/sys/arch/usermode/include/cpu.h:1.6 --- src/sys/arch/usermode/include/cpu.h:1.5 Fri Aug 12 00:57:24 2011 +++ src/sys/arch/usermode/include/cpu.h Sat Aug 13 10:31:24 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.5 2011/08/12 00:57:24 jmcneill Exp $ */ +/* $NetBSD: cpu.h,v 1.6 2011/08/13 10:31:24 jmcneill Exp $ */ /*- * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca> @@ -33,7 +33,6 @@ #include <sys/cpu_data.h> #include <machine/intrdefs.h> -#include <machine/thunk.h> extern void cpu_signotify(struct lwp *); extern void cpu_need_proftick(struct lwp *); @@ -45,6 +44,7 @@ struct cpu_data ci_data; u_int ci_cpuid; int ci_want_resched; + int ci_idepth; volatile int ci_mtx_count; volatile int ci_mtx_oldspl; lwp_t *ci_curlwp; @@ -62,6 +62,7 @@ __inline static void usermode_delay(unsigned int ms) { + extern int thunk_usleep(unsigned int); thunk_usleep(ms); } Index: src/sys/arch/usermode/include/lock.h diff -u src/sys/arch/usermode/include/lock.h:1.2 src/sys/arch/usermode/include/lock.h:1.3 --- src/sys/arch/usermode/include/lock.h:1.2 Wed Oct 21 16:06:59 2009 +++ src/sys/arch/usermode/include/lock.h Sat Aug 13 10:31:24 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: lock.h,v 1.2 2009/10/21 16:06:59 snj Exp $ */ +/* $NetBSD: lock.h,v 1.3 2011/08/13 10:31:24 jmcneill Exp $ */ /*- * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca> @@ -32,16 +32,29 @@ __inline static void __cpu_simple_lock_init(__cpu_simple_lock_t *lockp) { + *lockp = __SIMPLELOCK_UNLOCKED; +} + +__inline static int +__cpu_simple_lock_try(__cpu_simple_lock_t *lockp) +{ + if (*lockp == __SIMPLELOCK_LOCKED) + return 0; + *lockp = __SIMPLELOCK_LOCKED; + return 1; } __inline static void __cpu_simple_lock(__cpu_simple_lock_t *lockp) { + while (!__cpu_simple_lock_try(lockp)) + ; } __inline static void __cpu_simple_unlock(__cpu_simple_lock_t *lockp) { + *lockp = __SIMPLELOCK_UNLOCKED; } __inline static int @@ -56,10 +69,4 @@ return *lockp == __SIMPLELOCK_UNLOCKED; } -__inline static int -__cpu_simple_lock_try(__cpu_simple_lock_t *lockp) -{ - return __SIMPLELOCK_UNLOCKED; -} - #endif /* !_ARCH_USERMODE_INCLUDE_LOCK_H */ Index: src/sys/arch/usermode/usermode/machdep.c diff -u src/sys/arch/usermode/usermode/machdep.c:1.12 src/sys/arch/usermode/usermode/machdep.c:1.13 --- src/sys/arch/usermode/usermode/machdep.c:1.12 Fri Aug 12 12:59:13 2011 +++ src/sys/arch/usermode/usermode/machdep.c Sat Aug 13 10:31:24 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.12 2011/08/12 12:59:13 jmcneill Exp $ */ +/* $NetBSD: machdep.c,v 1.13 2011/08/13 10:31:24 jmcneill Exp $ */ /*- * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.12 2011/08/12 12:59:13 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.13 2011/08/13 10:31:24 jmcneill Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -94,6 +94,8 @@ pmap_bootstrap(); + splraise(IPL_HIGH); + kernmain(); } Index: src/sys/arch/usermode/usermode/pmap.c diff -u src/sys/arch/usermode/usermode/pmap.c:1.7 src/sys/arch/usermode/usermode/pmap.c:1.8 --- src/sys/arch/usermode/usermode/pmap.c:1.7 Thu Aug 11 22:26:18 2011 +++ src/sys/arch/usermode/usermode/pmap.c Sat Aug 13 10:31:24 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.7 2011/08/11 22:26:18 jmcneill Exp $ */ +/* $NetBSD: pmap.c,v 1.8 2011/08/13 10:31:24 jmcneill Exp $ */ /*- * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.7 2011/08/11 22:26:18 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.8 2011/08/13 10:31:24 jmcneill Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -70,12 +70,6 @@ virtual_avail += PAGE_SIZE; pmap_maxkvaddr = VM_MIN_KERNEL_ADDRESS; -#if 0 - kmeminit_nkmempages(); - bufsz = buf_memcalc(); - if (buf_setvalimit(bufsz)) - panic("pmap_bootstrap: buf_setvalimit failed\n"); -#endif } void @@ -172,7 +166,8 @@ pmap_extract(pmap_t pmap, vaddr_t va, paddr_t *pap) { /* XXXJDM */ - *pap = va; + if (pap) + *pap = va; return true; }