datapath: Convert ODP_DP_* commands to use AF_NETLINK socket layer.
[sliver-openvswitch.git] / datapath / linux-2.6 / compat-2.6 / include / linux / rtnetlink.h
index 6602536..0a02149 100644 (file)
@@ -9,10 +9,10 @@
 static inline void rtnl_notify(struct sk_buff *skb, u32 pid, u32 group,
                               struct nlmsghdr *nlh, gfp_t flags)
 {
-       BUG_ON(nlh);            /* not implemented */
+       BUG_ON(nlh != NULL);            /* not implemented */
        if (group) {
                /* errors reported via destination sk->sk_err */
-               nlmsg_multicast(rtnl, skb, 0, group);
+               nlmsg_multicast(rtnl, skb, 0, group, flags);
        }
 }
 
@@ -46,4 +46,39 @@ static inline int rtnl_is_locked(void)
 
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)
+#ifdef CONFIG_PROVE_LOCKING
+static inline int lockdep_rtnl_is_held(void)
+{
+       return 1;
+}
+#endif
+#endif
+
+#ifndef rcu_dereference_rtnl
+/**
+ * rcu_dereference_rtnl - rcu_dereference with debug checking
+ * @p: The pointer to read, prior to dereferencing
+ *
+ * Do an rcu_dereference(p), but check caller either holds rcu_read_lock()
+ * or RTNL. Note : Please prefer rtnl_dereference() or rcu_dereference()
+ */
+#define rcu_dereference_rtnl(p)                                        \
+       rcu_dereference_check(p, rcu_read_lock_held() ||        \
+                                lockdep_rtnl_is_held())
+#endif
+
+#ifndef rtnl_dereference
+/**
+ * rtnl_dereference - fetch RCU pointer when updates are prevented by RTNL
+ * @p: The pointer to read, prior to dereferencing
+ *
+ * Return the value of the specified RCU-protected pointer, but omit
+ * both the smp_read_barrier_depends() and the ACCESS_ONCE(), because
+ * caller holds RTNL.
+ */
+#define rtnl_dereference(p)                                    \
+       rcu_dereference_protected(p, lockdep_rtnl_is_held())
+#endif
+
 #endif /* linux/rtnetlink.h wrapper */