net: net_cls: move cgroupfs classid handling into core
[platform/adaptation/renesas_rcar/renesas_kernel.git] / include / net / cls_cgroup.h
index 33d03b6..9cf2d5e 100644 (file)
 #include <linux/cgroup.h>
 #include <linux/hardirq.h>
 #include <linux/rcupdate.h>
+#include <net/sock.h>
 
-#if IS_ENABLED(CONFIG_NET_CLS_CGROUP)
-struct cgroup_cls_state
-{
+#ifdef CONFIG_CGROUP_NET_CLASSID
+struct cgroup_cls_state {
        struct cgroup_subsys_state css;
        u32 classid;
 };
 
-void sock_update_classid(struct sock *sk);
+struct cgroup_cls_state *task_cls_state(struct task_struct *p);
 
-#if IS_BUILTIN(CONFIG_NET_CLS_CGROUP)
 static inline u32 task_cls_classid(struct task_struct *p)
 {
        u32 classid;
@@ -41,33 +40,18 @@ static inline u32 task_cls_classid(struct task_struct *p)
 
        return classid;
 }
-#elif IS_MODULE(CONFIG_NET_CLS_CGROUP)
-static inline u32 task_cls_classid(struct task_struct *p)
-{
-       struct cgroup_subsys_state *css;
-       u32 classid = 0;
-
-       if (in_interrupt())
-               return 0;
-
-       rcu_read_lock();
-       css = task_css(p, net_cls_subsys_id);
-       if (css)
-               classid = container_of(css,
-                                      struct cgroup_cls_state, css)->classid;
-       rcu_read_unlock();
 
-       return classid;
-}
-#endif
-#else /* !CGROUP_NET_CLS_CGROUP */
 static inline void sock_update_classid(struct sock *sk)
 {
-}
+       u32 classid;
 
-static inline u32 task_cls_classid(struct task_struct *p)
+       classid = task_cls_classid(current);
+       if (classid != sk->sk_classid)
+               sk->sk_classid = classid;
+}
+#else /* !CONFIG_CGROUP_NET_CLASSID */
+static inline void sock_update_classid(struct sock *sk)
 {
-       return 0;
 }
-#endif /* CGROUP_NET_CLS_CGROUP */
+#endif /* CONFIG_CGROUP_NET_CLASSID */
 #endif  /* _NET_CLS_CGROUP_H */