History log of /freebsd-10.0-release/sys/arm/arm/swtch.S
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 259065 07-Dec-2013 gjb

- Copy stable/10 (r259064) to releng/10.0 as part of the
10.0-RELEASE cycle.
- Update __FreeBSD_version [1]
- Set branch name to -RC1

[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so
start releng/10.0 at '100' so the branch is started with
a value ending in zero.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


# 254847 25-Aug-2013 andrew

Add the frame information to cpu_switch to allow us to unwind out of it,
for example when dumping threads in the kernel debugger.


# 254461 17-Aug-2013 andrew

Rename device vfp to option VFP and retire the ARM_VFP_SUPPORT option. This
simplifies enabling as previously both options were required to be enabled,
now we only need a single option.

While here enable VFP on the PandaBoard.


# 254454 17-Aug-2013 andrew

Remove the ARMFPE option. It is unsupported, and appears to be broken as
arm_fpe_core_changecontext is not a function.


# 250253 04-May-2013 ian

Insert STOP_UNWINDING directives in the _start (kernel entry point) and
fork_trampoline (thread entry point) assembler routines, because it's
not possible to unwind beyond those points.

Also insert STOP_UNWINDING in the exception_exit routine, to prevent an
unwind-loop at that point. This is just a stopgap until we get around
to instrumenting all assembler functions with proper unwind metadata.


# 248361 16-Mar-2013 andrew

Add an END macro to ARM. This is mostly used to tell gas where the bounds
of the functions are when creating the EABI unwind tables.


# 247864 06-Mar-2013 andrew

Fix stack alignment in the kernel to be on an 8 byte boundary as required
by AAPCS.


# 245477 15-Jan-2013 cognet

Only spin on the blocked_lock for SCHED_ULE+SMP, as it's done on the other
arches.


# 239268 15-Aug-2012 gonzo

Merging projects/armv6, part 1

Cummulative patch of changes that are not vendor-specific:
- ARMv6 and ARMv7 architecture support
- ARM SMP support
- VFP/Neon support
- ARM Generic Interrupt Controller driver
- Simplification of startup code for all platforms


# 236991 13-Jun-2012 imp

Final whitespace trim.


# 188581 13-Feb-2009 cognet

Oops. ARM_RAS_END is ARM_TP_ADDRESS + 8, not 4.

Spotted out by: Mark Tinguely <tinguely at casselton d0t net>


# 188540 12-Feb-2009 cognet

To prevent various race conditions in the RAS code, store and restore the
values in ARM_RAS_START and ARM_RAS_END at context switch time.

MFC after: 1 week


# 183958 16-Oct-2008 raj

Eliminate flushing of L2 cache in ARM context switch routines.

With VIPT L2 cache such syncing not only is redundant, but also a performance
penalty.

Pointed out by: cognet


# 183838 13-Oct-2008 raj

Provide L2 cache synchronization (write back + invalidation) on ARM.

Note the cpu_l2cache_wbinv_* routines are no-ops on systems not populated with
L2 caches.

Obtained from: Marvell, Semihalf


# 181144 01-Aug-2008 cognet

Store the PC while context switching, for the benefits of DDB.


# 175982 05-Feb-2008 raj

Improve ARM_TP_ADDRESS and RAS area.

De-hardcode usage of ARM_TP_ADDRESS and RAS local storage, and move this
special purpose page to a more convenient place i.e. after the vectors high
page, more towards the end of address space. Previous location (0xe000_0000)
caused grief if KVA was to go beyond the default limit.

Note that ARM world rebuilding is required after this change since the
location of ARM_TP_ADDRESS is shared between kernel and userland.

Submitted by: Grzegorz Bernacki (gjb AT semihalf dot com)
Reviewed by: imp
Approved by: cognet (mentor)


# 172614 13-Oct-2007 cognet

Do not use __XSCALE__ to detect if pld/strd/ldrd is available, use
_ARM_ARCH_5E instead.

MFC After: 3 days


# 171780 07-Aug-2007 cognet

Use the third argument of cpu_switch(), as done for i386/amd63, as it is
required for ULE.

Approved by: re (blanket)


# 157616 09-Apr-2006 cognet

Not only disable/enable interrupts, do it for FIQs as well, when needed.


# 150944 04-Oct-2005 cognet

Remove a never reached RET.


# 150943 04-Oct-2005 cognet

strd needs the destination to be double-word aligned, but the pointer passed
to savectx isn't always, so always use stmia, savectx isn't called enough
to need that kind of optimization.


# 150856 03-Oct-2005 cognet

Implement savectx().

Obtained from: NetBSD


# 146596 24-May-2005 cognet

Write back affected pages in pmap_qremove() as well. This removes the need
to change the DACR when switching to a kernel thread, thus making
userland thread => kernel thread => same userland thread switch cheaper by
totally avoiding data cache and TLB invalidation.


# 143193 06-Mar-2005 cognet

Use [ldr|str]t instead of [ldr|str] when accessing ARM_TP_ADDRESS.


# 142955 01-Mar-2005 cognet

In cpu_throw(), correctly calculate td->td_md.md_tp.
In cpu_switch(), set the DACR even if we're switching to a kernel thread.


# 142570 26-Feb-2005 cognet

Instead of using sysarch() to store-retrieve the tp, add a magic address,
ARM_TP_ADDRESS, where the tp will be stored. On CPUs that support it, a cache
line will be allocated and locked for this address, so that it will never go
to RAM. On CPUs that does not, a page is allocated for it (it will be a bit
slower, and is wrong for SMP, but should be fine for UP).
The tp is still stored in the mdthread struct, and at each context switch,
ARM_TP_ADDRESS gets updated.

Suggested by: davidxu


# 139735 05-Jan-2005 imp

Start all license statements with /*-


# 138856 14-Dec-2004 cognet

Update the sp after popping the regs.
This is a good candidate for the golden pointy hat awards.


# 138751 12-Dec-2004 cognet

Save a few more cycles in cpu_switch() and cpu_throw().


# 138414 05-Dec-2004 cognet

Do not change the page directory and do not flush the TLB when switching to
a kernel thread.


# 137976 21-Nov-2004 cognet

Set the frame pointer to 0 in fork_trampoline().


# 137463 09-Nov-2004 cognet

Use the RET macro.


# 137341 07-Nov-2004 cognet

Remove useless code.


# 137274 05-Nov-2004 cognet

Save a few cycles in context switch.
Update comments to reflect reality.


# 135879 28-Sep-2004 cognet

Remove dead code.


# 135655 23-Sep-2004 cognet

Implement cpu_throw().

Obtained from: NetBSD


# 129198 14-May-2004 cognet

Import FreeBSD/arm kernel bits.
It only supports sa1110 (on simics) right now, but xscale support should come
soon.
Some of the initial work has been provided by :
Stephane Potvin <sepotvin at videotron.ca>
Most of this comes from NetBSD.