Package: lirc-modules-source Version: 0.8.0-13 Severity: normal Tags: patch
-- System Information: Debian Release: lenny/sid APT prefers unstable APT policy: (900, 'unstable'), (1, 'experimental') Architecture: i386 (i686) Kernel: Linux 2.6.24-1-686 (SMP w/2 CPU cores) Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=ISO-8859-15) Shell: /bin/sh linked to /bin/dash Versions of packages lirc-modules-source depends on: ii debconf [debconf-2.0] 1.5.19 Debian configuration management sy ii debhelper 6.0.4 helper programs for debian/rules ii debianutils 2.28.2 Miscellaneous utilities specific t ii ucf 3.004 Update Configuration File: preserv Versions of packages lirc-modules-source recommends: ii dpkg-dev 1.14.16.6 package building tools for Debian ii gcc [c-compiler] 4:4.2.2-2 The GNU C compiler ii gcc-3.3 [c-compiler] 1:3.3.6-15 The GNU C compiler ii gcc-4.1 [c-compiler] 4.1.2-19 The GNU C compiler ii gcc-4.2 [c-compiler] 4.2.2-7 The GNU C compiler pn kernel-package <none> (no description available) ii make 3.81-3 The GNU version of the "make" util -- debconf information: lirc-modules-source/use_lirc_hints: true lirc-modules-source/parallel_irq: 7 * lirc-modules-source/do-build: false lirc-modules-source/parallel_timer: 65536 lirc-modules-source/sir_type: Other * lirc-modules-source/serial_softcarrier: false lirc-modules-source/kernel-source-not-found: * lirc-modules-source/serial_transmitter: false lirc-modules-source/it87_type: Standard lirc-modules-source/not_needed: * lirc-modules-source/serial_port: 0x3f8 * lirc-modules-source/drivers: serial * lirc-modules-source/serial_irq: 4 * lirc-modules-source/serial_type: Other lirc-modules-source/kernel-source: /usr/src/linux/ lirc-modules-source/sir_irq: 3 lirc-modules-source/sir_port: 0x2f8 lirc-modules-source/parallel_port: 0x378 * lirc-modules-source/what_next:
--- lirc_dev.c.orig 2008-01-31 11:01:01.000000000 +0100 +++ lirc_dev.c 2008-01-31 11:04:25.000000000 +0100 @@ -40,6 +40,7 @@ #include <linux/fs.h> #include <linux/poll.h> #include <linux/smp_lock.h> +#include <linux/completion.h> #include <asm/uaccess.h> #include <asm/semaphore.h> #include <asm/errno.h> @@ -85,8 +86,8 @@ unsigned int chunk_size; int tpid; - struct semaphore *t_notify; - struct semaphore *t_notify2; + struct completion *t_notify; + struct completion *t_notify2; int shutdown; long jiffies_to_wait; @@ -194,7 +195,7 @@ daemonize("lirc_dev"); if (ir->t_notify != NULL) { - up(ir->t_notify); + complete(ir->t_notify); } dprintk(LOGHEAD "poll thread started\n", ir->p.name, ir->p.minor); @@ -221,12 +222,12 @@ } while (!ir->shutdown); if (ir->t_notify2 != NULL) { - down(ir->t_notify2); + wait_for_completion(ir->t_notify2); } ir->tpid = -1; if (ir->t_notify != NULL) { - up(ir->t_notify); + complete(ir->t_notify); } dprintk(LOGHEAD "poll thread ended\n", ir->p.name, ir->p.minor); @@ -246,7 +247,7 @@ #ifdef LIRC_HAVE_DEVFS_24 char name[16]; #endif - DECLARE_MUTEX_LOCKED(tn); + DECLARE_COMPLETION(tn); if (!p) { printk("lirc_dev: lirc_register_plugin: " @@ -398,7 +399,7 @@ err = -ECHILD; goto out_sysfs; } - down(&tn); + wait_for_completion(&tn); ir->t_notify = NULL; } ir->attached = 1; @@ -436,8 +437,8 @@ int lirc_unregister_plugin(int minor) { struct irctl *ir; - DECLARE_MUTEX_LOCKED(tn); - DECLARE_MUTEX_LOCKED(tn2); + DECLARE_COMPLETION(tn); + DECLARE_COMPLETION(tn2); if (minor < 0 || minor >= MAX_IRCTL_DEVICES) { printk("lirc_dev: lirc_unregister_plugin: " @@ -473,8 +474,8 @@ /* 2.2.x does not export wake_up_process() */ wake_up_interruptible(ir->p.get_queue(ir->p.data)); #endif - up(&tn2); - down(&tn); + complete(&tn2); + wait_for_completion(&tn); ir->t_notify = NULL; ir->t_notify2 = NULL; } @@ -869,8 +870,7 @@ return SUCCESS; out_unregister: - if(unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME)) - printk(KERN_ERR "lirc_dev: unregister_chrdev failed!\n"); + unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME); out: return -1; } @@ -894,15 +894,8 @@ */ void cleanup_module(void) { - int ret; - - ret = unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME); + unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME); class_destroy(lirc_class); - - if(ret) - printk("lirc_dev: error in module_unregister_chrdev: %d\n", ret); - else - dprintk("lirc_dev: module successfully unloaded\n"); } MODULE_DESCRIPTION("LIRC base driver module");
--- lirc_serial.c.ORIG 2007-12-14 22:13:40.000000000 +0200 +++ lirc_serial.c 2007-12-14 22:13:47.000000000 +0200 @@ -961,7 +961,7 @@ do_gettimeofday(&lasttv); result = request_irq(irq, irq_handler, - SA_INTERRUPT | (share_irq ? SA_SHIRQ:0), + IRQF_DISABLED | (share_irq ? IRQF_SHARED :0), LIRC_DRIVER_NAME, (void *)&hardware); switch (result) {