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

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

 



Same thing in devm_hwspin_lock_request_specific().

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

regards,
dan carpenter


On Wed, Jun 27, 2018 at 03:45:52PM +0300, Dan Carpenter wrote:
> 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