diff options
author | Jonas Gorski <jogo@openwrt.org> | 2015-12-02 22:23:22 +0000 |
---|---|---|
committer | Jonas Gorski <jogo@openwrt.org> | 2015-12-02 22:23:22 +0000 |
commit | 9da189b6160422c8fe396181ff2d496fa68408b2 (patch) | |
tree | 4d911e6fe2fe7e304d340276c06729b33099013c /target/linux/generic/patches-4.4/911-kobject_add_broadcast_uevent.patch | |
parent | 51a736c6287eb29cc5150f06ce8fdf10b7441a1b (diff) | |
download | master-187ad058-9da189b6160422c8fe396181ff2d496fa68408b2.tar.gz master-187ad058-9da189b6160422c8fe396181ff2d496fa68408b2.tar.bz2 master-187ad058-9da189b6160422c8fe396181ff2d496fa68408b2.zip |
kernel: add linux 4.4 support
Based on 4.4-rc3. Runtime tested on MIPS.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@47701 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/patches-4.4/911-kobject_add_broadcast_uevent.patch')
-rw-r--r-- | target/linux/generic/patches-4.4/911-kobject_add_broadcast_uevent.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/target/linux/generic/patches-4.4/911-kobject_add_broadcast_uevent.patch b/target/linux/generic/patches-4.4/911-kobject_add_broadcast_uevent.patch new file mode 100644 index 0000000000..a3401ff4b3 --- /dev/null +++ b/target/linux/generic/patches-4.4/911-kobject_add_broadcast_uevent.patch @@ -0,0 +1,65 @@ +--- a/include/linux/kobject.h ++++ b/include/linux/kobject.h +@@ -32,6 +32,8 @@ + #define UEVENT_NUM_ENVP 32 /* number of env pointers */ + #define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */ + ++struct sk_buff; ++ + #ifdef CONFIG_UEVENT_HELPER + /* path to the userspace helper executed on an event */ + extern char uevent_helper[]; +@@ -222,4 +224,7 @@ int add_uevent_var(struct kobj_uevent_en + int kobject_action_type(const char *buf, size_t count, + enum kobject_action *type); + ++int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group, ++ gfp_t allocation); ++ + #endif /* _KOBJECT_H_ */ +--- a/lib/kobject_uevent.c ++++ b/lib/kobject_uevent.c +@@ -423,6 +423,43 @@ int add_uevent_var(struct kobj_uevent_en + EXPORT_SYMBOL_GPL(add_uevent_var); + + #if defined(CONFIG_NET) ++int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group, ++ gfp_t allocation) ++{ ++ struct uevent_sock *ue_sk; ++ int err = 0; ++ ++ /* send netlink message */ ++ mutex_lock(&uevent_sock_mutex); ++ list_for_each_entry(ue_sk, &uevent_sock_list, list) { ++ struct sock *uevent_sock = ue_sk->sk; ++ struct sk_buff *skb2; ++ ++ skb2 = skb_clone(skb, allocation); ++ if (!skb2) ++ break; ++ ++ err = netlink_broadcast(uevent_sock, skb2, pid, group, ++ allocation); ++ if (err) ++ break; ++ } ++ mutex_unlock(&uevent_sock_mutex); ++ ++ kfree_skb(skb); ++ return err; ++} ++#else ++int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group, ++ gfp_t allocation) ++{ ++ kfree_skb(skb); ++ return 0; ++} ++#endif ++EXPORT_SYMBOL_GPL(broadcast_uevent); ++ ++#if defined(CONFIG_NET) + static int uevent_net_init(struct net *net) + { + struct uevent_sock *ue_sk; |