Date: Friday, January 20, 2012 @ 19:32:06 Author: dreisner Revision: 147038
db-move: moved udev from [testing] to [core] (x86_64) Added: udev/repos/core-x86_64/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch (from rev 147033, udev/repos/testing-x86_64/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch) udev/repos/core-x86_64/PKGBUILD (from rev 147033, udev/repos/testing-x86_64/PKGBUILD) udev/repos/core-x86_64/udev.install (from rev 147033, udev/repos/testing-x86_64/udev.install) Deleted: udev/repos/core-x86_64/81-arch.rules udev/repos/core-x86_64/PKGBUILD udev/repos/core-x86_64/udev.install udev/repos/testing-x86_64/ ----------------------------------------------------------------+ 0001-udevd-kill-hanging-event-processes-after-30-seconds.patch | 162 +++++++ 81-arch.rules | 9 PKGBUILD | 208 +++++----- udev.install | 127 +++--- 4 files changed, 334 insertions(+), 172 deletions(-) Copied: udev/repos/core-x86_64/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch (from rev 147033, udev/repos/testing-x86_64/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch) =================================================================== --- core-x86_64/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch (rev 0) +++ core-x86_64/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch 2012-01-21 00:32:06 UTC (rev 147038) @@ -0,0 +1,162 @@ +From e64fae5573e566ce4fd9b23c68ac8f3096603314 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay.siev...@vrfy.org> +Date: Wed, 18 Jan 2012 05:06:18 +0100 +Subject: [PATCH] udevd: kill hanging event processes after 30 seconds + +Some broken kernel drivers load firmware synchronously in the module init +path and block modprobe until the firmware request is fulfilled. + +The modprobe-generated firmware request is a direct child device of the +device which caused modprobe to run. Child device event are blocked until +the parent device is handled. This dead-locks until the kernel firmware +loading timeout of 60 seconds is reached. + +The hanging modprobe event should now time-out and allow the firmware +event to run before the 60 second kernel timeout. +--- + src/udev-event.c | 2 +- + src/udevd.c | 62 +++++++++++++++++++++++++++++++++++++++++++---------- + 2 files changed, 51 insertions(+), 13 deletions(-) + +diff --git a/src/udev-event.c b/src/udev-event.c +index 9bdc518..f0b9548 100644 +--- a/src/udev-event.c ++++ b/src/udev-event.c +@@ -49,7 +49,7 @@ struct udev_event *udev_event_new(struct udev_device *dev) + udev_list_init(udev, &event->run_list, false); + event->fd_signal = -1; + event->birth_usec = now_usec(); +- event->timeout_usec = 60 * 1000 * 1000; ++ event->timeout_usec = 30 * 1000 * 1000; + dbg(event->udev, "allocated event %p\n", event); + return event; + } +diff --git a/src/udevd.c b/src/udevd.c +index 11ab19a..77a1e79 100644 +--- a/src/udevd.c ++++ b/src/udevd.c +@@ -133,6 +133,7 @@ struct worker { + struct udev_monitor *monitor; + enum worker_state state; + struct event *event; ++ unsigned long long event_start_usec; + }; + + /* passed from worker to main process */ +@@ -372,6 +373,7 @@ out: + close(fd_inotify); + close(worker_watch[WRITE_END]); + udev_rules_unref(rules); ++ udev_builtin_exit(udev); + udev_monitor_unref(worker_monitor); + udev_unref(udev); + udev_log_close(); +@@ -389,6 +391,7 @@ out: + worker->monitor = worker_monitor; + worker->pid = pid; + worker->state = WORKER_RUNNING; ++ worker->event_start_usec = now_usec(); + worker->event = event; + event->state = EVENT_RUNNING; + udev_list_node_append(&worker->node, &worker_list); +@@ -419,6 +422,7 @@ static void event_run(struct event *event) + worker_ref(worker); + worker->event = event; + worker->state = WORKER_RUNNING; ++ worker->event_start_usec = now_usec(); + event->state = EVENT_RUNNING; + return; + } +@@ -610,9 +614,11 @@ static void worker_returned(int fd_worker) + continue; + + /* worker returned */ +- worker->event->exitcode = msg.exitcode; +- event_queue_delete(worker->event, true); +- worker->event = NULL; ++ if (worker->event) { ++ worker->event->exitcode = msg.exitcode; ++ event_queue_delete(worker->event, true); ++ worker->event = NULL; ++ } + if (worker->state != WORKER_KILLED) + worker->state = WORKER_IDLE; + worker_unref(worker); +@@ -796,7 +802,7 @@ static void handle_signal(struct udev *udev, int signo) + } + + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { +- if (worker->event != NULL) { ++ if (worker->event) { + err(udev, "worker [%u] failed while handling '%s'\n", + pid, worker->event->devpath); + worker->event->exitcode = -32; +@@ -1574,25 +1580,57 @@ int main(int argc, char *argv[]) + break; + + /* timeout at exit for workers to finish */ +- timeout = 60 * 1000; +- } else if (udev_list_node_is_empty(&event_list) && children > 2) { +- /* set timeout to kill idle workers */ +- timeout = 3 * 1000; +- } else { ++ timeout = 30 * 1000; ++ } else if (udev_list_node_is_empty(&event_list) && children <= 2) { ++ /* we are idle */ + timeout = -1; ++ } else { ++ /* kill idle or hanging workers */ ++ timeout = 3 * 1000; + } + fdcount = epoll_wait(fd_ep, ev, ARRAY_SIZE(ev), timeout); + if (fdcount < 0) + continue; + + if (fdcount == 0) { ++ struct udev_list_node *loop; ++ ++ /* timeout */ + if (udev_exit) { +- info(udev, "timeout, giving up waiting for workers to finish\n"); ++ err(udev, "timeout, giving up waiting for workers to finish\n"); + break; + } + +- /* timeout - kill idle workers */ +- worker_kill(udev, 2); ++ /* kill idle workers */ ++ if (udev_list_node_is_empty(&event_list)) { ++ info(udev, "cleanup idle workers\n"); ++ worker_kill(udev, 2); ++ } ++ ++ /* check for hanging events */ ++ udev_list_node_foreach(loop, &worker_list) { ++ struct worker *worker = node_to_worker(loop); ++ ++ if (worker->state != WORKER_RUNNING) ++ continue; ++ ++ if ((now_usec() - worker->event_start_usec) > 30 * 1000 * 1000) { ++ err(udev, "worker [%u] timeout, kill it\n", worker->pid, ++ worker->event ? worker->event->devpath : "<idle>"); ++ kill(worker->pid, SIGKILL); ++ worker->state = WORKER_KILLED; ++ /* drop reference taken for state 'running' */ ++ worker_unref(worker); ++ if (worker->event) { ++ err(udev, "seq %llu '%s' killed\n", ++ udev_device_get_seqnum(worker->event->dev), worker->event->devpath); ++ worker->event->exitcode = -64; ++ event_queue_delete(worker->event, true); ++ worker->event = NULL; ++ } ++ } ++ } ++ + } + + is_worker = is_signal = is_inotify = is_netlink = is_ctrl = false; +-- +1.7.8.3 + Deleted: core-x86_64/81-arch.rules =================================================================== --- core-x86_64/81-arch.rules 2012-01-21 00:32:04 UTC (rev 147037) +++ core-x86_64/81-arch.rules 2012-01-21 00:32:06 UTC (rev 147038) @@ -1,9 +0,0 @@ -# do not edit this file, it will be overwritten on update -# this file is going away in the near future - -# this might belong in <http://aur.archlinux.org/packages.php?ID=22698> -# see also /usr/src/*/Documentation/laptops/sonypi.txt -KERNEL=="sonypi", MODE="0666" - -# this might belong in <https://aur.archlinux.org/packages.php?ID=18393> -KERNEL=="legousbtower*", MODE="0666" Deleted: core-x86_64/PKGBUILD =================================================================== --- core-x86_64/PKGBUILD 2012-01-21 00:32:04 UTC (rev 147037) +++ core-x86_64/PKGBUILD 2012-01-21 00:32:06 UTC (rev 147038) @@ -1,101 +0,0 @@ -# $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> - -pkgbase="udev" -pkgname=('udev' 'udev-compat') -pkgver=175 -pkgrel=1 -arch=(i686 x86_64) -url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" -license=('GPL') -groups=('base') -options=(!makeflags !libtool) -makedepends=('gobject-introspection' 'gperf') -#source=(http://www.kernel.org/pub/linux/utils/kernel/hotplug/$pkgbase-$pkgver.tar.bz2 -source=(http://people.freedesktop.org/~kay/udev/$pkgbase-$pkgver.tar.bz2 - 81-arch.rules) - -build() { - cd $srcdir/$pkgbase-$pkgver - - ./configure --sysconfdir=/etc\ - --with-rootlibdir=/lib\ - --libexecdir=/lib/udev\ - --sbindir=/sbin\ - --with-systemdsystemunitdir=/lib/systemd/system\ - --disable-rule-generator\ - --enable-udev_acl - - make -} - -package_udev() { - pkgdesc="The userspace dev tools (udev)" - depends=('util-linux' 'libusb-compat' 'glib2' 'module-init-tools' 'pciutils') - install=udev.install - backup=(etc/udev/udev.conf) - conflicts=('pcmcia-cs' 'hotplug' 'initscripts<2009.07') - replaces=('devfsd') - - cd $srcdir/$pkgbase-$pkgver - make DESTDIR=${pkgdir} install - # Install our rule for permissions and symlinks - install -D -m644 $srcdir/81-arch.rules $pkgdir/lib/udev/rules.d/81-arch.rules - - # create framebuffer blacklist - mkdir -p $pkgdir/lib/modprobe.d/ - for mod in $(find /lib/modules/*/kernel/drivers/video -name '*fb.ko.gz' -exec basename {} .ko.gz \;); do - echo "blacklist $mod" - done | sort -u > $pkgdir/lib/modprobe.d/framebuffer_blacklist.conf - - # /dev/loop0 is created for convenience, to autoload the module if necessary - # may be obsoleted by https://lkml.org/lkml/2011/7/30/111 - mknod -m 0660 ${pkgdir}/lib/udev/devices/loop0 b 7 0 - chgrp disk ${pkgdir}/lib/udev/devices/loop0 - - # udevd moved, symlink to make life easy for restarting udevd manually - ln -s /lib/udev/udevd ${pkgdir}/sbin/udevd - - # Replace dialout/tape/cdrom group in rules with uucp/storage/optical group - for i in $pkgdir/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 -} - -package_udev-compat() { - pkgdesc="The userspace dev tools (udev) - additional rules for older kernels" - depends=('udev') - groups=('') - cd $srcdir/$pkgbase-$pkgver - install -d -m755 ${pkgdir}/lib/${pkgbase}/rules.d - install -D -m644 ${srcdir}/${pkgbase}-${pkgver}/rules/misc/30-kernel-compat.rules ${pkgdir}/lib/udev/rules.d/30-kernel-compat.rules - # create static devices in /lib/udev/devices/ - mkdir -p ${pkgdir}/lib/udev/devices/{pts,shm} - - mknod -m 0600 ${pkgdir}/lib/udev/devices/console c 5 1 - mknod -m 0666 ${pkgdir}/lib/udev/devices/null c 1 3 - mknod -m 0660 ${pkgdir}/lib/udev/devices/zero c 1 5 - mknod -m 0666 ${pkgdir}/lib/udev/devices/kmsg c 1 11 - - ln -snf /proc/self/fd ${pkgdir}/lib/udev/devices/fd - ln -snf /proc/self/fd/0 ${pkgdir}/lib/udev/devices/stdin - ln -snf /proc/self/fd/1 ${pkgdir}/lib/udev/devices/stdout - ln -snf /proc/self/fd/2 ${pkgdir}/lib/udev/devices/stderr - ln -snf /proc/kcore ${pkgdir}/lib/udev/devices/core - - # these static devices are created for convenience, to autoload the modules if necessary - # /dev/net/tun - mkdir ${pkgdir}/lib/udev/devices/net - mknod -m 0666 ${pkgdir}/lib/udev/devices/net/tun c 10 200 - # /dev/fuse - mknod -m 0666 ${pkgdir}/lib/udev/devices/fuse c 10 229 - # /dev/ppp - mknod -m 0600 ${pkgdir}/lib/udev/devices/ppp c 108 0 -} -md5sums=('2fc9c1efcbde98e3d73ffee7a77aea47' - '3da2bb9891592f9438a07bd641465531') Copied: udev/repos/core-x86_64/PKGBUILD (from rev 147033, udev/repos/testing-x86_64/PKGBUILD) =================================================================== --- core-x86_64/PKGBUILD (rev 0) +++ core-x86_64/PKGBUILD 2012-01-21 00:32:06 UTC (rev 147038) @@ -0,0 +1,107 @@ +# $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> + +pkgbase="udev" +pkgname=('udev' 'udev-compat') +pkgver=177 +pkgrel=3 +arch=(i686 x86_64) +url="http://git.kernel.org/?p=linux/hotplug/udev.git;a=summary" +license=('GPL') +groups=('base') +options=(!makeflags !libtool) +makedepends=('gobject-introspection' 'gperf' 'libxslt' 'usbutils' 'kmod') +source=(ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/$pkgbase-$pkgver.tar.xz + 0001-udevd-kill-hanging-event-processes-after-30-seconds.patch) + +build() { + cd $srcdir/$pkgbase-$pkgver + + # deal with broken drivers waiting for firmware to be loaded + patch -p1 -i ../0001-udevd-kill-hanging-event-processes-after-30-seconds.patch + + ./configure --prefix=/usr \ + --with-rootprefix= \ + --sysconfdir=/etc \ + --bindir=/sbin \ + --libdir=/usr/lib \ + --with-rootlibdir=/lib \ + --libexecdir=/lib \ + --with-systemdsystemunitdir=/lib/systemd/system \ + --enable-udev_acl + + make +} + +package_udev() { + pkgdesc="The userspace dev tools (udev)" + depends=('util-linux' 'libusb-compat' 'glib2' 'kmod' 'pciutils' 'usbutils' 'pciutils') + install=udev.install + backup=(etc/udev/udev.conf) + + cd $srcdir/$pkgbase-$pkgver + make DESTDIR=${pkgdir} install + + # create framebuffer blacklist + install -d -m755 ${pkgdir}/lib/modprobe.d/ + for mod in $(find /lib/modules/*/kernel/drivers/video -name '*fb.ko.gz' -exec basename {} .ko.gz \;); do + echo "blacklist $mod" + done | sort -u > $pkgdir/lib/modprobe.d/framebuffer_blacklist.conf + + # /dev/loop0 is created for convenience, to autoload the module if necessary + # this is no longer needed when util-linux-2.21 is released as /dev/loop-control + # will be used instead. In that case move this to udev-compat + install -d -m755 ${pkgdir}/lib/udev/devices/ + mknod ${pkgdir}/lib/udev/devices/loop0 b 7 0 + chgrp disk ${pkgdir}/lib/udev/devices/loop0 + + # udevd moved, symlink to make life easy for restarting udevd manually + ln -s /lib/udev/udevd ${pkgdir}/sbin/udevd + + # Replace dialout/tape/cdrom group in rules with uucp/storage/optical group + for i in $pkgdir/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 +} + +package_udev-compat() { + pkgdesc="The userspace dev tools (udev) - additional rules for older kernels" + depends=('udev') + groups=('') + install -d -m755 ${pkgdir}/lib/udev/rules.d + install -D -m644 ${srcdir}/${pkgbase}-${pkgver}/rules/misc/30-kernel-compat.rules ${pkgdir}/lib/udev/rules.d/30-kernel-compat.rules + + # create static nodes to be compatible with on-demand module + # loading in the most recent kernel + # + # the list of nodes is generated from /lib/modules/`most recent kernel`/modprobe.devname + # excluding any devices not included in the LTS kernel and any entries in the + # modprobe.devname file of the LTS kernel (if it exists). + + install -d -m755 ${pkgdir}/lib/udev/devices + cd ${pkgdir}/lib/udev/devices + + install -d -m755 net + mknod net/tun c 10 200 + mknod ppp c 108 0 +# mknod loop-control c 10 237 -- does not exist in old kernels + mknod uinput c 10 223 + install -d -m755 mapper + mknod mapper/control c 10 236 + install -d -m755 snd + mknod snd/timer c 116 33 + mknod snd/seq c 116 1 + mknod btrfs-control c 10 234 + mknod autofs c 10 235 + mknod fuse c 10 229 + install -d -m755 cpu + mknod cpu/microcode c 10 184 + +} +md5sums=('b4e00faf8153fd7202a7ef609284b0c3' + '3e40dca1c4f8194b4633e3befb4da4d4') Deleted: core-x86_64/udev.install =================================================================== --- core-x86_64/udev.install 2012-01-21 00:32:04 UTC (rev 147037) +++ core-x86_64/udev.install 2012-01-21 00:32:06 UTC (rev 147038) @@ -1,62 +0,0 @@ -# arg 1: the new package version -# arg 2: the old package version - -post_upgrade() { - if [ "$(vercmp $2 174)" -lt 0 ]; then - echo "ATTENTION UDEV:" - echo "----------" - if [ "$(vercmp $2 168)" -lt 0 ]; then - echo "Kernel 2.6.32 or newer is now required." - echo " --" - echo "OSS emulation modules are not loaded by default, add to rc.conf if needed." - echo " --" - echo "Arch specific cd symlinks are now no longer created." - echo " --" - echo "cd and net persistent rules will no longer be autogenerated," - echo "see <https://wiki.archlinux.org/index.php/Udev> for details." - echo " --" - echo "Errors are now logged (possibly to the console) by default." - echo " --" - 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 " --" - 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." - echo " --" - fi - if [ "$(vercmp $2 172)" -lt 0 ]; then - echo "Support for non-devtmpfs self-compiled kernels have been moved to udev-compat." - echo " --" - 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 " --" - echo "kbd and rtc devices are no longer world readable." - echo " --" - 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." - echo " --" - fi - echo "We now use upstream rules for assigning devices to the 'disk', 'optical'," - echo "'scanner' and 'video' groups. Beware of any changes." - echo " --" - echo "We no longer create symlinks from /dev/<dev> to /dev/<dev>0." - echo " --" - 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 " --" - echo "We no longer create the static nodes on install needed for an initrd-less and" - echo "devtmpfs-less boot, this only affects fresh installs." - echo "---------------" - fi -} Copied: udev/repos/core-x86_64/udev.install (from rev 147033, udev/repos/testing-x86_64/udev.install) =================================================================== --- core-x86_64/udev.install (rev 0) +++ core-x86_64/udev.install 2012-01-21 00:32:06 UTC (rev 147038) @@ -0,0 +1,65 @@ +# arg 1: the new package version +# arg 2: the old package version + +post_upgrade() { + if [ "$(vercmp $2 175)" -lt 0 ]; then + echo "ATTENTION UDEV:" + echo "----------" + if [ "$(vercmp $2 168)" -lt 0 ]; then + echo "Kernel 2.6.32 or newer is now required." + echo " --" + echo "OSS emulation modules are not loaded by default, add to rc.conf if needed." + echo " --" + echo "Arch specific cd symlinks are now no longer created." + echo " --" + echo "cd and net persistent rules will no longer be autogenerated," + echo "see <https://wiki.archlinux.org/index.php/Udev> for details." + echo " --" + echo "Errors are now logged (possibly to the console) by default." + echo " --" + 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 " --" + 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." + echo " --" + 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 " --" + echo "kbd and rtc devices are no longer world readable." + echo " --" + 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." + echo " --" + 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 " --" + echo "We no longer create symlinks from /dev/<dev> to /dev/<dev>0." + echo " --" + 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 " --" + echo "We no longer create the static nodes on install needed for an initrd-less boot" + echo "where devtmpfs is not mounted by the kernel, this only affects fresh installs." + echo " --" + fi + echo "devtmpfs support is now a hard requirement. Users of the official Arch kernels" + echo "have this enabled." + echo "---------------" + fi +}