Repository: /svn/ppc-dev/ppc-dev Latest revision: 107 Total changesets: 1 Log message: HAT code changes ================ 1. Collect hat code that is strictly for debugging into hat_debug.h and hat_debug.c
2. Move some declarations into hat_ppcmmu.h, where they belong, rather than manually pasting in a declaration where I need it. 3. Keep track of share counts separately for kernel mappings and non-kernel mappings. This means that we can report on any mappings with mixed kernel and non-kernel virtual addresses. chrp changes ============ 1. Makefile.chrp: add CFLAGS rule for debug32/hat_debug.o, same as for debug32/hat_ppcmmu.o 2. Makefile.files: remove unit_test.o and unit_test_vm.o. Now, there are many unit test files, all under uts/ppc/test. None seem to be CHRP-specific. unit_test_vm is obsolete. 3. memlist.c: Show total number of ranges and total bytes for the given memlist, as well as printing out the elements. 4. startup.c: protect boot pages by walking the hardware pagetable, not by walking the PROM translations. *** IMPORTANT CHANGE *** This seems to have cured a number of Heisenbugs that were due to a few pages having been claimed by inetboot and the kernel. The discrepency was a half-dozen pages, or so, but all it takes is one. 5. machparam.h: reform the method for defining PAGESIZE and friends, so that the expressions for deriving them are still intact and used by C files, but simple constants are supplied for use by the assembler, and those constants are verified as being equal to the defining expressions. usr/src/uts/ppc changes ======================= 1. Makefile.files: Add hat_debug.o Add object files for unit_test drivers and individual tests. 2. Makefile.rules: Add rules for pmdb/ Add rules for test/ 3. ml/lock_prim.s: Add more calls to check_mutex() 4. ml/modstubs.s: Change comments to reflect how arguments are passed on PowerPC, in contrast with the way it is done on x86. 5. os/bootops.c: Make bop_alloc() a wrapper around other underlying functions, which can be switched. Switchable bop_alloc() has been used for experimental versions. But now, there are just two underlying functions: one to call PROM services, and one to complain and die, which is used after bop_alloc() is disabled. 6. os/ppc_subr.c: Adjust the tests so that check_mutex() will work for mutex_exit() as well as mutex_enter(). Take a flag: 1=enter 0=exit. The vast majority of tests apply to both enter and exit. Remove ppc_mutex_vector_enter() and ppc_mutex_vector_tryenter(). Assembly language code now calls check_mutex() directly, and more often. 7. pmdb/pmdb_shell.c: Add code to show t0 stack. This does not work correctly, but it does no harm, so I will commit this change along with all the others for usr/src/uts/ppc. 8. pmdb/pmdb_subr.c: Move several generally handy decode and print functions from the HAT layer code, where they were first created and used. Add print_bootops(). 9. sys/mutex_impl.h: Add non-zero filler pattern to be used in check_mutex(). 10. sys/pmdb.h: Move several function declarations to pmdb_trace.h, so that tracing functions and macros can be imported separately. Some others belong in pmdb_subr.h. 11. sys/pmdb_subr.h: Collect declarations for functions that decode and print various hardware registers, data structures, etc. Define in a way that makes them usable only in a debug kernel. 12. sys/pmdb_trace.h: Declare only general-purpose functions for tracing current location, values of variables, etc. 13. sys/trap.h: Define SC_KPRINTF *** NOTE *** This change will be reversed, soon, because kprintf() is too heavy-weight to work as a fast system call. usr/src/uts/common changes usr/src/cmd changes =================== usr/src/cmd/sh/Makefile.lite: Create a makefile that builds a statically linked version of Bourne shell and links against libclite.a, an archive file containing ordinary objects of libc, with a few tweaks to prevent bringing in the whole world. *** Experimental *** Vey promising, but needs work. Changes to usr/src/lib/libc =========================== 1. Makefile.objs: Add support for building libc.a 2. port/threads/thr.c: Get rid of warnings about conflicting definitions of TIDHASH. We use UD_TIDHASH, instead. We wouldn't have to do this if we reformed some header files to be a bit less indiscriminate about what they include. Don't get me started. 3. ppc/Makefile: Changes to make building libc.a work. include Makefile.objs. Update assym.h only if its contents has really changed. 4. ppc/sys/_lwp_mutex_unlock.s: Optimize the way the address of the lockword is computed and the generation of WAITER_MASK. usr/src/lib/libc/ppc/Makefile: Get rid of kprintf.o New version of kprintf() is coming. For now, remove it so builds do not break. usr/src/uts/common/os/sunpci.c: Add ASSERTs and other trace messages to pci_config_getb(). I think hp->ah_addr ought not to be NULL. I also think that, although offset_t is a 64-bit integer, it should not have a value above 2**32 on a 32-bit kernel. usr/src/uts/common/io/vfe/vfe_gem.c Add call to print out the contents of conf_handle. usr/src/uts/common/os/main.c Replace ad hoc print statements with FBT(), which can be enabled and disabled. Some bugs are sensitive to timing, so it is handy to be able to adjust the verbosity. Also, FBT() produces more regular trace messages. usr/src/uts/common/os/sunddi.c Add some tracing. Temporary. usr/src/uts/common/os/sunpci.c Add some tracing. Temporary. usr/src/uts/ppc/ml/ddi_ppc_asm.s 1. *** IMPORTANT *** Fix bug where ddi_get32 (AKA ddi_getl, ddi_io_get32, ddi_io_getl, ddi_mem_get32, ddi_mem_getl) was missing a bctr at the end, and so fell through to i_ddi_get32(). NOTE: This was caught by desk checking, while adding code to make the stack frames observable. I was having a hard time figuring out how it is ever possible to get from pci_config_getb() to i_ddi_get32() -- it just didn't seem like there was ANY legitimate path from one to the other. So, I added code to retain more stack frames. Then, I spotted the problem before even running the new code. I believe the reason that this was a regression is that before my changes to memory management, there was a mapping to va=0, which should not have been there. With that mapping, things worked -- sort of. There have been three recent fixes of note: 1) the new scheme for protecting boot pages 2) the workaround for an uninitialized cp->cpu_pg 3) this fix Due primarily to these three fixes, I think you will find that a great many intermittent problems have been cleared up. Now, I get right back to the earlier symptom of hanging in the idle loop -- the old lwp unlock problem. usr/src/uts/ppc/pmdb/pmdb_subr.c Add function to print the contents of a structure, given a description of its elements. Just another Poor Man's DeBugger feature. Add function to print a ddi_acc_hdl. usr/src/uts/ppc/vm/hat_ppcmmu.h Remove definition of struct hat. It is ok to leave it as an incomplete type, because it is intended to be opaque. Get rid of ad-hoc duplicate definitions of MODS_* symbols in usr/src/uts/ppc/ml/modstubs.s. But, do it in a way that does not require genassym. For definitions of simple constants, I would rather make include files _ASM-safe. But, since that would be a big reform job that would not be taken back into Solaris product, for now, we extract the definitions we need. That makes dependencies a bit trickier than before, but since PowerPC already has this extra layer of dependency, due to the generation of header files from usr/src/uts/ppc/sysgen, then we have already paid the price in make-complexity. So, lets have another. usr/src/uts/ppc/os/ppc_subr.c: A thread's lwp pointer can be null. Do not unconditionally dereference it. gs revs 923 to 933 Files: create: usr/src/cmd/sh/Makefile.lite create: usr/src/lib/libc/Makefile.objs create: usr/src/uts/ppc/sys/pmdb_subr.h create: usr/src/uts/ppc/sys/pmdb_trace.h create: usr/src/uts/ppc/sysgen/extract-defs.pl create: usr/src/uts/ppc/vm/hat_debug.c create: usr/src/uts/ppc/vm/hat_debug.h update: generated.fl update: usr/src/Makefile.master update: usr/src/lib/libc/inc/thr_inlines.h update: usr/src/lib/libc/port/threads/thr.c update: usr/src/lib/libc/ppc/Makefile update: usr/src/lib/libc/ppc/genassym.c update: usr/src/lib/libc/ppc/sys/_lwp_mutex_unlock.s update: usr/src/lib/libc/ppc/sys/getdabr_count.s update: usr/src/uts/Makefile update: usr/src/uts/chrp/Makefile update: usr/src/uts/chrp/Makefile.chrp update: usr/src/uts/chrp/Makefile.files update: usr/src/uts/chrp/ml/locore.s update: usr/src/uts/chrp/os/intr.c update: usr/src/uts/chrp/os/memlist.c update: usr/src/uts/chrp/os/startup.c update: usr/src/uts/chrp/os/trap.c update: usr/src/uts/chrp/sys/machparam.h update: usr/src/uts/common/disp/cmt.c update: usr/src/uts/common/disp/disp.c update: usr/src/uts/common/io/vfe/vfe_gem.c update: usr/src/uts/common/os/exec.c update: usr/src/uts/common/os/main.c update: usr/src/uts/common/os/modctl.c update: usr/src/uts/common/os/sunddi.c update: usr/src/uts/common/os/sunpci.c update: usr/src/uts/ppc/Makefile update: usr/src/uts/ppc/Makefile.files update: usr/src/uts/ppc/Makefile.rules update: usr/src/uts/ppc/ml/ddi_ppc_asm.s update: usr/src/uts/ppc/ml/lock_prim.s update: usr/src/uts/ppc/ml/modstubs.s update: usr/src/uts/ppc/os/bootops.c update: usr/src/uts/ppc/os/ppc_subr.c update: usr/src/uts/ppc/pmdb/pmdb_shell.c update: usr/src/uts/ppc/pmdb/pmdb_subr.c update: usr/src/uts/ppc/sys/mutex_impl.h update: usr/src/uts/ppc/sys/pmdb.h update: usr/src/uts/ppc/sys/trap.h update: usr/src/uts/ppc/sysgen/Makefile update: usr/src/uts/ppc/sysgen/make-hdrs.pl update: usr/src/uts/ppc/vm/hat_ppcmmu.c update: usr/src/uts/ppc/vm/hat_ppcmmu.h update: usr/src/uts/ppc/vm/mach_ppcmmu.c update: usr/src/uts/ppc/vm/vm_machdep.c This message posted from opensolaris.org