linux/arch/arc/include/asm/switch_to.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
   4 */
   5
   6#ifndef _ASM_ARC_SWITCH_TO_H
   7#define _ASM_ARC_SWITCH_TO_H
   8
   9#ifndef __ASSEMBLY__
  10
  11#include <linux/sched.h>
  12
  13#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
  14
  15extern void fpu_save_restore(struct task_struct *p, struct task_struct *n);
  16#define ARC_FPU_PREV(p, n)      fpu_save_restore(p, n)
  17#define ARC_FPU_NEXT(t)
  18
  19#else
  20
  21#define ARC_FPU_PREV(p, n)
  22#define ARC_FPU_NEXT(n)
  23
  24#endif /* !CONFIG_ARC_FPU_SAVE_RESTORE */
  25
  26#ifdef CONFIG_ARC_PLAT_EZNPS
  27extern void dp_save_restore(struct task_struct *p, struct task_struct *n);
  28#define ARC_EZNPS_DP_PREV(p, n)      dp_save_restore(p, n)
  29#else
  30#define ARC_EZNPS_DP_PREV(p, n)
  31
  32#endif /* !CONFIG_ARC_PLAT_EZNPS */
  33
  34struct task_struct *__switch_to(struct task_struct *p, struct task_struct *n);
  35
  36#define switch_to(prev, next, last)     \
  37do {                                    \
  38        ARC_EZNPS_DP_PREV(prev, next);  \
  39        ARC_FPU_PREV(prev, next);       \
  40        last = __switch_to(prev, next);\
  41        ARC_FPU_NEXT(next);             \
  42        mb();                           \
  43} while (0)
  44
  45#endif
  46
  47#endif
  48