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

NG2copy_to_user.S (1109B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* NG2copy_to_user.S: Niagara-2 optimized copy to userspace.
      3 *
      4 * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
      5 */
      6
      7#define EX_ST(x,y)		\
      898:	x;			\
      9	.section __ex_table,"a";\
     10	.align 4;		\
     11	.word 98b, y;		\
     12	.text;			\
     13	.align 4;
     14
     15#define EX_ST_FP(x,y)		\
     1698:	x;			\
     17	.section __ex_table,"a";\
     18	.align 4;		\
     19	.word 98b, y##_fp;	\
     20	.text;			\
     21	.align 4;
     22
     23#ifndef ASI_AIUS
     24#define ASI_AIUS	0x11
     25#endif
     26
     27#ifndef ASI_BLK_AIUS_4V
     28#define ASI_BLK_AIUS_4V	0x17
     29#endif
     30
     31#ifndef ASI_BLK_INIT_QUAD_LDD_AIUS
     32#define ASI_BLK_INIT_QUAD_LDD_AIUS 0x23
     33#endif
     34
     35#define FUNC_NAME		NG2copy_to_user
     36#define STORE(type,src,addr)	type##a src, [addr] ASI_AIUS
     37#define STORE_ASI		ASI_BLK_INIT_QUAD_LDD_AIUS
     38#define STORE_BLK(src,addr)	stda src, [addr] ASI_BLK_AIUS_4V
     39#define EX_RETVAL(x)		0
     40
     41#ifdef __KERNEL__
     42	/* Writing to %asi is _expensive_ so we hardcode it.
     43	 * Reading %asi to check for KERNEL_DS is comparatively
     44	 * cheap.
     45	 */
     46#define PREAMBLE					\
     47	rd		%asi, %g1;			\
     48	cmp		%g1, ASI_AIUS;			\
     49	bne,pn		%icc, raw_copy_in_user;		\
     50	 nop
     51#endif
     52
     53#include "NG2memcpy.S"