2019-06-04 10:11:33 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2013-01-18 15:12:18 +05:30
/ *
* Copyright ( C ) 2 0 0 4 , 2 0 0 7 - 2 0 1 0 , 2 0 1 1 - 2 0 1 2 S y n o p s y s , I n c . ( w w w . s y n o p s y s . c o m )
*
* Vineetg : Aug 2 0 0 9
* - Moved c o r e c o n t e x t s w i t c h m a c r o o u t o f e n t r y . S i n t o t h i s f i l e .
* - This i s t h e m o r e " n a t u r a l " h a n d w r i t t e n a s s e m b l e r
* /
2014-06-24 19:33:39 +05:30
# include < l i n u x / l i n k a g e . h >
2013-01-18 15:12:18 +05:30
# include < a s m / e n t r y . h > / * F o r t h e S A V E _ * m a c r o s * /
# include < a s m / a s m - o f f s e t s . h >
2013-11-01 10:46:40 +05:30
# define K S P _ W O R D _ O F F ( ( T A S K _ T H R E A D + T H R E A D _ K S P ) / 4 )
2020-05-14 00:16:34 -07:00
; IN
; - r0: prev task (also current)
; - r1: next task
; OUT
; - r0: prev task (so r0 not touched)
2013-01-18 15:12:18 +05:30
.section .sched .text , " ax" ,@progbits
2020-05-14 00:16:34 -07:00
ENTRY_ C F I ( _ _ s w i t c h _ t o )
/* save kernel stack frame regs of @prev task */
push b l i n k
CFI_ D E F _ C F A _ O F F S E T 4
CFI_ O F F S E T r31 , - 4
push f p
CFI_ D E F _ C F A _ O F F S E T 8
CFI_ O F F S E T r27 , - 8
mov f p , s p
CFI_ D E F _ C F A _ R E G I S T E R r27
/* kernel mode callee regs of @prev */
2013-01-18 15:12:18 +05:30
SAVE_ C A L L E E _ S A V E D _ K E R N E L
2020-05-14 00:16:34 -07:00
/* save final SP to @prev->thread.ksp */
2013-11-01 10:46:40 +05:30
# if K S P _ W O R D _ O F F < = 2 5 5
st. a s s p , [ r0 , K S P _ W O R D _ O F F ]
# else
/* Workaround for NR_CPUS=4k as ST.as can only take s9 offset */
2020-05-14 00:16:34 -07:00
add2 r10 , r0 , K S P _ W O R D _ O F F
st s p , [ r10 ]
2013-11-01 10:46:40 +05:30
# endif
2020-05-14 00:16:34 -07:00
/* update @next in _current_task[] and GP register caching it */
SET_ C U R R _ T A S K _ O N _ C P U r1 , r10
/* load SP from @next->thread.ksp */
ld. a s s p , [ r1 , K S P _ W O R D _ O F F ]
/* restore callee regs, stack frame regs of @next */
2013-01-18 15:12:18 +05:30
RESTORE_ C A L L E E _ S A V E D _ K E R N E L
2020-05-14 00:16:34 -07:00
pop f p
CFI_ R E S T O R E r27
CFI_ D E F _ C F A r28 , 4
pop b l i n k
CFI_ R E S T O R E r31
CFI_ D E F _ C F A _ O F F S E T 0
j [ b l i n k ]
2016-09-19 16:42:25 -07:00
END_ C F I ( _ _ s w i t c h _ t o )