aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-2.6.34/223-kobject-add-broadcast_uevent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/patches-2.6.34/223-kobject-add-broadcast_uevent.patch')
-rw-r--r--target/linux/generic/patches-2.6.34/223-kobject-add-broadcast_uevent.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/target/linux/generic/patches-2.6.34/223-kobject-add-broadcast_uevent.patch b/target/linux/generic/patches-2.6.34/223-kobject-add-broadcast_uevent.patch
new file mode 100644
index 0000000000..d851d313ee
--- /dev/null
+++ b/target/linux/generic/patches-2.6.34/223-kobject-add-broadcast_uevent.patch
@@ -0,0 +1,69 @@
+--- a/include/linux/kobject.h
++++ b/include/linux/kobject.h
+@@ -30,6 +30,8 @@
+ #define UEVENT_NUM_ENVP 32 /* number of env pointers */
+ #define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */
+
++struct sk_buff;
++
+ /* path to the userspace helper executed on an event */
+ extern char uevent_helper[];
+
+@@ -208,6 +210,10 @@ 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,
++ int allocation);
++
+ #else
+ static inline int kobject_uevent(struct kobject *kobj,
+ enum kobject_action action)
+@@ -224,6 +230,16 @@ static inline int add_uevent_var(struct
+ static inline int kobject_action_type(const char *buf, size_t count,
+ enum kobject_action *type)
+ { return -EINVAL; }
++
++void kfree_skb(struct sk_buff *);
++
++static inline int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
++ int allocation)
++{
++ kfree_skb(skb);
++ return 0;
++}
++
+ #endif
+
+ #endif /* _KOBJECT_H_ */
+--- a/lib/kobject_uevent.c
++++ b/lib/kobject_uevent.c
+@@ -331,6 +331,27 @@ 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,
++ int allocation)
++{
++ if (!uevent_sock) {
++ kfree_skb(skb);
++ return -ENODEV;
++ }
++
++ return netlink_broadcast(uevent_sock, skb, pid, group, allocation);;
++}
++#else
++int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
++ int allocation)
++{
++ kfree_skb(skb);
++ return 0;
++}
++#endif
++EXPORT_SYMBOL_GPL(broadcast_uevent);
++
++#if defined(CONFIG_NET)
+ static int __init kobject_uevent_init(void)
+ {
+ uevent_sock = netlink_kernel_create(&init_net, NETLINK_KOBJECT_UEVENT,