[bug report] staging: New driver: Xillybus generic interface for FPGA

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Eli Billauer,

The patch 48bae0507410: "staging: New driver: Xillybus generic
interface for FPGA" from Jun 24, 2013, leads to the following static
checker warning:

	drivers/char/xillybus/xillybus_core.c:941 xillybus_read()
	error: double unlock 'mutex:&channel->wr_mutex'

drivers/char/xillybus/xillybus_core.c
   904  
   905                                  if (mutex_lock_interruptible(
   906                                              &channel->wr_mutex))
   907                                          goto interrupted;
                                                ^^^^^^^^^^^^^^^^
We were interrupted before we could take the lock.

   908                          } while (channel->wr_sleepy);
   909  
   910                          continue;
   911  
   912  interrupted: /* Mutex is not held if got here */
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Comment agrees.

   913                          if (channel->endpoint->fatal_error)
   914                                  return -EIO;
   915                          if (bytes_done)
   916                                  return bytes_done;
   917                          if (filp->f_flags & O_NONBLOCK)
   918                                  return -EAGAIN; /* Don't admit snoozing */
   919                          return -EINTR;
   920                  }
   921  
   922                  left_to_sleep = deadline - ((long) jiffies);
   923  
   924                  /*
   925                   * If our time is out, skip the waiting. We may miss wr_sleepy
   926                   * being deasserted but hey, almost missing the train is like
   927                   * missing it.
   928                   */
   929  
   930                  if (left_to_sleep > 0) {
   931                          left_to_sleep =
   932                                  wait_event_interruptible_timeout(
   933                                          channel->wr_wait,
   934                                          (!channel->wr_sleepy),
   935                                          left_to_sleep);
   936  
   937                          if (left_to_sleep > 0) /* wr_sleepy deasserted */
   938                                  continue;
   939  
   940                          if (left_to_sleep < 0) { /* Interrupt */
   941                                  mutex_unlock(&channel->wr_mutex);
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The static checker thinks we still don't have the lock sio it complains.
Possibly a false positive though because of the wait earlier?

   942                                  if (channel->endpoint->fatal_error)
   943                                          return -EIO;
   944                                  if (bytes_done)
   945                                          return bytes_done;
   946                                  return -EINTR;
   947                          }
   948                  }

regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux