summaryrefslogtreecommitdiff
path: root/testing/udev
diff options
context:
space:
mode:
Diffstat (limited to 'testing/udev')
-rw-r--r--testing/udev/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch162
-rw-r--r--testing/udev/PKGBUILD102
-rw-r--r--testing/udev/udev.install65
3 files changed, 0 insertions, 329 deletions
diff --git a/testing/udev/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch b/testing/udev/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch
deleted file mode 100644
index 3ff89ae43..000000000
--- a/testing/udev/0001-udevd-kill-hanging-event-processes-after-30-seconds.patch
+++ /dev/null
@@ -1,162 +0,0 @@
-From e64fae5573e566ce4fd9b23c68ac8f3096603314 Mon Sep 17 00:00:00 2001
-From: Kay Sievers <kay.sievers@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
-
diff --git a/testing/udev/PKGBUILD b/testing/udev/PKGBUILD
deleted file mode 100644
index 2a30f0dce..000000000
--- a/testing/udev/PKGBUILD
+++ /dev/null
@@ -1,102 +0,0 @@
-# $Id: PKGBUILD 147236 2012-01-24 23:31:40Z tomegun $
-# Maintainer: Tom Gundersen <teg@jklm.no>
-# Contributor: Aaron Griffin <aaron@archlinux.org>
-# Contributor: Tobias Powalowski <tpowa@archlinux.org>
-# Contributor: Thomas Bächler <thomas@archlinux.org>
-
-pkgbase="udev"
-pkgname=('udev' 'udev-compat')
-pkgver=179
-pkgrel=1
-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)
-
-build() {
- cd $srcdir/$pkgbase-$pkgver
-
- ./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=('7d2880f66ea39146aae928f19ff3ca09')
diff --git a/testing/udev/udev.install b/testing/udev/udev.install
deleted file mode 100644
index c49c5006f..000000000
--- a/testing/udev/udev.install
+++ /dev/null
@@ -1,65 +0,0 @@
-# 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
-}