Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/include/asm/cpu_ops.h
26481 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) 2013 ARM Ltd.
4
*/
5
#ifndef __ASM_CPU_OPS_H
6
#define __ASM_CPU_OPS_H
7
8
#include <linux/init.h>
9
#include <linux/threads.h>
10
11
/**
12
* struct cpu_operations - Callback operations for hotplugging CPUs.
13
*
14
* @name: Name of the property as appears in a devicetree cpu node's
15
* enable-method property. On systems booting with ACPI, @name
16
* identifies the struct cpu_operations entry corresponding to
17
* the boot protocol specified in the ACPI MADT table.
18
* @cpu_init: Reads any data necessary for a specific enable-method for a
19
* proposed logical id.
20
* @cpu_prepare: Early one-time preparation step for a cpu. If there is a
21
* mechanism for doing so, tests whether it is possible to boot
22
* the given CPU.
23
* @cpu_boot: Boots a cpu into the kernel.
24
* @cpu_postboot: Optionally, perform any post-boot cleanup or necessary
25
* synchronisation. Called from the cpu being booted.
26
* @cpu_can_disable: Determines whether a CPU can be disabled based on
27
* mechanism-specific information.
28
* @cpu_disable: Prepares a cpu to die. May fail for some mechanism-specific
29
* reason, which will cause the hot unplug to be aborted. Called
30
* from the cpu to be killed.
31
* @cpu_die: Makes a cpu leave the kernel. Must not fail. Called from the
32
* cpu being killed.
33
* @cpu_kill: Ensures a cpu has left the kernel. Called from another cpu.
34
*/
35
struct cpu_operations {
36
const char *name;
37
int (*cpu_init)(unsigned int);
38
int (*cpu_prepare)(unsigned int);
39
int (*cpu_boot)(unsigned int);
40
void (*cpu_postboot)(void);
41
#ifdef CONFIG_HOTPLUG_CPU
42
bool (*cpu_can_disable)(unsigned int cpu);
43
int (*cpu_disable)(unsigned int cpu);
44
void (*cpu_die)(unsigned int cpu);
45
int (*cpu_kill)(unsigned int cpu);
46
#endif
47
};
48
49
int __init init_cpu_ops(int cpu);
50
extern const struct cpu_operations *get_cpu_ops(int cpu);
51
52
static inline void __init init_bootcpu_ops(void)
53
{
54
init_cpu_ops(0);
55
}
56
57
#endif /* ifndef __ASM_CPU_OPS_H */
58
59