linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: udevd - shorten initial timout after startup
Date: Sun, 26 Dec 2004 03:01:36 +0000	[thread overview]
Message-ID: <1104030096.5805.22.camel@localhost.localdomain> (raw)

[-- Attachment #1: Type: text/plain, Size: 450 bytes --]

If udevd manages the hotplug events we need to limit the initial
timeout. With this change we wait only 2 seconds for more events to
arrive after startup and then start the event execution. After the
initialization phase we switch the timeout to wait for missing events
back to the usual 10 seconds.

This should fix the issue where the firmware_class loader reaches its
timout, cause udevd delayed the very first events for 10 seconds.

Thanks,
Kay

[-- Attachment #2: udevd-init-phase-01.patch --]
[-- Type: text/x-patch, Size: 2602 bytes --]

diff -Nru a/udevd.c b/udevd.c
--- a/udevd.c	2004-12-26 03:53:21 +01:00
+++ b/udevd.c	2004-12-26 03:53:21 +01:00
@@ -47,6 +47,7 @@
 static int udevsendsock;
 
 static int pipefds[2];
+static long startup_time;
 static unsigned long long expected_seqnum = 0;
 static volatile int sigchilds_waiting;
 static volatile int run_msg_q;
@@ -220,6 +221,8 @@
 	struct hotplug_msg *tmp_msg;
 	struct sysinfo info;
 	long msg_age = 0;
+	static int timeout = EVENT_INIT_TIMEOUT_SEC;
+	static int init = 1;
 
 	dbg("msg queue manager, next expected is %llu", expected_seqnum);
 recheck:
@@ -230,11 +233,18 @@
 			continue;
 		}
 
+		/* see if we are in the initialization phase and wait for the very first events */
+		if (init && (info.uptime - startup_time >= INIT_TIME_SEC)) {
+			init = 0;
+			timeout = EVENT_TIMEOUT_SEC;
+			dbg("initialization phase passed, set timeout to %i seconds", EVENT_TIMEOUT_SEC);
+		}
+
 		/* move event with expired timeout to the exec list */
 		sysinfo(&info);
 		msg_age = info.uptime - loop_msg->queue_time;
 		dbg("seq %llu is %li seconds old", loop_msg->seqnum, msg_age);
-		if (msg_age > EVENT_TIMEOUT_SEC-1) {
+		if (msg_age >= timeout) {
 			msg_move_exec(loop_msg);
 			goto recheck;
 		} else {
@@ -246,8 +256,8 @@
 
 	/* set timeout for remaining queued events */
 	if (list_empty(&msg_list) == 0) {
-		struct itimerval itv = {{0, 0}, {EVENT_TIMEOUT_SEC - msg_age, 0}};
-		dbg("next event expires in %li seconds", EVENT_TIMEOUT_SEC - msg_age);
+		struct itimerval itv = {{0, 0}, {timeout - msg_age, 0}};
+		dbg("next event expires in %li seconds", timeout - msg_age);
 		setitimer(ITIMER_REAL, &itv, NULL);
 	}
 }
@@ -429,6 +439,7 @@
 
 int main(int argc, char *argv[], char *envp[])
 {
+	struct sysinfo info;
 	int maxsockplus;
 	struct sockaddr_un saddr;
 	socklen_t addrlen;
@@ -531,6 +542,10 @@
 		dbg("udev binary is set to '%s'", udev_bin);
 	else
 		udev_bin = UDEV_BIN;
+
+	/* handle special startup timeout*/
+	sysinfo(&info);
+	startup_time = info.uptime;
 
 	FD_ZERO(&readfds);
 	FD_SET(udevsendsock, &readfds);
diff -Nru a/udevd.h b/udevd.h
--- a/udevd.h	2004-12-26 03:53:21 +01:00
+++ b/udevd.h	2004-12-26 03:53:21 +01:00
@@ -25,10 +25,12 @@
 #include "list.h"
 
 #define UDEV_MAGIC			"udevd_" UDEV_VERSION
-#define EVENT_TIMEOUT_SEC		10
 #define UDEVD_SOCK_PATH			"udevd"
 #define SEND_WAIT_MAX_SECONDS		3
 #define SEND_WAIT_LOOP_PER_SECOND	10
+#define INIT_TIME_SEC			5
+#define EVENT_INIT_TIMEOUT_SEC		2
+#define EVENT_TIMEOUT_SEC		10
 
 /* environment buffer, should match the kernel's size in lib/kobject_uevent.h */
 #define HOTPLUG_BUFFER_SIZE		1024

                 reply	other threads:[~2004-12-26  3:01 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1104030096.5805.22.camel@localhost.localdomain \
    --to=kay.sievers@vrfy.org \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).