Linux Audio

Check our new training course

Linux BSP upgrade and security maintenance

Need help to get security updates for your Linux BSP?
Loading...
Note: File does not exist in v6.2.
 1/* SPDX-License-Identifier: GPL-2.0 */
 2/*
 3 * Copyright (c) 2024 Meta Platforms, Inc. and affiliates.
 4 * Copyright (c) 2024 David Vernet <dvernet@meta.com>
 5 */
 6
 7#include <scx/common.bpf.h>
 8
 9char _license[] SEC("license") = "GPL";
10
11#include "hotplug_test.h"
12
13UEI_DEFINE(uei);
14
15void BPF_STRUCT_OPS(hotplug_exit, struct scx_exit_info *ei)
16{
17	UEI_RECORD(uei, ei);
18}
19
20static void exit_from_hotplug(s32 cpu, bool onlining)
21{
22	/*
23	 * Ignored, just used to verify that we can invoke blocking kfuncs
24	 * from the hotplug path.
25	 */
26	scx_bpf_create_dsq(0, -1);
27
28	s64 code = SCX_ECODE_ACT_RESTART | HOTPLUG_EXIT_RSN;
29
30	if (onlining)
31		code |= HOTPLUG_ONLINING;
32
33	scx_bpf_exit(code, "hotplug event detected (%d going %s)", cpu,
34		     onlining ? "online" : "offline");
35}
36
37void BPF_STRUCT_OPS_SLEEPABLE(hotplug_cpu_online, s32 cpu)
38{
39	exit_from_hotplug(cpu, true);
40}
41
42void BPF_STRUCT_OPS_SLEEPABLE(hotplug_cpu_offline, s32 cpu)
43{
44	exit_from_hotplug(cpu, false);
45}
46
47SEC(".struct_ops.link")
48struct sched_ext_ops hotplug_cb_ops = {
49	.cpu_online		= (void *) hotplug_cpu_online,
50	.cpu_offline		= (void *) hotplug_cpu_offline,
51	.exit			= (void *) hotplug_exit,
52	.name			= "hotplug_cbs",
53	.timeout_ms		= 1000U,
54};
55
56SEC(".struct_ops.link")
57struct sched_ext_ops hotplug_nocb_ops = {
58	.exit			= (void *) hotplug_exit,
59	.name			= "hotplug_nocbs",
60	.timeout_ms		= 1000U,
61};