lin
2025-06-05 ed3dd9d3e7519a82bb871d5eedb24a2fa0c91f47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
 * Copyright (C) 2004-2006 Atmel Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#ifndef __ASM_AVR32_SWITCH_TO_H
#define __ASM_AVR32_SWITCH_TO_H
 
/*
 * Help PathFinder and other Nexus-compliant debuggers keep track of
 * the current PID by emitting an Ownership Trace Message each time we
 * switch task.
 */
#ifdef CONFIG_OWNERSHIP_TRACE
#include <asm/ocd.h>
#define ocd_switch(prev, next)                \
   do {                        \
       ocd_write(PID, prev->pid);        \
       ocd_write(PID, next->pid);        \
   } while(0)
#else
#define ocd_switch(prev, next)
#endif
 
/*
 * switch_to(prev, next, last) should switch from task `prev' to task
 * `next'. `prev' will never be the same as `next'.
 *
 * We just delegate everything to the __switch_to assembly function,
 * which is implemented in arch/avr32/kernel/switch_to.S
 *
 * mb() tells GCC not to cache `current' across this call.
 */
struct cpu_context;
struct task_struct;
extern struct task_struct *__switch_to(struct task_struct *,
                      struct cpu_context *,
                      struct cpu_context *);
#define switch_to(prev, next, last)                    \
   do {                                \
       ocd_switch(prev, next);                    \
       last = __switch_to(prev, &prev->thread.cpu_context + 1,    \
                  &next->thread.cpu_context);        \
   } while (0)
 
 
#endif /* __ASM_AVR32_SWITCH_TO_H */