All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
@ 2026-09-24 10:04 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-09-24 10:04 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Rong Xu <xur@google.com>
CC: Nathan Chancellor <nathan@kernel.org>
CC: Masahiro Yamada <masahiroy@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   62f4c998b297cf233997a2b4cd6fc2d2df0319c9
commit: 9f2aee8f7d1842be08da860e45265d30dba0d1f7 kbuild: distributed build support for Clang ThinLTO
date:   4 months ago
:::::: branch date: 13 hours ago
:::::: commit date: 4 months ago
config: arm64-randconfig-r2200-20260923 (https://download.01.org/0day-ci/archive/20260924/202609241102.QTQxIN3B-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 4b99afb361a8cfd45fc17aebc637688661e9e472)
rustc: rustc 1.96.0 (ac68faa20 2026-05-25)
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 9f2aee8f7d18 ("kbuild: distributed build support for Clang ThinLTO")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202609241102.QTQxIN3B-lkp@intel.com/

smatch warnings:
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:997 scmi_valid_pending_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1078 __scmi_event_handler_get_ops() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift
drivers/firmware/arm_scmi/notify.c:1148 scmi_get_active_handler() warn: subtract is higher precedence than shift

vim +942 drivers/firmware/arm_scmi/notify.c

e7c215f358a350 Cristian Marussi 2020-07-01   924  
e7c215f358a350 Cristian Marussi 2020-07-01   925  /**
e7c215f358a350 Cristian Marussi 2020-07-01   926   * scmi_bind_event_handler()  - Helper to attempt binding an handler to an event
e7c215f358a350 Cristian Marussi 2020-07-01   927   * @ni: A reference to the notification instance to use
e7c215f358a350 Cristian Marussi 2020-07-01   928   * @hndl: The event handler to bind
e7c215f358a350 Cristian Marussi 2020-07-01   929   *
e7c215f358a350 Cristian Marussi 2020-07-01   930   * If an associated registered event is found, move the handler from the pending
e7c215f358a350 Cristian Marussi 2020-07-01   931   * into the registered table.
e7c215f358a350 Cristian Marussi 2020-07-01   932   *
e7c215f358a350 Cristian Marussi 2020-07-01   933   * Context: Assumes to be called with @pending_mtx already acquired.
e7c215f358a350 Cristian Marussi 2020-07-01   934   *
e7c215f358a350 Cristian Marussi 2020-07-01   935   * Return: 0 on Success
e7c215f358a350 Cristian Marussi 2020-07-01   936   */
e7c215f358a350 Cristian Marussi 2020-07-01   937  static inline int scmi_bind_event_handler(struct scmi_notify_instance *ni,
e7c215f358a350 Cristian Marussi 2020-07-01   938  					  struct scmi_event_handler *hndl)
e7c215f358a350 Cristian Marussi 2020-07-01   939  {
e7c215f358a350 Cristian Marussi 2020-07-01   940  	struct scmi_registered_event *r_evt;
e7c215f358a350 Cristian Marussi 2020-07-01   941  
e7c215f358a350 Cristian Marussi 2020-07-01  @942  	r_evt = SCMI_GET_REVT(ni, KEY_XTRACT_PROTO_ID(hndl->key),
e7c215f358a350 Cristian Marussi 2020-07-01   943  			      KEY_XTRACT_EVT_ID(hndl->key));
e7c215f358a350 Cristian Marussi 2020-07-01   944  	if (!r_evt)
e7c215f358a350 Cristian Marussi 2020-07-01   945  		return -EINVAL;
e7c215f358a350 Cristian Marussi 2020-07-01   946  
3dd2c81475564e Cristian Marussi 2021-03-16   947  	/*
3dd2c81475564e Cristian Marussi 2021-03-16   948  	 * Remove from pending and insert into registered while getting hold
3dd2c81475564e Cristian Marussi 2021-03-16   949  	 * of protocol instance.
3dd2c81475564e Cristian Marussi 2021-03-16   950  	 */
e7c215f358a350 Cristian Marussi 2020-07-01   951  	hash_del(&hndl->hash);
b5daf93b809d13 Cristian Marussi 2025-07-07   952  
b5daf93b809d13 Cristian Marussi 2025-07-07   953  	/* Bailout if event is not supported at all */
b5daf93b809d13 Cristian Marussi 2025-07-07   954  	if (r_evt->not_supported_by_platform)
b5daf93b809d13 Cristian Marussi 2025-07-07   955  		return -EOPNOTSUPP;
b5daf93b809d13 Cristian Marussi 2025-07-07   956  
3dd2c81475564e Cristian Marussi 2021-03-16   957  	/*
3dd2c81475564e Cristian Marussi 2021-03-16   958  	 * Acquire protocols only for NON pending handlers, so as NOT to trigger
3dd2c81475564e Cristian Marussi 2021-03-16   959  	 * protocol initialization when a notifier is registered against a still
3dd2c81475564e Cristian Marussi 2021-03-16   960  	 * not registered protocol, since it would make little sense to force init
3dd2c81475564e Cristian Marussi 2021-03-16   961  	 * protocols for which still no SCMI driver user exists: they wouldn't
3dd2c81475564e Cristian Marussi 2021-03-16   962  	 * emit any event anyway till some SCMI driver starts using it.
3dd2c81475564e Cristian Marussi 2021-03-16   963  	 */
3dd2c81475564e Cristian Marussi 2021-03-16   964  	scmi_protocol_acquire(ni->handle, KEY_XTRACT_PROTO_ID(hndl->key));
e7c215f358a350 Cristian Marussi 2020-07-01   965  	hndl->r_evt = r_evt;
3dd2c81475564e Cristian Marussi 2021-03-16   966  
e7c215f358a350 Cristian Marussi 2020-07-01   967  	mutex_lock(&r_evt->proto->registered_mtx);
e7c215f358a350 Cristian Marussi 2020-07-01   968  	hash_add(r_evt->proto->registered_events_handlers,
e7c215f358a350 Cristian Marussi 2020-07-01   969  		 &hndl->hash, hndl->key);
e7c215f358a350 Cristian Marussi 2020-07-01   970  	mutex_unlock(&r_evt->proto->registered_mtx);
e7c215f358a350 Cristian Marussi 2020-07-01   971  
e7c215f358a350 Cristian Marussi 2020-07-01   972  	return 0;
e7c215f358a350 Cristian Marussi 2020-07-01   973  }
e7c215f358a350 Cristian Marussi 2020-07-01   974  
e7c215f358a350 Cristian Marussi 2020-07-01   975  /**
e7c215f358a350 Cristian Marussi 2020-07-01   976   * scmi_valid_pending_handler()  - Helper to check pending status of handlers
e7c215f358a350 Cristian Marussi 2020-07-01   977   * @ni: A reference to the notification instance to use
e7c215f358a350 Cristian Marussi 2020-07-01   978   * @hndl: The event handler to check
e7c215f358a350 Cristian Marussi 2020-07-01   979   *
e7c215f358a350 Cristian Marussi 2020-07-01   980   * An handler is considered pending when its r_evt == NULL, because the related
e7c215f358a350 Cristian Marussi 2020-07-01   981   * event was still unknown at handler's registration time; anyway, since all
e7c215f358a350 Cristian Marussi 2020-07-01   982   * protocols register their supported events once for all at protocols'
e7c215f358a350 Cristian Marussi 2020-07-01   983   * initialization time, a pending handler cannot be considered valid anymore if
e7c215f358a350 Cristian Marussi 2020-07-01   984   * the underlying event (which it is waiting for), belongs to an already
e7c215f358a350 Cristian Marussi 2020-07-01   985   * initialized and registered protocol.
e7c215f358a350 Cristian Marussi 2020-07-01   986   *
e7c215f358a350 Cristian Marussi 2020-07-01   987   * Return: 0 on Success
e7c215f358a350 Cristian Marussi 2020-07-01   988   */
e7c215f358a350 Cristian Marussi 2020-07-01   989  static inline int scmi_valid_pending_handler(struct scmi_notify_instance *ni,
e7c215f358a350 Cristian Marussi 2020-07-01   990  					     struct scmi_event_handler *hndl)
e7c215f358a350 Cristian Marussi 2020-07-01   991  {
e7c215f358a350 Cristian Marussi 2020-07-01   992  	struct scmi_registered_events_desc *pd;
e7c215f358a350 Cristian Marussi 2020-07-01   993  
e7c215f358a350 Cristian Marussi 2020-07-01   994  	if (!IS_HNDL_PENDING(hndl))
e7c215f358a350 Cristian Marussi 2020-07-01   995  		return -EINVAL;
e7c215f358a350 Cristian Marussi 2020-07-01   996  
e7c215f358a350 Cristian Marussi 2020-07-01  @997  	pd = SCMI_GET_PROTO(ni, KEY_XTRACT_PROTO_ID(hndl->key));
e7c215f358a350 Cristian Marussi 2020-07-01   998  	if (pd)
e7c215f358a350 Cristian Marussi 2020-07-01   999  		return -EINVAL;
e7c215f358a350 Cristian Marussi 2020-07-01  1000  
e7c215f358a350 Cristian Marussi 2020-07-01  1001  	return 0;
e7c215f358a350 Cristian Marussi 2020-07-01  1002  }
e7c215f358a350 Cristian Marussi 2020-07-01  1003  
e7c215f358a350 Cristian Marussi 2020-07-01  1004  /**
e7c215f358a350 Cristian Marussi 2020-07-01  1005   * scmi_register_event_handler()  - Register whenever possible an Event handler
e7c215f358a350 Cristian Marussi 2020-07-01  1006   * @ni: A reference to the notification instance to use
e7c215f358a350 Cristian Marussi 2020-07-01  1007   * @hndl: The event handler to register
e7c215f358a350 Cristian Marussi 2020-07-01  1008   *
e7c215f358a350 Cristian Marussi 2020-07-01  1009   * At first try to bind an event handler to its associated event, then check if
e7c215f358a350 Cristian Marussi 2020-07-01  1010   * it was at least a valid pending handler: if it was not bound nor valid return
e7c215f358a350 Cristian Marussi 2020-07-01  1011   * false.
e7c215f358a350 Cristian Marussi 2020-07-01  1012   *
e7c215f358a350 Cristian Marussi 2020-07-01  1013   * Valid pending incomplete bindings will be periodically retried by a dedicated
e7c215f358a350 Cristian Marussi 2020-07-01  1014   * worker which is kicked each time a new protocol completes its own
e7c215f358a350 Cristian Marussi 2020-07-01  1015   * registration phase.
e7c215f358a350 Cristian Marussi 2020-07-01  1016   *
e7c215f358a350 Cristian Marussi 2020-07-01  1017   * Context: Assumes to be called with @pending_mtx acquired.
e7c215f358a350 Cristian Marussi 2020-07-01  1018   *
e7c215f358a350 Cristian Marussi 2020-07-01  1019   * Return: 0 on Success
e7c215f358a350 Cristian Marussi 2020-07-01  1020   */
e7c215f358a350 Cristian Marussi 2020-07-01  1021  static int scmi_register_event_handler(struct scmi_notify_instance *ni,
e7c215f358a350 Cristian Marussi 2020-07-01  1022  				       struct scmi_event_handler *hndl)
e7c215f358a350 Cristian Marussi 2020-07-01  1023  {
e7c215f358a350 Cristian Marussi 2020-07-01  1024  	int ret;
e7c215f358a350 Cristian Marussi 2020-07-01  1025  
e7c215f358a350 Cristian Marussi 2020-07-01  1026  	ret = scmi_bind_event_handler(ni, hndl);
e7c215f358a350 Cristian Marussi 2020-07-01  1027  	if (!ret) {
e7c215f358a350 Cristian Marussi 2020-07-01  1028  		dev_dbg(ni->handle->dev, "registered NEW handler - key:%X\n",
e7c215f358a350 Cristian Marussi 2020-07-01  1029  			hndl->key);
e7c215f358a350 Cristian Marussi 2020-07-01  1030  	} else {
e7c215f358a350 Cristian Marussi 2020-07-01  1031  		ret = scmi_valid_pending_handler(ni, hndl);
e7c215f358a350 Cristian Marussi 2020-07-01  1032  		if (!ret)
e7c215f358a350 Cristian Marussi 2020-07-01  1033  			dev_dbg(ni->handle->dev,
e7c215f358a350 Cristian Marussi 2020-07-01  1034  				"registered PENDING handler - key:%X\n",
e7c215f358a350 Cristian Marussi 2020-07-01  1035  				hndl->key);
e7c215f358a350 Cristian Marussi 2020-07-01  1036  	}
e7c215f358a350 Cristian Marussi 2020-07-01  1037  
e7c215f358a350 Cristian Marussi 2020-07-01  1038  	return ret;
e7c215f358a350 Cristian Marussi 2020-07-01  1039  }
e7c215f358a350 Cristian Marussi 2020-07-01  1040  
e7c215f358a350 Cristian Marussi 2020-07-01  1041  /**
e7c215f358a350 Cristian Marussi 2020-07-01  1042   * __scmi_event_handler_get_ops()  - Utility to get or create an event handler
e7c215f358a350 Cristian Marussi 2020-07-01  1043   * @ni: A reference to the notification instance to use
e7c215f358a350 Cristian Marussi 2020-07-01  1044   * @evt_key: The event key to use
e7c215f358a350 Cristian Marussi 2020-07-01  1045   * @create: A boolean flag to specify if a handler must be created when
e7c215f358a350 Cristian Marussi 2020-07-01  1046   *	    not already existent
e7c215f358a350 Cristian Marussi 2020-07-01  1047   *
e7c215f358a350 Cristian Marussi 2020-07-01  1048   * Search for the desired handler matching the key in both the per-protocol
e7c215f358a350 Cristian Marussi 2020-07-01  1049   * registered table and the common pending table:
e7c215f358a350 Cristian Marussi 2020-07-01  1050   * * if found adjust users refcount
e7c215f358a350 Cristian Marussi 2020-07-01  1051   * * if not found and @create is true, create and register the new handler:
e7c215f358a350 Cristian Marussi 2020-07-01  1052   *   handler could end up being registered as pending if no matching event
e7c215f358a350 Cristian Marussi 2020-07-01  1053   *   could be found.
e7c215f358a350 Cristian Marussi 2020-07-01  1054   *
e7c215f358a350 Cristian Marussi 2020-07-01  1055   * An handler is guaranteed to reside in one and only one of the tables at
e7c215f358a350 Cristian Marussi 2020-07-01  1056   * any one time; to ensure this the whole search and create is performed
e7c215f358a350 Cristian Marussi 2020-07-01  1057   * holding the @pending_mtx lock, with @registered_mtx additionally acquired
e7c215f358a350 Cristian Marussi 2020-07-01  1058   * if needed.
e7c215f358a350 Cristian Marussi 2020-07-01  1059   *
e7c215f358a350 Cristian Marussi 2020-07-01  1060   * Note that when a nested acquisition of these mutexes is needed the locking
e7c215f358a350 Cristian Marussi 2020-07-01  1061   * order is always (same as in @init_work):
e7c215f358a350 Cristian Marussi 2020-07-01  1062   * 1. pending_mtx
e7c215f358a350 Cristian Marussi 2020-07-01  1063   * 2. registered_mtx
e7c215f358a350 Cristian Marussi 2020-07-01  1064   *
e7c215f358a350 Cristian Marussi 2020-07-01  1065   * Events generation is NOT enabled right after creation within this routine
e7c215f358a350 Cristian Marussi 2020-07-01  1066   * since at creation time we usually want to have all setup and ready before
e7c215f358a350 Cristian Marussi 2020-07-01  1067   * events really start flowing.
e7c215f358a350 Cristian Marussi 2020-07-01  1068   *
555317d6100164 Cristian Marussi 2026-03-05  1069   * Return: A properly refcounted handler on Success, ERR_PTR on Failure
e7c215f358a350 Cristian Marussi 2020-07-01  1070   */
e7c215f358a350 Cristian Marussi 2020-07-01  1071  static inline struct scmi_event_handler *
e7c215f358a350 Cristian Marussi 2020-07-01  1072  __scmi_event_handler_get_ops(struct scmi_notify_instance *ni,
e7c215f358a350 Cristian Marussi 2020-07-01  1073  			     u32 evt_key, bool create)
e7c215f358a350 Cristian Marussi 2020-07-01  1074  {
e7c215f358a350 Cristian Marussi 2020-07-01  1075  	struct scmi_registered_event *r_evt;
e7c215f358a350 Cristian Marussi 2020-07-01  1076  	struct scmi_event_handler *hndl = NULL;
e7c215f358a350 Cristian Marussi 2020-07-01  1077  
e7c215f358a350 Cristian Marussi 2020-07-01 @1078  	r_evt = SCMI_GET_REVT(ni, KEY_XTRACT_PROTO_ID(evt_key),
e7c215f358a350 Cristian Marussi 2020-07-01  1079  			      KEY_XTRACT_EVT_ID(evt_key));
e7c215f358a350 Cristian Marussi 2020-07-01  1080  
b5daf93b809d13 Cristian Marussi 2025-07-07  1081  	if (r_evt && r_evt->not_supported_by_platform)
b5daf93b809d13 Cristian Marussi 2025-07-07  1082  		return ERR_PTR(-EOPNOTSUPP);
b5daf93b809d13 Cristian Marussi 2025-07-07  1083  
e7c215f358a350 Cristian Marussi 2020-07-01  1084  	mutex_lock(&ni->pending_mtx);
e7c215f358a350 Cristian Marussi 2020-07-01  1085  	/* Search registered events at first ... if possible at all */
e7c215f358a350 Cristian Marussi 2020-07-01  1086  	if (r_evt) {
e7c215f358a350 Cristian Marussi 2020-07-01  1087  		mutex_lock(&r_evt->proto->registered_mtx);
e7c215f358a350 Cristian Marussi 2020-07-01  1088  		hndl = KEY_FIND(r_evt->proto->registered_events_handlers,
e7c215f358a350 Cristian Marussi 2020-07-01  1089  				hndl, evt_key);
e7c215f358a350 Cristian Marussi 2020-07-01  1090  		if (hndl)
e7c215f358a350 Cristian Marussi 2020-07-01  1091  			refcount_inc(&hndl->users);
e7c215f358a350 Cristian Marussi 2020-07-01  1092  		mutex_unlock(&r_evt->proto->registered_mtx);
e7c215f358a350 Cristian Marussi 2020-07-01  1093  	}
e7c215f358a350 Cristian Marussi 2020-07-01  1094  
e7c215f358a350 Cristian Marussi 2020-07-01  1095  	/* ...then amongst pending. */
e7c215f358a350 Cristian Marussi 2020-07-01  1096  	if (!hndl) {
e7c215f358a350 Cristian Marussi 2020-07-01  1097  		hndl = KEY_FIND(ni->pending_events_handlers, hndl, evt_key);
e7c215f358a350 Cristian Marussi 2020-07-01  1098  		if (hndl)
e7c215f358a350 Cristian Marussi 2020-07-01  1099  			refcount_inc(&hndl->users);
e7c215f358a350 Cristian Marussi 2020-07-01  1100  	}
e7c215f358a350 Cristian Marussi 2020-07-01  1101  
e7c215f358a350 Cristian Marussi 2020-07-01  1102  	/* Create if still not found and required */
e7c215f358a350 Cristian Marussi 2020-07-01  1103  	if (!hndl && create) {
e7c215f358a350 Cristian Marussi 2020-07-01  1104  		hndl = scmi_allocate_event_handler(ni, evt_key);
e7c215f358a350 Cristian Marussi 2020-07-01  1105  		if (hndl && scmi_register_event_handler(ni, hndl)) {
e7c215f358a350 Cristian Marussi 2020-07-01  1106  			dev_dbg(ni->handle->dev,
e7c215f358a350 Cristian Marussi 2020-07-01  1107  				"purging UNKNOWN handler - key:%X\n",
e7c215f358a350 Cristian Marussi 2020-07-01  1108  				hndl->key);
e7c215f358a350 Cristian Marussi 2020-07-01  1109  			/* this hndl can be only a pending one */
e7c215f358a350 Cristian Marussi 2020-07-01  1110  			scmi_put_handler_unlocked(ni, hndl);
b5daf93b809d13 Cristian Marussi 2025-07-07  1111  			hndl = ERR_PTR(-EINVAL);
e7c215f358a350 Cristian Marussi 2020-07-01  1112  		}
e7c215f358a350 Cristian Marussi 2020-07-01  1113  	}
e7c215f358a350 Cristian Marussi 2020-07-01  1114  	mutex_unlock(&ni->pending_mtx);
e7c215f358a350 Cristian Marussi 2020-07-01  1115  
555317d6100164 Cristian Marussi 2026-03-05  1116  	return hndl ?: ERR_PTR(-ENODEV);
e7c215f358a350 Cristian Marussi 2020-07-01  1117  }
e7c215f358a350 Cristian Marussi 2020-07-01  1118  

:::::: The code at line 942 was first introduced by commit
:::::: e7c215f358a350c4bc326b9cea86763f480a97f9 firmware: arm_scmi: Add notification callbacks-registration

:::::: TO: Cristian Marussi <cristian.marussi@arm.com>
:::::: CC: Sudeep Holla <sudeep.holla@arm.com>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-09-24 10:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-24 10:04 drivers/firmware/arm_scmi/notify.c:942 scmi_bind_event_handler() warn: subtract is higher precedence than shift kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.