1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * netprio_cgroup.h Control Group Priority set 4 * 5 * Authors: Neil Horman <nhorman@tuxdriver.com> 6 */ 7 8 #ifndef _NETPRIO_CGROUP_H 9 #define _NETPRIO_CGROUP_H 10 11 #include <linux/cgroup.h> 12 #include <linux/hardirq.h> 13 #include <linux/rcupdate.h> 14 15 #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) 16 struct netprio_map { 17 struct rcu_head rcu; 18 u32 priomap_len; 19 u32 priomap[]; 20 }; 21 22 static inline u32 task_netprioidx(struct task_struct *p) 23 { 24 struct cgroup_subsys_state *css; 25 u32 idx; 26 27 rcu_read_lock(); 28 css = task_css(p, net_prio_cgrp_id); 29 idx = css->cgroup->id; 30 rcu_read_unlock(); 31 return idx; 32 } 33 34 static inline void sock_update_netprioidx(struct sock_cgroup_data *skcd) 35 { 36 if (in_interrupt()) 37 return; 38 39 sock_cgroup_set_prioidx(skcd, task_netprioidx(current)); 40 } 41 42 #else /* !CONFIG_CGROUP_NET_PRIO */ 43 44 static inline u32 task_netprioidx(struct task_struct *p) 45 { 46 return 0; 47 } 48 49 static inline void sock_update_netprioidx(struct sock_cgroup_data *skcd) 50 { 51 } 52 53 #endif /* CONFIG_CGROUP_NET_PRIO */ 54 #endif /* _NET_CLS_CGROUP_H */ 55