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 >
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:51:26 -07:00
/ *
* save f i n a l S P t o @prev->thread_info.ksp
* @prev is "current" so thread_info derived from SP
* /
GET_ C U R R _ T H R _ I N F O _ F R O M _ S P r10
st s p , [ r10 , T H R E A D _ I N F O _ K S P ]
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
2020-05-14 00:51:26 -07:00
/* load SP from @next->thread_info.ksp */
ld r10 , [ r1 , T A S K _ T H R E A D _ I N F O ]
ld s p , [ r10 , T H R E A D _ I N F O _ K S P ]
2020-05-14 00:16:34 -07:00
/* 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 )