Skip to content

Commit b9016d4

Browse files
AaronDotopsiff
authored andcommitted
LoongArch: Handle fp, lsx, lasx and lbt assembly symbols
Like the other relevant symbols, export them and put the function declarations in header files rather than source files. Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
1 parent 9ffed75 commit b9016d4

5 files changed

Lines changed: 20 additions & 21 deletions

File tree

arch/loongarch/include/asm/fpu.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,22 @@ extern void kernel_fpu_end(void);
2727
extern void _init_fpu(unsigned int);
2828
extern void _save_fp(struct loongarch_fpu *);
2929
extern void _restore_fp(struct loongarch_fpu *);
30+
extern int _save_fp_context(void __user *fpregs, void __user *fcc, void __user *csr);
31+
extern int _restore_fp_context(void __user *fpregs, void __user *fcc, void __user *csr);
3032

3133
extern void _save_lsx(struct loongarch_fpu *fpu);
3234
extern void _restore_lsx(struct loongarch_fpu *fpu);
3335
extern void _init_lsx_upper(void);
3436
extern void _restore_lsx_upper(struct loongarch_fpu *fpu);
37+
extern int _save_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
38+
extern int _restore_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
3539

3640
extern void _save_lasx(struct loongarch_fpu *fpu);
3741
extern void _restore_lasx(struct loongarch_fpu *fpu);
3842
extern void _init_lasx_upper(void);
3943
extern void _restore_lasx_upper(struct loongarch_fpu *fpu);
44+
extern int _save_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
45+
extern int _restore_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
4046

4147
static inline void enable_lsx(void);
4248
static inline void disable_lsx(void);

arch/loongarch/include/asm/lbt.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
extern void _init_lbt(void);
1616
extern void _save_lbt(struct loongarch_lbt *);
1717
extern void _restore_lbt(struct loongarch_lbt *);
18+
extern int _save_lbt_context(void __user *regs, void __user *eflags);
19+
extern int _restore_lbt_context(void __user *regs, void __user *eflags);
20+
extern int _save_ftop_context(void __user *ftop);
21+
extern int _restore_ftop_context(void __user *ftop);
1822

1923
static inline int is_lbt_enabled(void)
2024
{

arch/loongarch/kernel/fpu.S

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,7 @@ SYM_FUNC_START(_save_fp_context)
458458
li.w a0, 0 # success
459459
jr ra
460460
SYM_FUNC_END(_save_fp_context)
461+
EXPORT_SYMBOL_GPL(_save_fp_context)
461462

462463
/*
463464
* a0: fpregs
@@ -471,6 +472,7 @@ SYM_FUNC_START(_restore_fp_context)
471472
li.w a0, 0 # success
472473
jr ra
473474
SYM_FUNC_END(_restore_fp_context)
475+
EXPORT_SYMBOL_GPL(_restore_fp_context)
474476

475477
/*
476478
* a0: fpregs
@@ -484,6 +486,7 @@ SYM_FUNC_START(_save_lsx_context)
484486
li.w a0, 0 # success
485487
jr ra
486488
SYM_FUNC_END(_save_lsx_context)
489+
EXPORT_SYMBOL_GPL(_save_lsx_context)
487490

488491
/*
489492
* a0: fpregs
@@ -497,6 +500,7 @@ SYM_FUNC_START(_restore_lsx_context)
497500
li.w a0, 0 # success
498501
jr ra
499502
SYM_FUNC_END(_restore_lsx_context)
503+
EXPORT_SYMBOL_GPL(_restore_lsx_context)
500504

501505
/*
502506
* a0: fpregs
@@ -510,6 +514,7 @@ SYM_FUNC_START(_save_lasx_context)
510514
li.w a0, 0 # success
511515
jr ra
512516
SYM_FUNC_END(_save_lasx_context)
517+
EXPORT_SYMBOL_GPL(_save_lasx_context)
513518

514519
/*
515520
* a0: fpregs
@@ -523,6 +528,7 @@ SYM_FUNC_START(_restore_lasx_context)
523528
li.w a0, 0 # success
524529
jr ra
525530
SYM_FUNC_END(_restore_lasx_context)
531+
EXPORT_SYMBOL_GPL(_restore_lasx_context)
526532

527533
.L_fpu_fault:
528534
li.w a0, -EFAULT # failure

arch/loongarch/kernel/lbt.S

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ SYM_FUNC_START(_save_lbt_context)
9090
li.w a0, 0 # success
9191
jr ra
9292
SYM_FUNC_END(_save_lbt_context)
93+
EXPORT_SYMBOL_GPL(_save_lbt_context)
9394

9495
/*
9596
* a0: scr
@@ -110,6 +111,7 @@ SYM_FUNC_START(_restore_lbt_context)
110111
li.w a0, 0 # success
111112
jr ra
112113
SYM_FUNC_END(_restore_lbt_context)
114+
EXPORT_SYMBOL_GPL(_restore_lbt_context)
113115

114116
/*
115117
* a0: ftop
@@ -120,6 +122,7 @@ SYM_FUNC_START(_save_ftop_context)
120122
li.w a0, 0 # success
121123
jr ra
122124
SYM_FUNC_END(_save_ftop_context)
125+
EXPORT_SYMBOL_GPL(_save_ftop_context)
123126

124127
/*
125128
* a0: ftop
@@ -150,6 +153,7 @@ SYM_FUNC_START(_restore_ftop_context)
150153
li.w a0, 0 # success
151154
jr ra
152155
SYM_FUNC_END(_restore_ftop_context)
156+
EXPORT_SYMBOL_GPL(_restore_ftop_context)
153157

154158
.L_lbt_fault:
155159
li.w a0, -EFAULT # failure

arch/loongarch/kernel/signal.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,27 +50,6 @@
5050
#define lock_lbt_owner() ({ preempt_disable(); pagefault_disable(); })
5151
#define unlock_lbt_owner() ({ pagefault_enable(); preempt_enable(); })
5252

53-
/* Assembly functions to move context to/from the FPU */
54-
extern asmlinkage int
55-
_save_fp_context(void __user *fpregs, void __user *fcc, void __user *csr);
56-
extern asmlinkage int
57-
_restore_fp_context(void __user *fpregs, void __user *fcc, void __user *csr);
58-
extern asmlinkage int
59-
_save_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
60-
extern asmlinkage int
61-
_restore_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
62-
extern asmlinkage int
63-
_save_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
64-
extern asmlinkage int
65-
_restore_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr);
66-
67-
#ifdef CONFIG_CPU_HAS_LBT
68-
extern asmlinkage int _save_lbt_context(void __user *regs, void __user *eflags);
69-
extern asmlinkage int _restore_lbt_context(void __user *regs, void __user *eflags);
70-
extern asmlinkage int _save_ftop_context(void __user *ftop);
71-
extern asmlinkage int _restore_ftop_context(void __user *ftop);
72-
#endif
73-
7453
struct rt_sigframe {
7554
struct siginfo rs_info;
7655
struct ucontext rs_uctx;

0 commit comments

Comments
 (0)