cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

switch.S (775B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
      4 */
      5#include <asm/asm.h>
      6#include <asm/asmmacro.h>
      7#include <asm/asm-offsets.h>
      8#include <asm/loongarch.h>
      9#include <asm/regdef.h>
     10#include <asm/stackframe.h>
     11#include <asm/thread_info.h>
     12
     13/*
     14 * task_struct *__switch_to(task_struct *prev, task_struct *next,
     15 *			    struct thread_info *next_ti)
     16 */
     17	.align	5
     18SYM_FUNC_START(__switch_to)
     19	csrrd	t1, LOONGARCH_CSR_PRMD
     20	stptr.d	t1, a0, THREAD_CSRPRMD
     21
     22	cpu_save_nonscratch a0
     23	stptr.d	ra, a0, THREAD_REG01
     24	move	tp, a2
     25	cpu_restore_nonscratch a1
     26
     27	li.w	t0, _THREAD_SIZE - 32
     28	PTR_ADD	t0, t0, tp
     29	set_saved_sp	t0, t1, t2
     30
     31	ldptr.d	t1, a1, THREAD_CSRPRMD
     32	csrwr	t1, LOONGARCH_CSR_PRMD
     33
     34	jr	ra
     35SYM_FUNC_END(__switch_to)