[patch -rt] make gendev_rel_sem a compat_semaphore

From: Steven Rostedt
Date: Wed Nov 16 2005 - 10:31:22 EST


Hi Ingo,

I was getting the following:

BUG: nonzero lock count 10 at exit time?
modprobe: 2972 [ffff81007e1aaf70, 116]

Call Trace:<ffffffff8014e2db>{printk_task+43} <ffffffff8015040f>{check_no_held_locks+111}
<ffffffff80136d3c>{do_exit+3036} <ffffffff80136f5c>{do_group_exit+268}
<ffffffff80136f72>{sys_exit_group+18} <ffffffff8011e471>{ia32_sysret+0}

---------------------------
| preempt count: 00000000 ]
| 0-level deep critical section nesting:
----------------------------------------
hdc: ATAPI 40X DVD-ROM DVD-R CD-R/RW drive, 2048kB Cache, UDMA(33)
Uniform CD-ROM driver Revision: 3.20

BUG: modprobe/2972, lock held at task exit time!
[ffffffff8809fd00] {(struct semaphore *)(&hwif->gendev_rel_sem)}
.. held by: modprobe: 2972 [ffff81007e1aaf70, 116]
... acquired at: init_hwif_data+0xaf/0x1a0 [ide_core]

[snipped to not be so annoying]

Looking into this I see that gendev_rel_sem, which is only used when the
device is unregistered, is defined as a semaphore. This patch changes
this to be a compat_semaphore.

-- Steve

Index: linux-2.6.14-rt13/include/linux/ide.h
===================================================================
--- linux-2.6.14-rt13.orig/include/linux/ide.h 2005-11-15 11:12:37.000000000 -0500
+++ linux-2.6.14-rt13/include/linux/ide.h 2005-11-16 10:09:10.000000000 -0500
@@ -910,7 +910,7 @@
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */

struct device gendev;
- struct semaphore gendev_rel_sem; /* To deal with device release() */
+ struct compat_semaphore gendev_rel_sem; /* To deal with device release() */

void *hwif_data; /* extra hwif data */



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/