From 6e44022dae7a995ba66e51dc7efa04cbb5a949b8 Mon Sep 17 00:00:00 2001 From: Jarod Wilson Date: Thu, 29 Jul 2010 18:20:44 -0300 Subject: [PATCH] --- yaml --- r: 208149 b: refs/heads/master c: 82ce67bf262b3f47ecb5a0ca31cace8ac72b7c98 h: refs/heads/master i: 208147: 94729fc08ff140fe8d9f49076247cd91fbf54d2a v: v3 --- [refs] | 2 +- trunk/drivers/staging/lirc/lirc_it87.c | 9 ++++++--- trunk/drivers/staging/lirc/lirc_parallel.c | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 3bd5b9a4584d..6cd36f71f150 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: efce8ca3c5d8a35018f801d687396e1911cfc868 +refs/heads/master: 82ce67bf262b3f47ecb5a0ca31cace8ac72b7c98 diff --git a/trunk/drivers/staging/lirc/lirc_it87.c b/trunk/drivers/staging/lirc/lirc_it87.c index 09f36961c6d2..ec11c0e949a0 100644 --- a/trunk/drivers/staging/lirc/lirc_it87.c +++ b/trunk/drivers/staging/lirc/lirc_it87.c @@ -109,6 +109,7 @@ static DECLARE_WAIT_QUEUE_HEAD(lirc_read_queue); static DEFINE_SPINLOCK(hardware_lock); static DEFINE_SPINLOCK(dev_lock); +static bool device_open; static int rx_buf[RBUF_LEN]; unsigned int rx_tail, rx_head; @@ -147,10 +148,11 @@ static void drop_port(void); static int lirc_open(struct inode *inode, struct file *file) { spin_lock(&dev_lock); - if (module_refcount(THIS_MODULE)) { + if (device_open) { spin_unlock(&dev_lock); return -EBUSY; } + device_open = true; spin_unlock(&dev_lock); return 0; } @@ -158,6 +160,9 @@ static int lirc_open(struct inode *inode, struct file *file) static int lirc_close(struct inode *inode, struct file *file) { + spin_lock(&dev_lock); + device_open = false; + spin_unlock(&dev_lock); return 0; } @@ -363,7 +368,6 @@ static struct lirc_driver driver = { }; -#ifdef MODULE static int init_chrdev(void) { driver.minor = lirc_register_driver(&driver); @@ -380,7 +384,6 @@ static void drop_chrdev(void) { lirc_unregister_driver(driver.minor); } -#endif /* SECTION: Hardware */ diff --git a/trunk/drivers/staging/lirc/lirc_parallel.c b/trunk/drivers/staging/lirc/lirc_parallel.c index a1ebd071640f..6da4a8c6ebc3 100644 --- a/trunk/drivers/staging/lirc/lirc_parallel.c +++ b/trunk/drivers/staging/lirc/lirc_parallel.c @@ -240,7 +240,7 @@ static void irq_handler(void *blah) unsigned int level, newlevel; unsigned int timeout; - if (!module_refcount(THIS_MODULE)) + if (!is_open) return; if (!is_claimed) @@ -515,7 +515,7 @@ static long lirc_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) static int lirc_open(struct inode *node, struct file *filep) { - if (module_refcount(THIS_MODULE) || !lirc_claim()) + if (is_open || !lirc_claim()) return -EBUSY; parport_enable_irq(pport);