File Index
Files and directories
Sign in
FILE

user_events.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/user_events.h C
 1/* SPDX-License-Identifier: GPL-2.0-only */
 2/*
 3 * Copyright (c) 2022, Microsoft Corporation.
 4 *
 5 * Authors:
 6 *   Beau Belgrave <beaub@linux.microsoft.com>
 7 */
 8
 9#ifndef _LINUX_USER_EVENTS_H
10#define _LINUX_USER_EVENTS_H
11
12#include <linux/list.h>
13#include <linux/refcount.h>
14#include <linux/mm_types.h>
15#include <linux/workqueue.h>
16#include <uapi/linux/user_events.h>
17
18#ifdef CONFIG_USER_EVENTS
19struct user_event_mm {
20	struct list_head	mms_link;
21	struct list_head	enablers;
22	struct mm_struct	*mm;
23	/* Used for one-shot lists, protected by event_mutex */
24	struct user_event_mm	*next;
25	refcount_t		refcnt;
26	refcount_t		tasks;
27	struct rcu_work		put_rwork;
28};
29
30extern void user_event_mm_dup(struct task_struct *t,
31			      struct user_event_mm *old_mm);
32
33extern void user_event_mm_remove(struct task_struct *t);
34
35static inline void user_events_fork(struct task_struct *t,
36				    u64 clone_flags)
37{
38	struct user_event_mm *old_mm;
39
40	if (!t || !current->user_event_mm)
41		return;
42
43	old_mm = current->user_event_mm;
44
45	if (clone_flags & CLONE_VM) {
46		t->user_event_mm = old_mm;
47		refcount_inc(&old_mm->tasks);
48		return;
49	}
50
51	user_event_mm_dup(t, old_mm);
52}
53
54static inline void user_events_execve(struct task_struct *t)
55{
56	if (!t || !t->user_event_mm)
57		return;
58
59	user_event_mm_remove(t);
60}
61
62static inline void user_events_exit(struct task_struct *t)
63{
64	if (!t || !t->user_event_mm)
65		return;
66
67	user_event_mm_remove(t);
68}
69#else
70static inline void user_events_fork(struct task_struct *t,
71				    u64 clone_flags)
72{
73}
74
75static inline void user_events_execve(struct task_struct *t)
76{
77}
78
79static inline void user_events_exit(struct task_struct *t)
80{
81}
82#endif /* CONFIG_USER_EVENTS */
83
84#endif /* _LINUX_USER_EVENTS_H */
~/ Read-only file preview.