summaryrefslogtreecommitdiff
path: root/core/udev/0002-reinstate-TIMEOUT-handling.patch
diff options
context:
space:
mode:
Diffstat (limited to 'core/udev/0002-reinstate-TIMEOUT-handling.patch')
-rw-r--r--core/udev/0002-reinstate-TIMEOUT-handling.patch146
1 files changed, 0 insertions, 146 deletions
diff --git a/core/udev/0002-reinstate-TIMEOUT-handling.patch b/core/udev/0002-reinstate-TIMEOUT-handling.patch
deleted file mode 100644
index edbbf1d32..000000000
--- a/core/udev/0002-reinstate-TIMEOUT-handling.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From 629d840316280cffcc724fac41047374a7685490 Mon Sep 17 00:00:00 2001
-From: Tom Gundersen <teg@jklm.no>
-Date: Thu, 15 Mar 2012 02:12:43 +0100
-Subject: [PATCH 2/2] reinstate TIMEOUT= handling
-
-Without treating events with timeouts specially some drivers would cause a
-30 seconds stall on boot: .
-
-I also received reports of some drivers not working at all, even after the
-timeout.
-
-We will remove this patch when more drivers have been fixed in the kernel (3.4?).
-
-This reverts 43d5c5f03645c4b842659f9b5bd0ae465e885e92 and
-57c6f8ae5f52a6e8ffc66a54966346f733dded39.
----
- TODO | 2 ++
- src/libudev-device.c | 19 +++++++++++++++++++
- src/libudev-private.h | 1 +
- src/udevd.c | 13 ++++++++++---
- 4 files changed, 32 insertions(+), 3 deletions(-)
-
-diff --git a/TODO b/TODO
-index 8b8b9c8..3d26e89 100644
---- a/TODO
-+++ b/TODO
-@@ -7,6 +7,8 @@
-
- - move /usr/lib/udev/devices/ to tmpfiles
-
-+ - remove TIMEOUT= handling
-+
- - trigger --subsystem-match=usb/usb_device
-
- - kill rules_generator
-diff --git a/src/libudev-device.c b/src/libudev-device.c
-index 10f28b8..639c367 100644
---- a/src/libudev-device.c
-+++ b/src/libudev-device.c
-@@ -68,6 +68,7 @@ struct udev_device {
- struct udev_list tags_list;
- unsigned long long int seqnum;
- unsigned long long int usec_initialized;
-+ int timeout;
- int devlink_priority;
- int refcount;
- dev_t devnum;
-@@ -160,6 +161,21 @@ static int udev_device_set_devnum(struct udev_device *udev_device, dev_t devnum)
- return 0;
- }
-
-+int udev_device_get_timeout(struct udev_device *udev_device)
-+{
-+ return udev_device->timeout;
-+}
-+
-+static int udev_device_set_timeout(struct udev_device *udev_device, int timeout)
-+{
-+ char num[32];
-+
-+ udev_device->timeout = timeout;
-+ snprintf(num, sizeof(num), "%u", timeout);
-+ udev_device_add_property(udev_device, "TIMEOUT", num);
-+ return 0;
-+}
-+
- const char *udev_device_get_devpath_old(struct udev_device *udev_device)
- {
- return udev_device->devpath_old;
-@@ -414,6 +430,8 @@ void udev_device_add_property_from_string_parse(struct udev_device *udev_device,
- udev_device_set_devpath_old(udev_device, &property[12]);
- } else if (strncmp(property, "SEQNUM=", 7) == 0) {
- udev_device_set_seqnum(udev_device, strtoull(&property[7], NULL, 10));
-+ } else if (strncmp(property, "TIMEOUT=", 8) == 0) {
-+ udev_device_set_timeout(udev_device, strtoull(&property[8], NULL, 10));
- } else if (strncmp(property, "IFINDEX=", 8) == 0) {
- udev_device_set_ifindex(udev_device, strtoull(&property[8], NULL, 10));
- } else if (strncmp(property, "DEVMODE=", 8) == 0) {
-@@ -599,6 +617,7 @@ struct udev_device *udev_device_new(struct udev *udev)
- udev_list_init(udev, &udev_device->sysattr_value_list, true);
- udev_list_init(udev, &udev_device->sysattr_list, false);
- udev_list_init(udev, &udev_device->tags_list, true);
-+ udev_device->timeout = -1;
- udev_device->watch_handle = -1;
- /* copy global properties */
- udev_list_entry_foreach(list_entry, udev_get_properties_list_entry(udev))
-diff --git a/src/libudev-private.h b/src/libudev-private.h
-index 5f5c64a..ec63b67 100644
---- a/src/libudev-private.h
-+++ b/src/libudev-private.h
-@@ -87,6 +87,7 @@ const char *udev_device_get_id_filename(struct udev_device *udev_device);
- void udev_device_set_is_initialized(struct udev_device *udev_device);
- int udev_device_add_tag(struct udev_device *udev_device, const char *tag);
- void udev_device_cleanup_tags_list(struct udev_device *udev_device);
-+int udev_device_get_timeout(struct udev_device *udev_device);
- unsigned long long udev_device_get_usec_initialized(struct udev_device *udev_device);
- void udev_device_set_usec_initialized(struct udev_device *udev_device, unsigned long long usec_initialized);
- int udev_device_get_devlink_priority(struct udev_device *udev_device);
-diff --git a/src/udevd.c b/src/udevd.c
-index 1702217..88e9272 100644
---- a/src/udevd.c
-+++ b/src/udevd.c
-@@ -401,7 +401,7 @@ out:
- }
- }
-
--static void event_run(struct event *event)
-+static void event_run(struct event *event, bool force)
- {
- struct udev_list_node *loop;
-
-@@ -427,7 +427,7 @@ static void event_run(struct event *event)
- return;
- }
-
-- if (children >= children_max) {
-+ if (!force && children >= children_max) {
- if (children_max > 1)
- info(event->udev, "maximum number (%i) of children reached\n", children);
- return;
-@@ -461,6 +461,13 @@ static int event_queue_insert(struct udev_device *dev)
-
- event->state = EVENT_QUEUED;
- udev_list_node_append(&event->node, &event_list);
-+
-+ /* run all events with a timeout set immediately */
-+ if (udev_device_get_timeout(dev) > 0) {
-+ event_run(event, true);
-+ return 0;
-+ }
-+
- return 0;
- }
-
-@@ -577,7 +584,7 @@ static void event_queue_start(struct udev *udev)
- continue;
- }
-
-- event_run(event);
-+ event_run(event, false);
- }
- }
-
---
-1.7.10
-