All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: 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?
Date: Tue, 24 Mar 2026 13:14:38 +0800	[thread overview]
Message-ID: <202603241328.naBWhr1K-lkp@intel.com> (raw)

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

WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@linaro.org>
To: oe-kbuild@lists.linux.dev, Mahesh Rao <mahesh.rao@altera.com>
Cc: lkp@intel.com, oe-kbuild-all@lists.linux.dev,
	linux-kernel@vger.kernel.org, Dinh Nguyen <dinguyen@kernel.org>,
	Matthew Gerlach <matthew.gerlach@altera.com>
Subject: 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?
Date: Tue, 24 Mar 2026 09:51:39 +0300	[thread overview]
Message-ID: <202603241328.naBWhr1K-lkp@intel.com> (raw)
Message-ID: <20260324065139.p5mY8VsPeVmpC71QRdFmHinrK7Ri3ReMI7fgtS1LBKQ@z> (raw)

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


             reply	other threads:[~2026-03-24  5:15 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-24  5:14 kernel test robot [this message]
2026-03-24  6:51 ` 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? Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202603241328.naBWhr1K-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=error27@gmail.com \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.