Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [bug report] ALSA: firewire-motu: notify event for parameter change in register DSP model
@ 2023-01-06  9:31 Dan Carpenter
  2023-01-07  4:30 ` Takashi Sakamoto
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2023-01-06  9:31 UTC (permalink / raw)
  To: o-takashi; +Cc: alsa-devel

Hello Takashi Sakamoto,

The patch 634ec0b2906e: "ALSA: firewire-motu: notify event for
parameter change in register DSP model" from Oct 15, 2021, leads to
the following Smatch static checker warning:

	sound/firewire/motu/motu-hwdep.c:92 hwdep_read()
	warn: inconsistent returns '&motu->lock'.

sound/firewire/motu/motu-hwdep.c
    27 static long hwdep_read(struct snd_hwdep *hwdep, char __user *buf, long count,
    28                        loff_t *offset)
    29 {
    30         struct snd_motu *motu = hwdep->private_data;
    31         DEFINE_WAIT(wait);
    32         union snd_firewire_event event;
    33 
    34         spin_lock_irq(&motu->lock);
    35 
    36         while (!motu->dev_lock_changed && motu->msg == 0 && !has_dsp_event(motu)) {
    37                 prepare_to_wait(&motu->hwdep_wait, &wait, TASK_INTERRUPTIBLE);
    38                 spin_unlock_irq(&motu->lock);
    39                 schedule();
    40                 finish_wait(&motu->hwdep_wait, &wait);
    41                 if (signal_pending(current))
    42                         return -ERESTARTSYS;
    43                 spin_lock_irq(&motu->lock);
    44         }
    45 
    46         memset(&event, 0, sizeof(event));
    47         if (motu->dev_lock_changed) {
    48                 event.lock_status.type = SNDRV_FIREWIRE_EVENT_LOCK_STATUS;
    49                 event.lock_status.status = (motu->dev_lock_count > 0);
    50                 motu->dev_lock_changed = false;
    51                 spin_unlock_irq(&motu->lock);
    52 
    53                 count = min_t(long, count, sizeof(event));
    54                 if (copy_to_user(buf, &event, count))
    55                         return -EFAULT;
    56         } else if (motu->msg > 0) {
    57                 event.motu_notification.type = SNDRV_FIREWIRE_EVENT_MOTU_NOTIFICATION;
    58                 event.motu_notification.message = motu->msg;
    59                 motu->msg = 0;
    60                 spin_unlock_irq(&motu->lock);
    61 
    62                 count = min_t(long, count, sizeof(event));
    63                 if (copy_to_user(buf, &event, count))
    64                         return -EFAULT;
    65         } else if (has_dsp_event(motu)) {
    66                 size_t consumed = 0;
    67                 u32 __user *ptr;
    68                 u32 ev;
    69 
    70                 spin_unlock_irq(&motu->lock);
    71 
    72                 // Header is filled later.
    73                 consumed += sizeof(event.motu_register_dsp_change);
    74 
    75                 while (consumed < count &&
    76                        snd_motu_register_dsp_message_parser_copy_event(motu, &ev)) {
    77                         ptr = (u32 __user *)(buf + consumed);
    78                         if (put_user(ev, ptr))
    79                                 return -EFAULT;
    80                         consumed += sizeof(ev);
    81                 }
    82 
    83                 event.motu_register_dsp_change.type = SNDRV_FIREWIRE_EVENT_MOTU_REGISTER_DSP_CHANGE;
    84                 event.motu_register_dsp_change.count =
    85                         (consumed - sizeof(event.motu_register_dsp_change)) / 4;
    86                 if (copy_to_user(buf, &event, sizeof(event.motu_register_dsp_change)))
    87                         return -EFAULT;
    88 
    89                 count = consumed;
    90         }

Smatch complains that there is no "} else {" path which unlocks.


    91 
--> 92         return count;
    93 }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-01-07  4:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-06  9:31 [bug report] ALSA: firewire-motu: notify event for parameter change in register DSP model Dan Carpenter
2023-01-07  4:30 ` Takashi Sakamoto

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox