#
316369 |
|
01-Apr-2017 |
jhibbits |
MFC r310146,r311912,r312369,r312617,r312614,r312659,r312974,r312977,r313005,r314826:
A series of Clang-related powerpc commits
r310146: Use the right bitwise OR operation for clearing single-step at trap time. r311912: Force all TOC references in asm to include '@toc' r312369: Use the explicit expanded form of cmp. r312617: Hide the 'MOREARGS' macro, it conflicts with contrib code, and is only used in one file. r312614: Don't pass -Wa,-many through clang, the integrated as doesn't support it. r312659: Avoid using non-zero argument for __builtin_frame_address(). r312974: Add a INTR_TRIG_INVALID, and use it in the powerpc interrupt code. r312977: Force the setting of bit 7 in the sysmouse packet byte 1 to be unsigned. r313005: Update CFLAGS for clang compatibility r314826: Clang in base now supports -mlongcall, so remove this hack
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
279750 |
|
07-Mar-2015 |
nwhitehorn |
Make 32-bit PowerPC kernels, like 64-bit PowerPC kernels, position-independent executables. The goal here, not yet accomplished, is to let the e500 kernel run under QEMU by setting KERNBASE to something that fits in low memory and then having the kernel relocate itself at runtime.
|
#
277561 |
|
23-Jan-2015 |
nwhitehorn |
Use relocation-safe methods to determine the sizes of the exception handlers. A "size" symbol with its address set to the length of handler would be shifted forward with all other addresses when relocations are processed. Instead, just note the end and do the subtraction at runtime.
|
#
275268 |
|
29-Nov-2014 |
jhibbits |
Add support for dtrace:fbt on modules for PowerPC
Summary: Revert the initial FBT-with-KDB changes for trap_subr*.S, and instead use the db_trap filter function to handle dtrace trap filtering. With this, the MMU is enabled by the support code, simplifying the codepath altogether.
Test Plan: Tested on my G4 PowerBook
Reviewers: #powerpc, nwhitehorn
Reviewed By: nwhitehorn
Differential Revision: https://reviews.freebsd.org/D1207
MFC after: 3 weeks
|
#
274743 |
|
20-Nov-2014 |
jhibbits |
cpudep_ap_early_bootstrap() takes no arguments, so no need to give it one.
MFC after: 3 weeks
|
#
266116 |
|
15-May-2014 |
jhibbits |
A page mask size is 12-bits, not 11.
MFC after: 1 week
|
#
261309 |
|
31-Jan-2014 |
jhibbits |
Unbreak non-SMP builds. This was broken by r259284. Also, reorganize the code introduced in that revision a bit.
Reviewed by: nwhitehorn MFC after: 3 weeks
|
#
259421 |
|
15-Dec-2013 |
jhibbits |
Save r3 before using it for the trap check, else we end up saving the new r3, containing the trap instruction encoding (0x7c810808), and restoring it back with the frame on return. This caused it to panic on my ppc32 machine, but somehow my ppc64 machine overlooked it, because I was using such a simple dtrace probe.
X-MFC-with: r259245 MFC after: 2 weeks
|
#
259245 |
|
12-Dec-2013 |
jhibbits |
FBT now does work fully on PowerPC.
MFC after: 2 weeks
|
#
258800 |
|
01-Dec-2013 |
nwhitehorn |
The kernel stack guard pages are only below the stack pointer, not above. Prevent erroneous detection of stack overflows on legitimate faults on the page after this thread's stack.
MFC after: 3 days
|
#
248457 |
|
18-Mar-2013 |
jhibbits |
Add FBT for PowerPC DTrace. Also, clean up the DTrace assembly code, much of which is not necessary for PowerPC.
The FBT module can likely be factored into 3 separate files: common, intel, and powerpc, rather than duplicating most of the code between the x86 and PowerPC flavors.
All DTrace modules for PowerPC will be MFC'd together once Fasttrap is completed.
|
#
242723 |
|
07-Nov-2012 |
jhibbits |
Implement DTrace for PowerPC. This includes both 32-bit and 64-bit.
There is one known issue: Some probes will display an error message along the lines of: "Invalid address (0)"
I tested this with both a simple dtrace probe and dtruss on a few different binaries on 32-bit. I only compiled 64-bit, did not run it, but I don't expect problems without the modules loaded. Volunteers are welcome.
MFC after: 1 month
|
#
227386 |
|
09-Nov-2011 |
nwhitehorn |
Fix a bug where the pmap_cpu_bootstrap() ap argument could be clobbered. Luckily, it mostly wasn't important, so this didn't cause major problems. Also improve register reuse when setting up trap frames very slightly.
Submitted by: Justin Hibbits <chmeeedalf at gmail dot com> MFC after: 5 days
|
#
223570 |
|
26-Jun-2011 |
nwhitehorn |
Revert r223479. It is unnecessary and served only to slightly ameliorate some manifestations of the bug actually fixed in r223485.
|
#
223485 |
|
23-Jun-2011 |
nwhitehorn |
Use the ABI-mandated thread pointer register (r2 for ppc32, r13 for ppc64) instead of a PCPU field for curthread. This averts a race on SMP systems with a high interrupt rate where the thread looking up the value of curthread could be preempted and migrated between obtaining the PCPU pointer and reading the value of pc_curthread, resulting in curthread being observed to be the current thread on the thread's original CPU. This played merry havoc with the system, in particular with mutexes. Many thanks to jhb for helping me work this one out.
Note that Book-E is in principle susceptible to the same problem, but has not been modified yet due to lack of Book-E hardware.
MFC after: 2 weeks
|
#
223479 |
|
23-Jun-2011 |
nwhitehorn |
Clear any outstanding atomic reservations when traps are taken. This fixes some interesting bugs (mostly on SMP systems) with atomic operations silently failing in interrupt heavy situations, especially when using overflow pages.
|
#
215107 |
|
11-Nov-2010 |
nwhitehorn |
Add support for the IMISS, DLMISS, and DSMISS traps required to run FreeBSD on a G2 core.
PR: powerpc/111296 Submitted by: Andrew Turner
|
#
214574 |
|
30-Oct-2010 |
nwhitehorn |
Restructure the way the copyin/copyout segment is stored to prevent a concurrency bug. Since all SLB/SR entries were invalidated during an exception, a decrementer exception could cause the user segment to be invalidated during a copyin()/copyout() without a thread switch that would cause it to be restored from the PCB, potentially causing the operation to continue on invalid memory. This is now handled by explicit restoration of segment 12 from the PCB on 32-bit systems and a check in the Data Segment Exception handler on 64-bit.
While here, cause copyin()/copyout() to check whether the requested user segment is already installed, saving some pipeline flushes, and fix the synchronization primitives around the mtsr and slbmte instructions to prevent accessing stale segments.
MFC after: 2 weeks
|
#
209975 |
|
13-Jul-2010 |
nwhitehorn |
MFppc64:
Kernel sources for 64-bit PowerPC, along with build-system changes to keep 32-bit kernels compiling (build system changes for 64-bit kernels are coming later). Existing 32-bit PowerPC kernel configurations must be updated after this change to specify their architecture.
|
#
198400 |
|
23-Oct-2009 |
nwhitehorn |
Do not map the trap vectors into the kernel's address space. They are only used in real mode and keeping them mapped only serves to make NULL a valid address, which results in silent NULL pointer deferences.
Suggested by: Patrick Kerharo Obtained from: projects/ppc64
|
#
197961 |
|
11-Oct-2009 |
nwhitehorn |
Correct a typo here and actually save DSISR instead of overwriting it.
|
#
191039 |
|
14-Apr-2009 |
nwhitehorn |
Changing the overflow trap to use bla to branch to dbtrap in r190946 was bogus. Revert to a branch that does not set LR. It's been a long week...
|
#
190946 |
|
11-Apr-2009 |
nwhitehorn |
Fix recognition of kernel-mode traps that pass through the KDB trap handler but do not actually invoke KDB. This includes recoverable machine checks encountered in kernel mode.
This patch causes machines with Grackle host-PCI bridges to be able to correctly enumerate them again.
MFC after: 3 days
|
#
190681 |
|
03-Apr-2009 |
nwhitehorn |
Add support for 64-bit PowerPC CPUs operating in the 64-bit bridge mode provided, for example, on the PowerPC 970 (G5), as well as on related CPUs like the POWER3 and POWER4.
This also adds support for various built-in hardware found on Apple G5 hardware (e.g. the IBM CPC925 northbridge).
Reviewed by: grehan
|
#
188951 |
|
23-Feb-2009 |
nwhitehorn |
Fix comment: we write the trap vector to SPRG3, not SPRG0.
|
#
188860 |
|
20-Feb-2009 |
nwhitehorn |
Add Altivec support for supported CPUs. This is derived from the FPU support code, and also reducing the size of trapcode to fit inside a 32 byte handler slot.
Reviewed by: grehan MFC after: 2 weeks
|
#
183060 |
|
15-Sep-2008 |
marcel |
Remove the tracing from the AP startup. The AP is known to start and the tracing can interfere with AP startup. Instead, use the available space in the reset vector for the initial stack.
|
#
178628 |
|
27-Apr-2008 |
marcel |
MFp4: SMP support
|
#
176742 |
|
02-Mar-2008 |
raj |
Unify and generalize PowerPC headers, adjust AIM code accordingly.
Rework of this area is a pre-requirement for importing e500 support (and other PowerPC core variations in the future). Mainly the following headers are refactored so that we can cover for low-level differences between various machines within PowerPC architecture:
<machine/pcpu.h> <machine/pcb.h> <machine/kdb.h> <machine/hid.h> <machine/frame.h>
Areas which use the above are adjusted and cleaned up.
Credits for this rework go to marcel@
Approved by: cognet (mentor) MFp4: e500
|
#
174599 |
|
14-Dec-2007 |
marcel |
Forced commit to record that this file was repocopied from src/sys/powerpc/powerpc and modified for its new location.
|
#
153685 |
|
23-Dec-2005 |
grehan |
Mark the return address of the call to ast() in the generic trap handling code so the stack trace unwinders don't start trying to go into user-space.
Found by trying to create core dumps with a KTR_COMPILE/KTR_GEOM kernel, which results in a stack_save() call in the ast() coredump path - this created a panic, and then calling 'trace' in ddb resulted in the black screen of death after printing out most of the backtrace.
|
#
148568 |
|
30-Jul-2005 |
grehan |
Temporary band-aid to fix hang when a process exec's Altivec instructions.
trap_subr.S: declare a stub for the a-unavailable trap that does an absolute jump to the vector-assist trap. This is due to the fact that the vec-unavail trap doesn't start at a 256-byte boundary, so the trick of masking the bottom 8 bits of the link register to identify the interrupt doesn't work, so let the vec-assist case handle Altivec-disabled for the time being.
Note that this will be fixed in the future with a much smaller vector code-stub (< 16 bytes) that will allow use of strange vector offsets that are also present in 4xx processors, and also allow smaller differences in vector codepaths on the G5.
trap.c: Treat altivec-unavailable/assist process traps as SIGILL. Not quite correct, since altivec-assist should really be a panic, but it is fine for the moment due to the above measure.
machdep.c Install the stub code for the altivec-unavailable trap, and the standard trap code at the altivec-assist.
Reported by: Andreas Tobler <toa at pop agri ch> MFC after: 3 days
|
#
139825 |
|
07-Jan-2005 |
imp |
/* -> /*- for license, minor formatting changes
|
#
132683 |
|
27-Jul-2004 |
grehan |
Save DAR/DSISR in DDB regsave area when stack overflow detected. It's hard to work out where the problem was without these.
|
#
132571 |
|
23-Jul-2004 |
grehan |
Detect kernel stack excursion into guard pages. Drop into KDB with a wired stack if this is found.
Mostly obtained from: NetBSD
|
#
132075 |
|
12-Jul-2004 |
grehan |
Rename low-level code ddb -> db. Use KDB instead of DDB. Fix bug in setup of stack frame where 8 bytes wasn't being saved for the callee's frame pointer and saved LR.
|
#
125441 |
|
04-Feb-2004 |
grehan |
Major overhaul of common trap code - remove unused 601 and tlb exception code - remove interrupt-time PTE spill code. The pmap code will now take care of pinning kernel PTEs, and there are no longer issues about physical mapping of PTE data structures - All segment registers are switched on kernel entry/exit, allowing the kernel to have more virtual space and for user virtual space to extend to 4G. - The temporary register save area has been shifted from unused exception vector space to the per-cpu data area. This allows interrupts to be delivered to multiple CPUs - ISI traps no longer spill to BAT tables. It is assumed that all of kernel instruction memory is pinned. - shift from 'ldmw/stmw' instructions to individual register loads/stores when saving context. All PPC manuals indicate this should be much faster. - use '%r' for register names throughout.
TODO: need to test if DSI traps were the result of kernel stack guard-page hits.
Reworked from: NetBSD
|
#
124772 |
|
21-Jan-2004 |
grehan |
- Catch up with panic __LINE__/__FILE__ changes by moving panic calls out of asm. - remove some long-dead code from machdep.c
|
#
111551 |
|
26-Feb-2003 |
grehan |
Register typo and incorrect 32-bit constant load in previous commit. Resulted in AST delivery not working.
|
#
111155 |
|
19-Feb-2003 |
grehan |
Catch up to latest KSE changes
|
#
103608 |
|
19-Sep-2002 |
grehan |
- make sure recoverable interrupts are re-enabled in the trap handler - turn on ast() loop to enable signal delivery
Approved by: benno
|
#
99032 |
|
29-Jun-2002 |
benno |
Many fixes to low-level trap and interrupt handling:
- Tidy up clock code. Don't repeatedly call hardclock(). - Remove intrnames, decrnest and intrcnt from locore.s - Coalesce all trap handling into a single stub that then calls a dispatch function.
Submitted by: Peter Grehan <peterg@ptree32.com.au>
|
#
97399 |
|
28-May-2002 |
benno |
The stack is not at the top of the user struct.
|
#
96773 |
|
16-May-2002 |
benno |
- Rename the _C_LABEL macro to CNAME. - Rename the _ASM_LABEL macro to ASMNAME. - Add the HIDENAME macro which is used in libc's syscall stuff.
|
#
96253 |
|
09-May-2002 |
benno |
Add an assertion that we have a current pmap set before we try and return.
|
#
95719 |
|
29-Apr-2002 |
benno |
Commit of stuff that's been sitting in my tree for a while.
Highlights include: - New low-level trap code from NetBSD. The high level code still needs a lot of work. - Fixes for some pmap handling in thread switching. - The kernel will now get to attempting to jump into init in user mode. There are some pmap/trap issues which prevent it from actually getting there though.
Obtained from: NetBSD (parts)
|