18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * netprio_cgroup.h			Control Group Priority set
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Authors:	Neil Horman <nhorman@tuxdriver.com>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _NETPRIO_CGROUP_H
98c2ecf20Sopenharmony_ci#define _NETPRIO_CGROUP_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/cgroup.h>
128c2ecf20Sopenharmony_ci#include <linux/hardirq.h>
138c2ecf20Sopenharmony_ci#include <linux/rcupdate.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_CGROUP_NET_PRIO)
168c2ecf20Sopenharmony_cistruct netprio_map {
178c2ecf20Sopenharmony_ci	struct rcu_head rcu;
188c2ecf20Sopenharmony_ci	u32 priomap_len;
198c2ecf20Sopenharmony_ci	u32 priomap[];
208c2ecf20Sopenharmony_ci};
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistatic inline u32 task_netprioidx(struct task_struct *p)
238c2ecf20Sopenharmony_ci{
248c2ecf20Sopenharmony_ci	struct cgroup_subsys_state *css;
258c2ecf20Sopenharmony_ci	u32 idx;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	rcu_read_lock();
288c2ecf20Sopenharmony_ci	css = task_css(p, net_prio_cgrp_id);
298c2ecf20Sopenharmony_ci	idx = css->id;
308c2ecf20Sopenharmony_ci	rcu_read_unlock();
318c2ecf20Sopenharmony_ci	return idx;
328c2ecf20Sopenharmony_ci}
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_cistatic inline void sock_update_netprioidx(struct sock_cgroup_data *skcd)
358c2ecf20Sopenharmony_ci{
368c2ecf20Sopenharmony_ci	if (in_interrupt())
378c2ecf20Sopenharmony_ci		return;
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	sock_cgroup_set_prioidx(skcd, task_netprioidx(current));
408c2ecf20Sopenharmony_ci}
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci#else /* !CONFIG_CGROUP_NET_PRIO */
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_cistatic inline u32 task_netprioidx(struct task_struct *p)
458c2ecf20Sopenharmony_ci{
468c2ecf20Sopenharmony_ci	return 0;
478c2ecf20Sopenharmony_ci}
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_cistatic inline void sock_update_netprioidx(struct sock_cgroup_data *skcd)
508c2ecf20Sopenharmony_ci{
518c2ecf20Sopenharmony_ci}
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#endif /* CONFIG_CGROUP_NET_PRIO */
548c2ecf20Sopenharmony_ci#endif  /* _NET_CLS_CGROUP_H */
55