Date: Saturday, March 31, 2012 @ 10:34:19 Author: tomegun Revision: 154947
archrelease: copy trunk to staging-i686, staging-x86_64 Added: udev/repos/staging-i686/ udev/repos/staging-i686/0001-split-usr-always-read-config-files-from-lib-udev.patch (from rev 154946, udev/trunk/0001-split-usr-always-read-config-files-from-lib-udev.patch) udev/repos/staging-i686/0002-reinstate-TIMEOUT-handling.patch (from rev 154946, udev/trunk/0002-reinstate-TIMEOUT-handling.patch) udev/repos/staging-i686/PKGBUILD (from rev 154946, udev/trunk/PKGBUILD) udev/repos/staging-i686/initcpio-hooks-udev (from rev 154946, udev/trunk/initcpio-hooks-udev) udev/repos/staging-i686/initcpio-install-udev (from rev 154946, udev/trunk/initcpio-install-udev) udev/repos/staging-i686/udev.install (from rev 154946, udev/trunk/udev.install) udev/repos/staging-x86_64/ udev/repos/staging-x86_64/0001-split-usr-always-read-config-files-from-lib-udev.patch (from rev 154946, udev/trunk/0001-split-usr-always-read-config-files-from-lib-udev.patch) udev/repos/staging-x86_64/0002-reinstate-TIMEOUT-handling.patch (from rev 154946, udev/trunk/0002-reinstate-TIMEOUT-handling.patch) udev/repos/staging-x86_64/PKGBUILD (from rev 154946, udev/trunk/PKGBUILD) udev/repos/staging-x86_64/initcpio-hooks-udev (from rev 154946, udev/trunk/initcpio-hooks-udev) udev/repos/staging-x86_64/initcpio-install-udev (from rev 154946, udev/trunk/initcpio-install-udev) udev/repos/staging-x86_64/udev.install (from rev 154946, udev/trunk/udev.install) ----------------------------------------------------------------------------+ staging-i686/0001-split-usr-always-read-config-files-from-lib-udev.patch | 61 ++++ staging-i686/0002-reinstate-TIMEOUT-handling.patch | 146 ++++++++++ staging-i686/PKGBUILD | 72 ++++ staging-i686/initcpio-hooks-udev | 9 staging-i686/initcpio-install-udev | 26 + staging-i686/udev.install | 59 ++++ staging-x86_64/0001-split-usr-always-read-config-files-from-lib-udev.patch | 61 ++++ staging-x86_64/0002-reinstate-TIMEOUT-handling.patch | 146 ++++++++++ staging-x86_64/PKGBUILD | 72 ++++ staging-x86_64/initcpio-hooks-udev | 9 staging-x86_64/initcpio-install-udev | 26 + staging-x86_64/udev.install | 59 ++++ 12 files changed, 746 insertions(+) Copied: udev/repos/staging-i686/0001-split-usr-always-read-config-files-from-lib-udev.patch (from rev 154946, udev/trunk/0001-split-usr-always-read-config-files-from-lib-udev.patch) =================================================================== --- staging-i686/0001-split-usr-always-read-config-files-from-lib-udev.patch (rev 0) +++ staging-i686/0001-split-usr-always-read-config-files-from-lib-udev.patch 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,61 @@ +From 4c55c8d844e6f1a5b1f14cce23b247134bfd3a8d Mon Sep 17 00:00:00 2001 +From: Tom Gundersen <t...@jklm.no> +Date: Sat, 3 Mar 2012 12:28:15 +0100 +Subject: [PATCH 1/2] split /usr: always read config files from /lib/udev + +This means we don't need a flagday in order to move udev to use +/usr/lib/udev/rules.d +--- + src/libudev.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +diff --git a/src/libudev.c b/src/libudev.c +index be24329..0359bb4 100644 +--- a/src/libudev.c ++++ b/src/libudev.c +@@ -255,21 +255,26 @@ UDEV_EXPORT struct udev *udev_new(void) + goto err; + + if (udev->rules_path[0] == NULL) { +- /* /usr/lib/udev -- system rules */ +- udev->rules_path[0] = strdup(PKGLIBEXECDIR "/rules.d"); ++ /* /lib/udev -- compat for system rules */ ++ udev->rules_path[0] = strdup("/lib/udev/rules.d"); + if (!udev->rules_path[0]) ++ goto err; ++ ++ /* /usr/lib/udev -- system rules */ ++ udev->rules_path[1] = strdup(PKGLIBEXECDIR "/rules.d"); ++ if (!udev->rules_path[1]) + goto err; + + /* /etc/udev -- local administration rules */ +- udev->rules_path[1] = strdup(SYSCONFDIR "/udev/rules.d"); +- if (!udev->rules_path[1]) ++ udev->rules_path[2] = strdup(SYSCONFDIR "/udev/rules.d"); ++ if (!udev->rules_path[2]) + goto err; + + /* /run/udev -- runtime rules */ +- if (asprintf(&udev->rules_path[2], "%s/rules.d", udev->run_path) < 0) ++ if (asprintf(&udev->rules_path[3], "%s/rules.d", udev->run_path) < 0) + goto err; + +- udev->rules_path_count = 3; ++ udev->rules_path_count = 4; + } + + dbg(udev, "context %p created\n", udev); +@@ -278,7 +283,8 @@ UDEV_EXPORT struct udev *udev_new(void) + dbg(udev, "dev_path='%s'\n", udev->dev_path); + dbg(udev, "sys_path='%s'\n", udev->sys_path); + dbg(udev, "run_path='%s'\n", udev->run_path); +- dbg(udev, "rules_path='%s':'%s':'%s'\n", udev->rules_path[0], udev->rules_path[1], udev->rules_path[2]); ++ dbg(udev, "rules_path='%s':'%s':'%s':'%s'\n", udev->rules_path[0], udev->rules_path[1], ++ udev->rules_path[2], udev->rules_path[3]); + free(config_file); + return udev; + err: +-- +1.7.9.5 + Copied: udev/repos/staging-i686/0002-reinstate-TIMEOUT-handling.patch (from rev 154946, udev/trunk/0002-reinstate-TIMEOUT-handling.patch) =================================================================== --- staging-i686/0002-reinstate-TIMEOUT-handling.patch (rev 0) +++ staging-i686/0002-reinstate-TIMEOUT-handling.patch 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,146 @@ +From 0a581062ee3e31e0c2aedc5eb64c60f52868b17f Mon Sep 17 00:00:00 2001 +From: Tom Gundersen <t...@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 36e8440..c2e59b6 100644 +--- a/TODO ++++ b/TODO +@@ -1,6 +1,8 @@ + - find a way to tell udev to not cancel firmware + requests in initramfs + ++ - remove TIMEOUT= handling ++ + - move /lib/udev/devices/ to tmpfiles + + - trigger --subsystem-match=usb/usb_device +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.9.5 + Copied: udev/repos/staging-i686/PKGBUILD (from rev 154946, udev/trunk/PKGBUILD) =================================================================== --- staging-i686/PKGBUILD (rev 0) +++ staging-i686/PKGBUILD 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,72 @@ +# $Id$ +# Maintainer: Tom Gundersen <t...@jklm.no> +# Contributor: Aaron Griffin <aa...@archlinux.org> +# Contributor: Tobias Powalowski <tp...@archlinux.org> +# Contributor: Thomas Bächler <tho...@archlinux.org> + +pkgname=udev +pkgver=181 +pkgrel=6 +pkgdesc="The userspace dev tools (udev)" +depends=('util-linux' 'glib2' 'kmod' 'pciutils' 'usbutils' 'bash' 'acl') +install=udev.install +arch=(i686 x86_64) +license=('GPL') +makedepends=('gobject-introspection' 'gperf' 'libxslt') +source=(ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/$pkgname-$pkgver.tar.xz + 0001-split-usr-always-read-config-files-from-lib-udev.patch + 0002-reinstate-TIMEOUT-handling.patch + initcpio-hooks-udev + initcpio-install-udev) +url="http://git.kernel.org/?p=linux/hotplug/udev.git;a=summary" +backup=(etc/udev/udev.conf) +groups=('base') +options=(!makeflags !libtool) + +build() { + cd $srcdir/$pkgname-$pkgver + + patch -p1 -i ../0001-split-usr-always-read-config-files-from-lib-udev.patch + patch -p1 -i ../0002-reinstate-TIMEOUT-handling.patch + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --with-firmware-path=/usr/lib/firmware/updates:/lib/firmware/updates:/usr/lib/firmware:/lib/firmware \ + --enable-udev_acl + + make +} + +check() { + make -C "$pkgname-$pkgver" check +} + +package() { + cd $srcdir/$pkgname-$pkgver + make DESTDIR=${pkgdir} install + + # install the mkinitpcio hook + install -D -m644 ../initcpio-hooks-udev ${pkgdir}/usr/lib/initcpio/hooks/udev + install -D -m644 ../initcpio-install-udev ${pkgdir}/usr/lib/initcpio/install/udev + + # udevd moved, symlink to make life easy for restarting udevd manually + ln -s ../lib/udev/udevd ${pkgdir}/usr/bin/udevd + + # the path to udevadm is hardcoded in some places + install -d ${pkgdir}/sbin + ln -s ../usr/bin/udevadm ${pkgdir}/sbin/udevadm + + # Replace dialout/tape/cdrom group in rules with uucp/storage/optical group + for i in $pkgdir/usr/lib/udev/rules.d/*.rules; do + sed -i -e 's#GROUP="dialout"#GROUP="uucp"#g; + s#GROUP="tape"#GROUP="storage"#g; + s#GROUP="cdrom"#GROUP="optical"#g' $i + done +} +md5sums=('0d7af750702620a871b9f9b98d8ad859' + 'f27fa19645016cae732659b0f1c20f0f' + 'a9fae85491a08d7759388c605389a8c5' + 'a4dd853050bf2e0ae6b2e3d2c75499c2' + 'ee0bfe91a20fff12cc25ab1d1e024853') Copied: udev/repos/staging-i686/initcpio-hooks-udev (from rev 154946, udev/trunk/initcpio-hooks-udev) =================================================================== --- staging-i686/initcpio-hooks-udev (rev 0) +++ staging-i686/initcpio-hooks-udev 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,9 @@ +# vim: set ft=sh: +run_hook () +{ + msg -n ":: Triggering uevents..." + udevadm trigger --action=add --type=subsystems + udevadm trigger --action=add --type=devices + udevadm settle + msg "done." +} Copied: udev/repos/staging-i686/initcpio-install-udev (from rev 154946, udev/trunk/initcpio-install-udev) =================================================================== --- staging-i686/initcpio-install-udev (rev 0) +++ staging-i686/initcpio-install-udev 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,26 @@ +#!/bin/bash + +build() { + FILES="/etc/udev/udev.conf" + SCRIPT="udev" + + add_binary /lib/udev/udevd + add_binary /usr/bin/udevadm + + for rules in 50-udev-default.rules 60-persistent-storage.rules 80-drivers.rules; do + add_file "/lib/udev/rules.d/$rules" + done + for tool in ata_id scsi_id; do + add_file "/lib/udev/$tool" + done +} + +help() { + cat <<HELPEOF +This hook will use udev to create your root device node and detect the needed +modules for your root device. It is also required for firmware loading in +initramfs. It is recommended to use this hook. +HELPEOF +} + +# vim: set ft=sh ts=4 sw=4 et: Copied: udev/repos/staging-i686/udev.install (from rev 154946, udev/trunk/udev.install) =================================================================== --- staging-i686/udev.install (rev 0) +++ staging-i686/udev.install 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,59 @@ +# arg 1: the new package version +# arg 2: the old package version + +post_upgrade() { + if [ "$(vercmp $2 181-3)" -lt 0 ]; then + echo "udev changes:" + if [ "$(vercmp $2 168)" -lt 0 ]; then + echo " * Kernel 2.6.32 or newer is now required." + echo " * OSS emulation modules are not loaded by default, add to rc.conf if needed." + echo " * Arch specific cd symlinks are now no longer created." + echo " * cd and net persistent rules will no longer be autogenerated," + echo " see <https://wiki.archlinux.org/index.php/Udev> for details." + echo " * Errors are now logged (possibly to the console) by default." + fi + if [ "$(vercmp $2 171)" -lt 0 ]; then + echo " * Arch's custom blacklisting logic has been removed. MOD_AUTOLOAD and" + echo " blacklisting in MODULES no longer works." + echo " See 'man modprobe.conf' for a replacement to blacklisting." + echo " To disable a module mod1 on the kernel command line, use" + echo " mod1.disable=1" + echo " or" + echo " modprobe.blacklist=mod1" + echo " * The following modules are no longer unconditionally loaded:" + echo " pcspkr irtty-sir analog lp ppdev ide-generic" + echo " Add them to MODULES in rc.conf if you need them." + fi + if [ "$(vercmp $2 172)" -lt 0 ]; then + echo " * Blacklisting of framebuffer devices has moved from /etc/modprobe.d to" + echo " /lib/modprobe.d. Any customizations shoud be done to the file in /etc, as it" + echo " takes precedence." + echo " * kbd and rtc devices are no longer world readable." + echo " * rtc is no longer in the audio group and fb devices are no longer in" + echo " the video group, as permissions and ownership of fb devices are controlled" + echo " by X." + fi + if [ "$(vercmp $2 174)" -lt 0 ]; then + echo " * We now use upstream rules for assigning devices to the 'disk', 'optical'," + echo " 'scanner' and 'video' groups. Beware of any changes." + echo " * We no longer create symlinks from /dev/<dev> to /dev/<dev>0." + echo " * For security reasons, we no longer add devices to the 'storage' group. Use" + echo " udisks and friends, or add custom rules to /etc/udev.d/rules/, if you want" + echo " this functionality back." + echo " * We no longer create the static nodes on install needed for an initrd-less" + echo " boot where devtmpfs is not mounted by the kernel, this only affects fresh" + echo " installs." + fi + if [ "$(vercmp $2 175)" -lt 0 ]; then + echo " * devtmpfs support is now a hard requirement. Users of the official Arch" + echo " kernels have this enabled." + fi + if [ "$(vercmp $2 181)" -lt 0 ]; then + echo " * udev-compat has been removed, and should be uninstalled." + echo " * Framebuffers are no longer blacklisted by default." + echo " * binaries moved from /sbin to /usr/bin" + fi + echo " * if your kernel does not provide /dev/loop-control, you need to manually" + echo " load the 'loop' module before using losetup" + fi +} Copied: udev/repos/staging-x86_64/0001-split-usr-always-read-config-files-from-lib-udev.patch (from rev 154946, udev/trunk/0001-split-usr-always-read-config-files-from-lib-udev.patch) =================================================================== --- staging-x86_64/0001-split-usr-always-read-config-files-from-lib-udev.patch (rev 0) +++ staging-x86_64/0001-split-usr-always-read-config-files-from-lib-udev.patch 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,61 @@ +From 4c55c8d844e6f1a5b1f14cce23b247134bfd3a8d Mon Sep 17 00:00:00 2001 +From: Tom Gundersen <t...@jklm.no> +Date: Sat, 3 Mar 2012 12:28:15 +0100 +Subject: [PATCH 1/2] split /usr: always read config files from /lib/udev + +This means we don't need a flagday in order to move udev to use +/usr/lib/udev/rules.d +--- + src/libudev.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +diff --git a/src/libudev.c b/src/libudev.c +index be24329..0359bb4 100644 +--- a/src/libudev.c ++++ b/src/libudev.c +@@ -255,21 +255,26 @@ UDEV_EXPORT struct udev *udev_new(void) + goto err; + + if (udev->rules_path[0] == NULL) { +- /* /usr/lib/udev -- system rules */ +- udev->rules_path[0] = strdup(PKGLIBEXECDIR "/rules.d"); ++ /* /lib/udev -- compat for system rules */ ++ udev->rules_path[0] = strdup("/lib/udev/rules.d"); + if (!udev->rules_path[0]) ++ goto err; ++ ++ /* /usr/lib/udev -- system rules */ ++ udev->rules_path[1] = strdup(PKGLIBEXECDIR "/rules.d"); ++ if (!udev->rules_path[1]) + goto err; + + /* /etc/udev -- local administration rules */ +- udev->rules_path[1] = strdup(SYSCONFDIR "/udev/rules.d"); +- if (!udev->rules_path[1]) ++ udev->rules_path[2] = strdup(SYSCONFDIR "/udev/rules.d"); ++ if (!udev->rules_path[2]) + goto err; + + /* /run/udev -- runtime rules */ +- if (asprintf(&udev->rules_path[2], "%s/rules.d", udev->run_path) < 0) ++ if (asprintf(&udev->rules_path[3], "%s/rules.d", udev->run_path) < 0) + goto err; + +- udev->rules_path_count = 3; ++ udev->rules_path_count = 4; + } + + dbg(udev, "context %p created\n", udev); +@@ -278,7 +283,8 @@ UDEV_EXPORT struct udev *udev_new(void) + dbg(udev, "dev_path='%s'\n", udev->dev_path); + dbg(udev, "sys_path='%s'\n", udev->sys_path); + dbg(udev, "run_path='%s'\n", udev->run_path); +- dbg(udev, "rules_path='%s':'%s':'%s'\n", udev->rules_path[0], udev->rules_path[1], udev->rules_path[2]); ++ dbg(udev, "rules_path='%s':'%s':'%s':'%s'\n", udev->rules_path[0], udev->rules_path[1], ++ udev->rules_path[2], udev->rules_path[3]); + free(config_file); + return udev; + err: +-- +1.7.9.5 + Copied: udev/repos/staging-x86_64/0002-reinstate-TIMEOUT-handling.patch (from rev 154946, udev/trunk/0002-reinstate-TIMEOUT-handling.patch) =================================================================== --- staging-x86_64/0002-reinstate-TIMEOUT-handling.patch (rev 0) +++ staging-x86_64/0002-reinstate-TIMEOUT-handling.patch 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,146 @@ +From 0a581062ee3e31e0c2aedc5eb64c60f52868b17f Mon Sep 17 00:00:00 2001 +From: Tom Gundersen <t...@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 36e8440..c2e59b6 100644 +--- a/TODO ++++ b/TODO +@@ -1,6 +1,8 @@ + - find a way to tell udev to not cancel firmware + requests in initramfs + ++ - remove TIMEOUT= handling ++ + - move /lib/udev/devices/ to tmpfiles + + - trigger --subsystem-match=usb/usb_device +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.9.5 + Copied: udev/repos/staging-x86_64/PKGBUILD (from rev 154946, udev/trunk/PKGBUILD) =================================================================== --- staging-x86_64/PKGBUILD (rev 0) +++ staging-x86_64/PKGBUILD 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,72 @@ +# $Id$ +# Maintainer: Tom Gundersen <t...@jklm.no> +# Contributor: Aaron Griffin <aa...@archlinux.org> +# Contributor: Tobias Powalowski <tp...@archlinux.org> +# Contributor: Thomas Bächler <tho...@archlinux.org> + +pkgname=udev +pkgver=181 +pkgrel=6 +pkgdesc="The userspace dev tools (udev)" +depends=('util-linux' 'glib2' 'kmod' 'pciutils' 'usbutils' 'bash' 'acl') +install=udev.install +arch=(i686 x86_64) +license=('GPL') +makedepends=('gobject-introspection' 'gperf' 'libxslt') +source=(ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/$pkgname-$pkgver.tar.xz + 0001-split-usr-always-read-config-files-from-lib-udev.patch + 0002-reinstate-TIMEOUT-handling.patch + initcpio-hooks-udev + initcpio-install-udev) +url="http://git.kernel.org/?p=linux/hotplug/udev.git;a=summary" +backup=(etc/udev/udev.conf) +groups=('base') +options=(!makeflags !libtool) + +build() { + cd $srcdir/$pkgname-$pkgver + + patch -p1 -i ../0001-split-usr-always-read-config-files-from-lib-udev.patch + patch -p1 -i ../0002-reinstate-TIMEOUT-handling.patch + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --with-firmware-path=/usr/lib/firmware/updates:/lib/firmware/updates:/usr/lib/firmware:/lib/firmware \ + --enable-udev_acl + + make +} + +check() { + make -C "$pkgname-$pkgver" check +} + +package() { + cd $srcdir/$pkgname-$pkgver + make DESTDIR=${pkgdir} install + + # install the mkinitpcio hook + install -D -m644 ../initcpio-hooks-udev ${pkgdir}/usr/lib/initcpio/hooks/udev + install -D -m644 ../initcpio-install-udev ${pkgdir}/usr/lib/initcpio/install/udev + + # udevd moved, symlink to make life easy for restarting udevd manually + ln -s ../lib/udev/udevd ${pkgdir}/usr/bin/udevd + + # the path to udevadm is hardcoded in some places + install -d ${pkgdir}/sbin + ln -s ../usr/bin/udevadm ${pkgdir}/sbin/udevadm + + # Replace dialout/tape/cdrom group in rules with uucp/storage/optical group + for i in $pkgdir/usr/lib/udev/rules.d/*.rules; do + sed -i -e 's#GROUP="dialout"#GROUP="uucp"#g; + s#GROUP="tape"#GROUP="storage"#g; + s#GROUP="cdrom"#GROUP="optical"#g' $i + done +} +md5sums=('0d7af750702620a871b9f9b98d8ad859' + 'f27fa19645016cae732659b0f1c20f0f' + 'a9fae85491a08d7759388c605389a8c5' + 'a4dd853050bf2e0ae6b2e3d2c75499c2' + 'ee0bfe91a20fff12cc25ab1d1e024853') Copied: udev/repos/staging-x86_64/initcpio-hooks-udev (from rev 154946, udev/trunk/initcpio-hooks-udev) =================================================================== --- staging-x86_64/initcpio-hooks-udev (rev 0) +++ staging-x86_64/initcpio-hooks-udev 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,9 @@ +# vim: set ft=sh: +run_hook () +{ + msg -n ":: Triggering uevents..." + udevadm trigger --action=add --type=subsystems + udevadm trigger --action=add --type=devices + udevadm settle + msg "done." +} Copied: udev/repos/staging-x86_64/initcpio-install-udev (from rev 154946, udev/trunk/initcpio-install-udev) =================================================================== --- staging-x86_64/initcpio-install-udev (rev 0) +++ staging-x86_64/initcpio-install-udev 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,26 @@ +#!/bin/bash + +build() { + FILES="/etc/udev/udev.conf" + SCRIPT="udev" + + add_binary /lib/udev/udevd + add_binary /usr/bin/udevadm + + for rules in 50-udev-default.rules 60-persistent-storage.rules 80-drivers.rules; do + add_file "/lib/udev/rules.d/$rules" + done + for tool in ata_id scsi_id; do + add_file "/lib/udev/$tool" + done +} + +help() { + cat <<HELPEOF +This hook will use udev to create your root device node and detect the needed +modules for your root device. It is also required for firmware loading in +initramfs. It is recommended to use this hook. +HELPEOF +} + +# vim: set ft=sh ts=4 sw=4 et: Copied: udev/repos/staging-x86_64/udev.install (from rev 154946, udev/trunk/udev.install) =================================================================== --- staging-x86_64/udev.install (rev 0) +++ staging-x86_64/udev.install 2012-03-31 14:34:19 UTC (rev 154947) @@ -0,0 +1,59 @@ +# arg 1: the new package version +# arg 2: the old package version + +post_upgrade() { + if [ "$(vercmp $2 181-3)" -lt 0 ]; then + echo "udev changes:" + if [ "$(vercmp $2 168)" -lt 0 ]; then + echo " * Kernel 2.6.32 or newer is now required." + echo " * OSS emulation modules are not loaded by default, add to rc.conf if needed." + echo " * Arch specific cd symlinks are now no longer created." + echo " * cd and net persistent rules will no longer be autogenerated," + echo " see <https://wiki.archlinux.org/index.php/Udev> for details." + echo " * Errors are now logged (possibly to the console) by default." + fi + if [ "$(vercmp $2 171)" -lt 0 ]; then + echo " * Arch's custom blacklisting logic has been removed. MOD_AUTOLOAD and" + echo " blacklisting in MODULES no longer works." + echo " See 'man modprobe.conf' for a replacement to blacklisting." + echo " To disable a module mod1 on the kernel command line, use" + echo " mod1.disable=1" + echo " or" + echo " modprobe.blacklist=mod1" + echo " * The following modules are no longer unconditionally loaded:" + echo " pcspkr irtty-sir analog lp ppdev ide-generic" + echo " Add them to MODULES in rc.conf if you need them." + fi + if [ "$(vercmp $2 172)" -lt 0 ]; then + echo " * Blacklisting of framebuffer devices has moved from /etc/modprobe.d to" + echo " /lib/modprobe.d. Any customizations shoud be done to the file in /etc, as it" + echo " takes precedence." + echo " * kbd and rtc devices are no longer world readable." + echo " * rtc is no longer in the audio group and fb devices are no longer in" + echo " the video group, as permissions and ownership of fb devices are controlled" + echo " by X." + fi + if [ "$(vercmp $2 174)" -lt 0 ]; then + echo " * We now use upstream rules for assigning devices to the 'disk', 'optical'," + echo " 'scanner' and 'video' groups. Beware of any changes." + echo " * We no longer create symlinks from /dev/<dev> to /dev/<dev>0." + echo " * For security reasons, we no longer add devices to the 'storage' group. Use" + echo " udisks and friends, or add custom rules to /etc/udev.d/rules/, if you want" + echo " this functionality back." + echo " * We no longer create the static nodes on install needed for an initrd-less" + echo " boot where devtmpfs is not mounted by the kernel, this only affects fresh" + echo " installs." + fi + if [ "$(vercmp $2 175)" -lt 0 ]; then + echo " * devtmpfs support is now a hard requirement. Users of the official Arch" + echo " kernels have this enabled." + fi + if [ "$(vercmp $2 181)" -lt 0 ]; then + echo " * udev-compat has been removed, and should be uninstalled." + echo " * Framebuffers are no longer blacklisted by default." + echo " * binaries moved from /sbin to /usr/bin" + fi + echo " * if your kernel does not provide /dev/loop-control, you need to manually" + echo " load the 'loop' module before using losetup" + fi +}