[bug report] ALSA: mixart: Use nonatomic PCM ops
[ This bug predates git but my email script just uses `git blame -w`. -dan ]
Hello Takashi Iwai,
The patch 8d3a8b5cb57d: "ALSA: mixart: Use nonatomic PCM ops" from Sep 10, 2014, leads to the following static checker warning:
sound/pci/mixart/mixart_core.c:73 get_msg() warn: called with lock held. '&mgr->msg_lock'
sound/pci/mixart/mixart_core.c 63 static int get_msg(struct mixart_mgr *mgr, struct mixart_msg *resp, 64 u32 msg_frame_address ) 65 { 66 u32 headptr; 67 u32 size; 68 int err; 69 #ifndef __BIG_ENDIAN 70 unsigned int i; 71 #endif 72 73 mutex_lock(&mgr->msg_lock); ^^^^^^^^^^^^^^^^^^^^^^^^^^ Smatch says that get_msg() is called with this lock already held.
74 err = 0; 75 76 /* copy message descriptor from miXart to driver */ 77 size = readl_be(MIXART_MEM(mgr, msg_frame_address)); /* size of descriptor + response */ 78 resp->message_id = readl_be(MIXART_MEM(mgr, msg_frame_address + 4)); /* dwMessageID */
[ snip ]
419 irqreturn_t snd_mixart_threaded_irq(int irq, void *dev_id) 420 { 421 struct mixart_mgr *mgr = dev_id; 422 int err; 423 struct mixart_msg resp; 424 u32 msg; 425 426 mutex_lock(&mgr->lock); ^^^^^^^^^^^^^^^^^^^^^^ We are holding the lock
427 /* process interrupt */ 428 while (retrieve_msg_frame(mgr, &msg)) { 429 430 switch (msg & MSG_TYPE_MASK) { 431 case MSG_TYPE_COMMAND: 432 resp.message_id = 0; 433 resp.data = mixart_msg_data; 434 resp.size = sizeof(mixart_msg_data); 435 err = get_msg(mgr, &resp, msg & ~MSG_TYPE_MASK); ^^^^^^^^^^^ When get_msg() is called on this path.
436 if( err < 0 ) { 437 dev_err(&mgr->pci->dev, 438 "interrupt: error(%d) reading mf %x\n", 439 err, msg); 440 break; 441 } 442 443 if(resp.message_id == MSG_SERVICES_TIMER_NOTIFY) {
regards, dan carpenter
participants (1)
-
Dan Carpenter