[bug report] hwspinlock: Add devm_xxx() APIs to request/free hwlock

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

 



Hello Baolin Wang,

The patch 4f1acd758b08: "hwspinlock: Add devm_xxx() APIs to
request/free hwlock" from Jun 22, 2018, leads to the following static
checker warning:

	drivers/hwspinlock/hwspinlock_core.c:883 devm_hwspin_lock_request()
	warn: 'hwlock' isn't an ERR_PTR

drivers/hwspinlock/hwspinlock_core.c
   860  /**
   861   * devm_hwspin_lock_request() - request an hwspinlock for a managed device
   862   * @dev: the device to request an hwspinlock
   863   *
   864   * This function should be called by users of the hwspinlock device,
   865   * in order to dynamically assign them an unused hwspinlock.
   866   * Usually the user of this lock will then have to communicate the lock's id
   867   * to the remote core before it can be used for synchronization (to get the
   868   * id of a given hwlock, use hwspin_lock_get_id()).
   869   *
   870   * Should be called from a process context (might sleep)
   871   *
   872   * Returns the address of the assigned hwspinlock, or NULL on error
                                                              ^^^^^^^^^^^^^
This is supposed to return NULL on error.

   873   */
   874  struct hwspinlock *devm_hwspin_lock_request(struct device *dev)
   875  {
   876          struct hwspinlock **ptr, *hwlock;
   877  
   878          ptr = devres_alloc(devm_hwspin_lock_release, sizeof(*ptr), GFP_KERNEL);
   879          if (!ptr)
   880                  return ERR_PTR(-ENOMEM);
                               ^^^^^^^^^^^^^^^
But it returns error pointers

   881  
   882          hwlock = hwspin_lock_request();
   883          if (!IS_ERR(hwlock)) {
   884                  *ptr = hwlock;
   885                  devres_add(dev, ptr);
   886          } else {
   887                  devres_free(ptr);
   888          }
   889  
   890          return hwlock;

The hwspin_lock_request() returns NULL on error or error pointer if it's
defined away.  Callers are supposed to check for NULL so that the error
pointer is treated as success.  (Which is sort of the opposite of how
it normally works where error pointers are errors and NULL is a special
type of success).

But then we return "hwlock" which I guess can be either NULL or possibly
and error pointer or a valid pointer?  I didn't look at the defines to
check how this works because either way the function needs to be cleaned
up a bit.

   891  }
   892  EXPORT_SYMBOL_GPL(devm_hwspin_lock_request);

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



[Index of Archives]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux