All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/firmware/stratix10-svc.c:1119 stratix10_svc_add_async_client() error: Calling ida_alloc_max() with a 'max' argument which is a power of 2. -1 missing?
@ 2026-03-24  6:51 ` Dan Carpenter
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2026-03-24  5:14 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: Mahesh Rao <mahesh.rao@altera.com>
CC: Dinh Nguyen <dinguyen@kernel.org>
CC: Matthew Gerlach <matthew.gerlach@altera.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   c369299895a591d96745d6492d4888259b004a9e
commit: bcb9f4f0706147afc62c48533276a18fe7b8f354 firmware: stratix10-svc: Add support for async communication
date:   4 months ago
:::::: branch date: 31 hours ago
:::::: commit date: 4 months ago
config: arm64-randconfig-r072-20260324 (https://download.01.org/0day-ci/archive/20260324/202603241328.naBWhr1K-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.3.0
smatch: v0.5.0-9004-gb810ac53

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
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202603241328.naBWhr1K-lkp@intel.com/

New smatch warnings:
drivers/firmware/stratix10-svc.c:1119 stratix10_svc_add_async_client() error: Calling ida_alloc_max() with a 'max' argument which is a power of 2. -1 missing?
drivers/firmware/stratix10-svc.c:1256 stratix10_svc_async_send() error: Calling ida_alloc_max() with a 'max' argument which is a power of 2. -1 missing?
drivers/firmware/stratix10-svc.c:1493 stratix10_svc_async_init() warn: always true condition '(res.a2 >= 0) => (0-u64max >= 0)'

Old smatch warnings:
drivers/firmware/stratix10-svc.c:1302 stratix10_svc_async_send() warn: inconsistent indenting
drivers/firmware/stratix10-svc.c:1630 stratix10_svc_send() warn: inconsistent indenting

vim +/max +1119 drivers/firmware/stratix10-svc.c

7ca5ce896524f52 Richard Gong 2018-11-13  1062  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1063  /**
bcb9f4f0706147a Mahesh Rao   2025-10-27  1064   * stratix10_svc_add_async_client - Add an asynchronous client to the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1065   * Stratix10 service channel.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1066   * @chan: Pointer to the Stratix10 service channel structure.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1067   * @use_unique_clientid: Boolean flag indicating whether to use a
bcb9f4f0706147a Mahesh Rao   2025-10-27  1068   * unique client ID.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1069   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1070   * This function adds an asynchronous client to the specified
bcb9f4f0706147a Mahesh Rao   2025-10-27  1071   * Stratix10 service channel. If the `use_unique_clientid` flag is
bcb9f4f0706147a Mahesh Rao   2025-10-27  1072   * set to true, a unique client ID is allocated for the asynchronous
bcb9f4f0706147a Mahesh Rao   2025-10-27  1073   * channel. Otherwise, a common asynchronous channel is used.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1074   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1075   * Return: 0 on success, or a negative error code on failure:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1076   *         -EINVAL if the channel is NULL or the async controller is
bcb9f4f0706147a Mahesh Rao   2025-10-27  1077   *         not initialized.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1078   *         -EALREADY if the async channel is already allocated.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1079   *         -ENOMEM if memory allocation fails.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1080   *         Other negative values if ID allocation fails.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1081   */
bcb9f4f0706147a Mahesh Rao   2025-10-27  1082  int stratix10_svc_add_async_client(struct stratix10_svc_chan *chan,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1083  				   bool use_unique_clientid)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1084  {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1085  	struct stratix10_svc_controller *ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1086  	struct stratix10_async_ctrl *actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1087  	struct stratix10_async_chan *achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1088  	int ret = 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1089  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1090  	if (!chan)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1091  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1092  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1093  	ctrl = chan->ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1094  	actrl = &ctrl->actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1095  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1096  	if (!actrl->initialized) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1097  		dev_err(ctrl->dev, "Async controller not initialized\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1098  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1099  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1100  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1101  	if (chan->async_chan) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1102  		dev_err(ctrl->dev, "async channel already allocated\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1103  		return -EALREADY;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1104  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1105  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1106  	if (use_unique_clientid &&
bcb9f4f0706147a Mahesh Rao   2025-10-27  1107  	    atomic_read(&actrl->common_achan_refcount) > 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1108  		chan->async_chan = actrl->common_async_chan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1109  		atomic_inc(&actrl->common_achan_refcount);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1110  		return 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1111  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1112  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1113  	achan = kzalloc(sizeof(*achan), GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1114  	if (!achan)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1115  		return -ENOMEM;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1116  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1117  	ida_init(&achan->job_id_pool);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1118  
bcb9f4f0706147a Mahesh Rao   2025-10-27 @1119  	ret = ida_alloc_max(&actrl->async_id_pool, MAX_SDM_CLIENT_IDS,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1120  			    GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1121  	if (ret < 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1122  		dev_err(ctrl->dev,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1123  			"Failed to allocate async client id\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1124  		ida_destroy(&achan->job_id_pool);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1125  		kfree(achan);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1126  		return ret;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1127  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1128  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1129  	achan->async_client_id = ret;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1130  	chan->async_chan = achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1131  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1132  	if (use_unique_clientid &&
bcb9f4f0706147a Mahesh Rao   2025-10-27  1133  	    atomic_read(&actrl->common_achan_refcount) == 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1134  		actrl->common_async_chan = achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1135  		atomic_inc(&actrl->common_achan_refcount);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1136  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1137  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1138  	return 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1139  }
bcb9f4f0706147a Mahesh Rao   2025-10-27  1140  EXPORT_SYMBOL_GPL(stratix10_svc_add_async_client);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1141  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1142  /**
bcb9f4f0706147a Mahesh Rao   2025-10-27  1143   * stratix10_svc_remove_async_client - Remove an asynchronous client
bcb9f4f0706147a Mahesh Rao   2025-10-27  1144   *                                     from the Stratix10 service
bcb9f4f0706147a Mahesh Rao   2025-10-27  1145   *                                     channel.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1146   * @chan: Pointer to the Stratix10 service channel structure.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1147   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1148   * This function removes an asynchronous client associated with the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1149   * given service channel. It checks if the channel and the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1150   * asynchronous channel are valid, and then proceeds to decrement
bcb9f4f0706147a Mahesh Rao   2025-10-27  1151   * the reference count for the common asynchronous channel if
bcb9f4f0706147a Mahesh Rao   2025-10-27  1152   * applicable. If the reference count reaches zero, it destroys the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1153   * job ID pool and deallocates the asynchronous client ID. For
bcb9f4f0706147a Mahesh Rao   2025-10-27  1154   * non-common asynchronous channels, it directly destroys the job ID
bcb9f4f0706147a Mahesh Rao   2025-10-27  1155   * pool, deallocates the asynchronous client ID, and frees the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1156   * memory allocated for the asynchronous channel.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1157   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1158   * Return: 0 on success, -EINVAL if the channel or asynchronous
bcb9f4f0706147a Mahesh Rao   2025-10-27  1159   *         channel is invalid.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1160   */
bcb9f4f0706147a Mahesh Rao   2025-10-27  1161  int stratix10_svc_remove_async_client(struct stratix10_svc_chan *chan)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1162  {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1163  	struct stratix10_svc_controller *ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1164  	struct stratix10_async_ctrl *actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1165  	struct stratix10_async_chan *achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1166  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1167  	if (!chan)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1168  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1169  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1170  	ctrl = chan->ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1171  	actrl = &ctrl->actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1172  	achan = chan->async_chan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1173  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1174  	if (!achan) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1175  		dev_err(ctrl->dev, "async channel not allocated\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1176  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1177  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1178  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1179  	if (achan == actrl->common_async_chan) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1180  		atomic_dec(&actrl->common_achan_refcount);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1181  		if (atomic_read(&actrl->common_achan_refcount) == 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1182  			ida_destroy(&achan->job_id_pool);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1183  			ida_free(&actrl->async_id_pool,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1184  				 achan->async_client_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1185  			kfree(achan);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1186  			actrl->common_async_chan = NULL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1187  		}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1188  	} else {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1189  		ida_destroy(&achan->job_id_pool);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1190  		ida_free(&actrl->async_id_pool, achan->async_client_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1191  		kfree(achan);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1192  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1193  	chan->async_chan = NULL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1194  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1195  	return 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1196  }
bcb9f4f0706147a Mahesh Rao   2025-10-27  1197  EXPORT_SYMBOL_GPL(stratix10_svc_remove_async_client);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1198  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1199  /**
bcb9f4f0706147a Mahesh Rao   2025-10-27  1200   * stratix10_svc_async_send - Send an asynchronous message to the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1201   *                            Stratix10 service
bcb9f4f0706147a Mahesh Rao   2025-10-27  1202   * @chan: Pointer to the service channel structure
bcb9f4f0706147a Mahesh Rao   2025-10-27  1203   * @msg: Pointer to the message to be sent
bcb9f4f0706147a Mahesh Rao   2025-10-27  1204   * @handler: Pointer to the handler for the asynchronous message
bcb9f4f0706147a Mahesh Rao   2025-10-27  1205   *           used by caller for later reference.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1206   * @cb: Callback function to be called upon completion
bcb9f4f0706147a Mahesh Rao   2025-10-27  1207   * @cb_arg: Argument to be passed to the callback function
bcb9f4f0706147a Mahesh Rao   2025-10-27  1208   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1209   * This function sends an asynchronous message to the SDM mailbox in
bcb9f4f0706147a Mahesh Rao   2025-10-27  1210   * EL3 secure firmware. It performs various checks and setups,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1211   * including allocating a job ID, setting up the transaction ID and
bcb9f4f0706147a Mahesh Rao   2025-10-27  1212   * packaging it to El3 firmware. The function handles different
bcb9f4f0706147a Mahesh Rao   2025-10-27  1213   * commands by setting up the appropriate arguments for the SMC call.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1214   * If the SMC call is successful, the handler is set up and the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1215   * function returns 0. If the SMC call fails, appropriate error
bcb9f4f0706147a Mahesh Rao   2025-10-27  1216   * handling is performed along with cleanup of resources.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1217   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1218   * Return: 0 on success, -EINVAL for invalid argument, -ENOMEM if
bcb9f4f0706147a Mahesh Rao   2025-10-27  1219   * memory is not available, -EAGAIN if EL3 firmware is busy, -EBADF
bcb9f4f0706147a Mahesh Rao   2025-10-27  1220   * if the message is rejected by EL3 firmware and -EIO on other
bcb9f4f0706147a Mahesh Rao   2025-10-27  1221   * errors from EL3 firmware.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1222   */
bcb9f4f0706147a Mahesh Rao   2025-10-27  1223  int stratix10_svc_async_send(struct stratix10_svc_chan *chan, void *msg,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1224  			     void **handler, async_callback_t cb, void *cb_arg)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1225  {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1226  	struct arm_smccc_1_2_regs args = { 0 }, res = { 0 };
bcb9f4f0706147a Mahesh Rao   2025-10-27  1227  	struct stratix10_svc_async_handler *handle = NULL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1228  	struct stratix10_svc_client_msg *p_msg =
bcb9f4f0706147a Mahesh Rao   2025-10-27  1229  		(struct stratix10_svc_client_msg *)msg;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1230  	struct stratix10_svc_controller *ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1231  	struct stratix10_async_ctrl *actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1232  	struct stratix10_async_chan *achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1233  	int ret = 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1234  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1235  	if (!chan || !msg || !handler)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1236  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1237  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1238  	achan = chan->async_chan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1239  	ctrl = chan->ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1240  	actrl = &ctrl->actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1241  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1242  	if (!actrl->initialized) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1243  		dev_err(ctrl->dev, "Async controller not initialized\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1244  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1245  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1246  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1247  	if (!achan) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1248  		dev_err(ctrl->dev, "Async channel not allocated\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1249  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1250  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1251  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1252  	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1253  	if (!handle)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1254  		return -ENOMEM;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1255  
bcb9f4f0706147a Mahesh Rao   2025-10-27 @1256  	ret = ida_alloc_max(&achan->job_id_pool, MAX_SDM_JOB_IDS,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1257  			    GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1258  	if (ret < 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1259  		dev_err(ctrl->dev, "Failed to allocate job id\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1260  		kfree(handle);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1261  		return -ENOMEM;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1262  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1263  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1264  	handle->transaction_id =
bcb9f4f0706147a Mahesh Rao   2025-10-27  1265  		STRATIX10_SET_TRANSACTIONID(achan->async_client_id, ret);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1266  	handle->cb = cb;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1267  	handle->msg = p_msg;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1268  	handle->cb_arg = cb_arg;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1269  	handle->achan = achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1270  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1271  	/*set the transaction jobid in args.a1*/
bcb9f4f0706147a Mahesh Rao   2025-10-27  1272  	args.a1 =
bcb9f4f0706147a Mahesh Rao   2025-10-27  1273  		STRATIX10_SIP_SMC_SET_TRANSACTIONID_X1(handle->transaction_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1274  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1275  	switch (p_msg->command) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1276  	default:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1277  		dev_err(ctrl->dev, "Invalid command ,%d\n", p_msg->command);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1278  		ret = -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1279  		goto deallocate_id;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1280  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1281  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1282  	/**
bcb9f4f0706147a Mahesh Rao   2025-10-27  1283  	 * There is a chance that during the execution of async_send()
bcb9f4f0706147a Mahesh Rao   2025-10-27  1284  	 * in one core, an interrupt might be received in another core;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1285  	 * to mitigate this we are adding the handle to the DB and then
bcb9f4f0706147a Mahesh Rao   2025-10-27  1286  	 * send the smc call. If the smc call is rejected or busy then
bcb9f4f0706147a Mahesh Rao   2025-10-27  1287  	 * we will deallocate the handle for the client to retry again.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1288  	 */
bcb9f4f0706147a Mahesh Rao   2025-10-27  1289  	scoped_guard(spinlock_bh, &actrl->trx_list_lock) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1290  		hash_add(actrl->trx_list, &handle->next,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1291  			 handle->transaction_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1292  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1293  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1294  	actrl->invoke_fn(actrl, &args, &res);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1295  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1296  	switch (res.a0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1297  	case INTEL_SIP_SMC_STATUS_OK:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1298  		dev_dbg(ctrl->dev,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1299  			"Async message sent with transaction_id 0x%02x\n",
bcb9f4f0706147a Mahesh Rao   2025-10-27  1300  			handle->transaction_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1301  			*handler = handle;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1302  		return 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1303  	case INTEL_SIP_SMC_STATUS_BUSY:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1304  		dev_warn(ctrl->dev, "Mailbox is busy, try after some time\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1305  		ret = -EAGAIN;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1306  		break;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1307  	case INTEL_SIP_SMC_STATUS_REJECTED:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1308  		dev_err(ctrl->dev, "Async message rejected\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1309  		ret = -EBADF;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1310  		break;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1311  	default:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1312  		dev_err(ctrl->dev,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1313  			"Failed to send async message ,got status as %ld\n",
bcb9f4f0706147a Mahesh Rao   2025-10-27  1314  			res.a0);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1315  		ret = -EIO;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1316  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1317  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1318  	scoped_guard(spinlock_bh, &actrl->trx_list_lock) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1319  		hash_del(&handle->next);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1320  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1321  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1322  deallocate_id:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1323  	ida_free(&achan->job_id_pool,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1324  		 STRATIX10_GET_JOBID(handle->transaction_id));
bcb9f4f0706147a Mahesh Rao   2025-10-27  1325  	kfree(handle);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1326  	return ret;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1327  }
bcb9f4f0706147a Mahesh Rao   2025-10-27  1328  EXPORT_SYMBOL_GPL(stratix10_svc_async_send);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1329  /**
bcb9f4f0706147a Mahesh Rao   2025-10-27  1330   * stratix10_svc_async_poll - Polls the status of an asynchronous
bcb9f4f0706147a Mahesh Rao   2025-10-27  1331   * transaction.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1332   * @chan: Pointer to the service channel structure.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1333   * @tx_handle: Handle to the transaction being polled.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1334   * @data: Pointer to the callback data structure.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1335   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1336   * This function polls the status of an asynchronous transaction
bcb9f4f0706147a Mahesh Rao   2025-10-27  1337   * identified by the given transaction handle. It ensures that the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1338   * necessary structures are initialized and valid before proceeding
bcb9f4f0706147a Mahesh Rao   2025-10-27  1339   * with the poll operation. The function sets up the necessary
bcb9f4f0706147a Mahesh Rao   2025-10-27  1340   * arguments for the SMC call, invokes the call, and prepares the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1341   * response data if the call is successful. If the call fails, the
bcb9f4f0706147a Mahesh Rao   2025-10-27  1342   * function returns the error mapped to the SVC status error.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1343   *
bcb9f4f0706147a Mahesh Rao   2025-10-27  1344   * Return: 0 on success, -EINVAL if any input parameter is invalid,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1345   *         -EAGAIN if the transaction is still in progress,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1346   *         -EPERM if the command is invalid, or other negative
bcb9f4f0706147a Mahesh Rao   2025-10-27  1347   *         error codes on failure.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1348   */
bcb9f4f0706147a Mahesh Rao   2025-10-27  1349  int stratix10_svc_async_poll(struct stratix10_svc_chan *chan,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1350  			     void *tx_handle,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1351  			     struct stratix10_svc_cb_data *data)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1352  {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1353  	struct stratix10_svc_async_handler *handle;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1354  	struct arm_smccc_1_2_regs args = { 0 };
bcb9f4f0706147a Mahesh Rao   2025-10-27  1355  	struct stratix10_svc_controller *ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1356  	struct stratix10_async_ctrl *actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1357  	struct stratix10_async_chan *achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1358  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1359  	if (!chan || !tx_handle || !data)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1360  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1361  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1362  	ctrl = chan->ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1363  	actrl = &ctrl->actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1364  	achan = chan->async_chan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1365  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1366  	if (!achan) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1367  		dev_err(ctrl->dev, "Async channel not allocated\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1368  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1369  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1370  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1371  	handle = (struct stratix10_svc_async_handler *)tx_handle;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1372  	scoped_guard(spinlock_bh, &actrl->trx_list_lock) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1373  		if (!hash_hashed(&handle->next)) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1374  			dev_err(ctrl->dev, "Invalid transaction handler");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1375  			return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1376  		}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1377  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1378  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1379  	args.a0 = INTEL_SIP_SMC_ASYNC_POLL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1380  	args.a1 =
bcb9f4f0706147a Mahesh Rao   2025-10-27  1381  		STRATIX10_SIP_SMC_SET_TRANSACTIONID_X1(handle->transaction_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1382  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1383  	actrl->invoke_fn(actrl, &args, &handle->res);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1384  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1385  	/*clear data for response*/
bcb9f4f0706147a Mahesh Rao   2025-10-27  1386  	memset(data, 0, sizeof(*data));
bcb9f4f0706147a Mahesh Rao   2025-10-27  1387  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1388  	if (handle->res.a0 == INTEL_SIP_SMC_STATUS_OK) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1389  		return 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1390  	} else if (handle->res.a0 == INTEL_SIP_SMC_STATUS_BUSY) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1391  		dev_dbg(ctrl->dev, "async message is still in progress\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1392  		return -EAGAIN;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1393  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1394  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1395  	dev_err(ctrl->dev,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1396  		"Failed to poll async message ,got status as %ld\n",
bcb9f4f0706147a Mahesh Rao   2025-10-27  1397  		handle->res.a0);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1398  	return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1399  }
bcb9f4f0706147a Mahesh Rao   2025-10-27  1400  EXPORT_SYMBOL_GPL(stratix10_svc_async_poll);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1401  

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

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

* drivers/firmware/stratix10-svc.c:1119 stratix10_svc_add_async_client() error: Calling ida_alloc_max() with a 'max' argument which is a power of 2. -1 missing?
@ 2026-03-24  6:51 ` Dan Carpenter
  0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2026-03-24  6:51 UTC (permalink / raw)
  To: oe-kbuild, Mahesh Rao
  Cc: lkp, oe-kbuild-all, linux-kernel, Dinh Nguyen, Matthew Gerlach

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   c369299895a591d96745d6492d4888259b004a9e
commit: bcb9f4f0706147afc62c48533276a18fe7b8f354 firmware: stratix10-svc: Add support for async communication
config: arm64-randconfig-r072-20260324 (https://download.01.org/0day-ci/archive/20260324/202603241328.naBWhr1K-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.3.0
smatch: v0.5.0-9004-gb810ac53

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
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202603241328.naBWhr1K-lkp@intel.com/

New smatch warnings:
drivers/firmware/stratix10-svc.c:1119 stratix10_svc_add_async_client() error: Calling ida_alloc_max() with a 'max' argument which is a power of 2. -1 missing?
drivers/firmware/stratix10-svc.c:1256 stratix10_svc_async_send() error: Calling ida_alloc_max() with a 'max' argument which is a power of 2. -1 missing?

Old smatch warnings:
drivers/firmware/stratix10-svc.c:1302 stratix10_svc_async_send() warn: inconsistent indenting
drivers/firmware/stratix10-svc.c:1630 stratix10_svc_send() warn: inconsistent indenting

vim +/max +1119 drivers/firmware/stratix10-svc.c

bcb9f4f0706147a Mahesh Rao   2025-10-27  1082  int stratix10_svc_add_async_client(struct stratix10_svc_chan *chan,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1083  				   bool use_unique_clientid)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1084  {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1085  	struct stratix10_svc_controller *ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1086  	struct stratix10_async_ctrl *actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1087  	struct stratix10_async_chan *achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1088  	int ret = 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1089  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1090  	if (!chan)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1091  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1092  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1093  	ctrl = chan->ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1094  	actrl = &ctrl->actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1095  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1096  	if (!actrl->initialized) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1097  		dev_err(ctrl->dev, "Async controller not initialized\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1098  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1099  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1100  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1101  	if (chan->async_chan) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1102  		dev_err(ctrl->dev, "async channel already allocated\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1103  		return -EALREADY;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1104  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1105  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1106  	if (use_unique_clientid &&
bcb9f4f0706147a Mahesh Rao   2025-10-27  1107  	    atomic_read(&actrl->common_achan_refcount) > 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1108  		chan->async_chan = actrl->common_async_chan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1109  		atomic_inc(&actrl->common_achan_refcount);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1110  		return 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1111  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1112  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1113  	achan = kzalloc(sizeof(*achan), GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1114  	if (!achan)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1115  		return -ENOMEM;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1116  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1117  	ida_init(&achan->job_id_pool);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1118  
bcb9f4f0706147a Mahesh Rao   2025-10-27 @1119  	ret = ida_alloc_max(&actrl->async_id_pool, MAX_SDM_CLIENT_IDS,
                                                                                           ^^^^^^^^^^^^^^^^^^
This should be "MAX_SDM_CLIENT_IDS - 1".

bcb9f4f0706147a Mahesh Rao   2025-10-27  1120  			    GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1121  	if (ret < 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1122  		dev_err(ctrl->dev,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1123  			"Failed to allocate async client id\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1124  		ida_destroy(&achan->job_id_pool);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1125  		kfree(achan);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1126  		return ret;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1127  	}

[ snip ]

bcb9f4f0706147a Mahesh Rao   2025-10-27  1223  int stratix10_svc_async_send(struct stratix10_svc_chan *chan, void *msg,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1224  			     void **handler, async_callback_t cb, void *cb_arg)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1225  {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1226  	struct arm_smccc_1_2_regs args = { 0 }, res = { 0 };
bcb9f4f0706147a Mahesh Rao   2025-10-27  1227  	struct stratix10_svc_async_handler *handle = NULL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1228  	struct stratix10_svc_client_msg *p_msg =
bcb9f4f0706147a Mahesh Rao   2025-10-27  1229  		(struct stratix10_svc_client_msg *)msg;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1230  	struct stratix10_svc_controller *ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1231  	struct stratix10_async_ctrl *actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1232  	struct stratix10_async_chan *achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1233  	int ret = 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1234  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1235  	if (!chan || !msg || !handler)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1236  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1237  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1238  	achan = chan->async_chan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1239  	ctrl = chan->ctrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1240  	actrl = &ctrl->actrl;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1241  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1242  	if (!actrl->initialized) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1243  		dev_err(ctrl->dev, "Async controller not initialized\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1244  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1245  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1246  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1247  	if (!achan) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1248  		dev_err(ctrl->dev, "Async channel not allocated\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1249  		return -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1250  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1251  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1252  	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1253  	if (!handle)
bcb9f4f0706147a Mahesh Rao   2025-10-27  1254  		return -ENOMEM;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1255  
bcb9f4f0706147a Mahesh Rao   2025-10-27 @1256  	ret = ida_alloc_max(&achan->job_id_pool, MAX_SDM_JOB_IDS,
                                                                                        ^^^^^^^^^^^^^^^^^^
"MAX_SDM_CLIENT_IDS - 1" as well.

bcb9f4f0706147a Mahesh Rao   2025-10-27  1257  			    GFP_KERNEL);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1258  	if (ret < 0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1259  		dev_err(ctrl->dev, "Failed to allocate job id\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1260  		kfree(handle);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1261  		return -ENOMEM;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1262  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1263  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1264  	handle->transaction_id =
bcb9f4f0706147a Mahesh Rao   2025-10-27  1265  		STRATIX10_SET_TRANSACTIONID(achan->async_client_id, ret);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1266  	handle->cb = cb;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1267  	handle->msg = p_msg;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1268  	handle->cb_arg = cb_arg;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1269  	handle->achan = achan;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1270  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1271  	/*set the transaction jobid in args.a1*/
bcb9f4f0706147a Mahesh Rao   2025-10-27  1272  	args.a1 =
bcb9f4f0706147a Mahesh Rao   2025-10-27  1273  		STRATIX10_SIP_SMC_SET_TRANSACTIONID_X1(handle->transaction_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1274  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1275  	switch (p_msg->command) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1276  	default:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1277  		dev_err(ctrl->dev, "Invalid command ,%d\n", p_msg->command);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1278  		ret = -EINVAL;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1279  		goto deallocate_id;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1280  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1281  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1282  	/**
bcb9f4f0706147a Mahesh Rao   2025-10-27  1283  	 * There is a chance that during the execution of async_send()
bcb9f4f0706147a Mahesh Rao   2025-10-27  1284  	 * in one core, an interrupt might be received in another core;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1285  	 * to mitigate this we are adding the handle to the DB and then
bcb9f4f0706147a Mahesh Rao   2025-10-27  1286  	 * send the smc call. If the smc call is rejected or busy then
bcb9f4f0706147a Mahesh Rao   2025-10-27  1287  	 * we will deallocate the handle for the client to retry again.
bcb9f4f0706147a Mahesh Rao   2025-10-27  1288  	 */
bcb9f4f0706147a Mahesh Rao   2025-10-27  1289  	scoped_guard(spinlock_bh, &actrl->trx_list_lock) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1290  		hash_add(actrl->trx_list, &handle->next,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1291  			 handle->transaction_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1292  	}
bcb9f4f0706147a Mahesh Rao   2025-10-27  1293  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1294  	actrl->invoke_fn(actrl, &args, &res);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1295  
bcb9f4f0706147a Mahesh Rao   2025-10-27  1296  	switch (res.a0) {
bcb9f4f0706147a Mahesh Rao   2025-10-27  1297  	case INTEL_SIP_SMC_STATUS_OK:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1298  		dev_dbg(ctrl->dev,
bcb9f4f0706147a Mahesh Rao   2025-10-27  1299  			"Async message sent with transaction_id 0x%02x\n",
bcb9f4f0706147a Mahesh Rao   2025-10-27  1300  			handle->transaction_id);
bcb9f4f0706147a Mahesh Rao   2025-10-27  1301  			*handler = handle;
                                                                ^^^^^^^^^^^^^^^^^^
This line is indented one tab too far.

bcb9f4f0706147a Mahesh Rao   2025-10-27  1302  		return 0;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1303  	case INTEL_SIP_SMC_STATUS_BUSY:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1304  		dev_warn(ctrl->dev, "Mailbox is busy, try after some time\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1305  		ret = -EAGAIN;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1306  		break;
bcb9f4f0706147a Mahesh Rao   2025-10-27  1307  	case INTEL_SIP_SMC_STATUS_REJECTED:
bcb9f4f0706147a Mahesh Rao   2025-10-27  1308  		dev_err(ctrl->dev, "Async message rejected\n");
bcb9f4f0706147a Mahesh Rao   2025-10-27  1309  		ret = -EBADF;

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


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

end of thread, other threads:[~2026-03-24  6:51 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-24  5:14 drivers/firmware/stratix10-svc.c:1119 stratix10_svc_add_async_client() error: Calling ida_alloc_max() with a 'max' argument which is a power of 2. -1 missing? kernel test robot
2026-03-24  6:51 ` Dan Carpenter

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.