mirror of https://gitee.com/openkylin/linux.git
V4L/DVB: ir: Make sure that the spinlocks are properly initialized
Some spinlocks are not properly initialized on ir core: [ 471.714132] BUG: spinlock bad magic on CPU#0, modprobe/1899 [ 471.719838] lock: f92a08ac, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0 [ 471.727301] Pid: 1899, comm: modprobe Not tainted 2.6.33 #36 [ 471.733062] Call Trace: [ 471.735537] [<c1498793>] ? printk+0x1d/0x22 [ 471.739866] [<c12694e3>] spin_bug+0xa3/0xf0 [ 471.744224] [<c126962d>] do_raw_spin_lock+0x7d/0x160 [ 471.749364] [<f92a01ff>] ? ir_rc5_register+0x6f/0xf0 [ir_rc5_decoder] So, use static initialization for the static spinlocks, instead of the dynamic ones (currently used), as proposed by David Härdeman on one of his RFC patches. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
c373cabfbb
commit
6eb9435b87
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
/* Used to register nec_decoder clients */
|
/* Used to register nec_decoder clients */
|
||||||
static LIST_HEAD(decoder_list);
|
static LIST_HEAD(decoder_list);
|
||||||
static spinlock_t decoder_lock;
|
static DEFINE_SPINLOCK(decoder_lock);
|
||||||
|
|
||||||
enum nec_state {
|
enum nec_state {
|
||||||
STATE_INACTIVE,
|
STATE_INACTIVE,
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
/* Used to handle IR raw handler extensions */
|
/* Used to handle IR raw handler extensions */
|
||||||
static LIST_HEAD(ir_raw_handler_list);
|
static LIST_HEAD(ir_raw_handler_list);
|
||||||
static spinlock_t ir_raw_handler_lock;
|
static DEFINE_SPINLOCK(ir_raw_handler_lock);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RUN_DECODER() - runs an operation on all IR decoders
|
* RUN_DECODER() - runs an operation on all IR decoders
|
||||||
|
@ -205,8 +205,6 @@ static void init_decoders(struct work_struct *work)
|
||||||
|
|
||||||
void ir_raw_init(void)
|
void ir_raw_init(void)
|
||||||
{
|
{
|
||||||
spin_lock_init(&ir_raw_handler_lock);
|
|
||||||
|
|
||||||
#ifdef MODULE
|
#ifdef MODULE
|
||||||
INIT_WORK(&wq_load, init_decoders);
|
INIT_WORK(&wq_load, init_decoders);
|
||||||
schedule_work(&wq_load);
|
schedule_work(&wq_load);
|
||||||
|
|
|
@ -29,7 +29,7 @@ static unsigned int ir_rc5_remote_gap = 888888;
|
||||||
|
|
||||||
/* Used to register rc5_decoder clients */
|
/* Used to register rc5_decoder clients */
|
||||||
static LIST_HEAD(decoder_list);
|
static LIST_HEAD(decoder_list);
|
||||||
static spinlock_t decoder_lock;
|
static DEFINE_SPINLOCK(decoder_lock);
|
||||||
|
|
||||||
enum rc5_state {
|
enum rc5_state {
|
||||||
STATE_INACTIVE,
|
STATE_INACTIVE,
|
||||||
|
|
|
@ -17,8 +17,7 @@
|
||||||
|
|
||||||
/* Used to handle IR raw handler extensions */
|
/* Used to handle IR raw handler extensions */
|
||||||
static LIST_HEAD(rc_map_list);
|
static LIST_HEAD(rc_map_list);
|
||||||
static spinlock_t rc_map_lock;
|
static DEFINE_SPINLOCK(rc_map_lock);
|
||||||
|
|
||||||
|
|
||||||
static struct rc_keymap *seek_rc_map(const char *name)
|
static struct rc_keymap *seek_rc_map(const char *name)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue