From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [linux-next:pending-fixes 350/550] drivers/scsi/mpi3mr/mpi3mr_app.c:2834 mpi3mr_bsg_process_mpt_cmds() warn: inconsistent returns '&mrioc->bsg_cmds.mutex'.
Date: Mon, 9 Dec 2024 12:00:40 +0800 [thread overview]
Message-ID: <202412071034.OF3x0CTb-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Ranjan Kumar <ranjan.kumar@broadcom.com>
CC: "Martin K. Petersen" <martin.petersen@oracle.com>
CC: Sumit Saxena <sumit.saxena@broadcom.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git pending-fixes
head: 2152e8397622d3783e947ca02ff62d94bc5b8f9e
commit: 367ac16e5ff2dcd6b7f00a8f94e6ba98875cb397 [350/550] scsi: mpi3mr: Synchronize access to ioctl data buffer
:::::: branch date: 15 hours ago
:::::: commit date: 2 days ago
config: i386-randconfig-141-20241206 (https://download.01.org/0day-ci/archive/20241207/202412071034.OF3x0CTb-lkp@intel.com/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
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/202412071034.OF3x0CTb-lkp@intel.com/
New smatch warnings:
drivers/scsi/mpi3mr/mpi3mr_app.c:2834 mpi3mr_bsg_process_mpt_cmds() warn: inconsistent returns '&mrioc->bsg_cmds.mutex'.
Old smatch warnings:
drivers/scsi/mpi3mr/mpi3mr_app.c:1800 mpi3mr_bsg_build_sgl() warn: missing unwind goto?
drivers/scsi/mpi3mr/mpi3mr_app.c:1800 mpi3mr_bsg_build_sgl() warn: missing unwind goto?
drivers/scsi/mpi3mr/mpi3mr_app.c:1800 mpi3mr_bsg_build_sgl() warn: missing unwind goto?
drivers/scsi/mpi3mr/mpi3mr_app.c:2711 mpi3mr_bsg_process_mpt_cmds() warn: inconsistent indenting
vim +2834 drivers/scsi/mpi3mr/mpi3mr_app.c
fb231d7deffb41 Chandrakanth patil 2023-12-06 2223
fb231d7deffb41 Chandrakanth patil 2023-12-06 2224 /**
fb231d7deffb41 Chandrakanth patil 2023-12-06 2225 * mpi3mr_map_data_buffer_dma - build dma descriptors for data
fb231d7deffb41 Chandrakanth patil 2023-12-06 2226 * buffers
fb231d7deffb41 Chandrakanth patil 2023-12-06 2227 * @mrioc: Adapter instance reference
fb231d7deffb41 Chandrakanth patil 2023-12-06 2228 * @drv_buf: buffer map descriptor
fb231d7deffb41 Chandrakanth patil 2023-12-06 2229 * @desc_count: Number of already consumed dma descriptors
fb231d7deffb41 Chandrakanth patil 2023-12-06 2230 *
fb231d7deffb41 Chandrakanth patil 2023-12-06 2231 * This function computes how many pre-allocated DMA descriptors
fb231d7deffb41 Chandrakanth patil 2023-12-06 2232 * are required for the given data buffer and if those number of
fb231d7deffb41 Chandrakanth patil 2023-12-06 2233 * descriptors are free, then setup the mapping of the scattered
fb231d7deffb41 Chandrakanth patil 2023-12-06 2234 * DMA address to the given data buffer, if the data direction
fb231d7deffb41 Chandrakanth patil 2023-12-06 2235 * of the buffer is DMA_TO_DEVICE then the actual data is copied to
fb231d7deffb41 Chandrakanth patil 2023-12-06 2236 * the DMA buffers
fb231d7deffb41 Chandrakanth patil 2023-12-06 2237 *
fb231d7deffb41 Chandrakanth patil 2023-12-06 2238 * Return: 0 on success, -1 on failure
fb231d7deffb41 Chandrakanth patil 2023-12-06 2239 */
fb231d7deffb41 Chandrakanth patil 2023-12-06 2240 static int mpi3mr_map_data_buffer_dma(struct mpi3mr_ioc *mrioc,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2241 struct mpi3mr_buf_map *drv_buf,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2242 u16 desc_count)
fb231d7deffb41 Chandrakanth patil 2023-12-06 2243 {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2244 u16 i, needed_desc = drv_buf->kern_buf_len / MPI3MR_IOCTL_SGE_SIZE;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2245 u32 buf_len = drv_buf->kern_buf_len, copied_len = 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2246
fb231d7deffb41 Chandrakanth patil 2023-12-06 2247 if (drv_buf->kern_buf_len % MPI3MR_IOCTL_SGE_SIZE)
fb231d7deffb41 Chandrakanth patil 2023-12-06 2248 needed_desc++;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2249 if ((needed_desc + desc_count) > MPI3MR_NUM_IOCTL_SGE) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2250 dprint_bsg_err(mrioc, "%s: DMA descriptor mapping error %d:%d:%d\n",
fb231d7deffb41 Chandrakanth patil 2023-12-06 2251 __func__, needed_desc, desc_count, MPI3MR_NUM_IOCTL_SGE);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2252 return -1;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2253 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2254 drv_buf->dma_desc = kzalloc(sizeof(*drv_buf->dma_desc) * needed_desc,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2255 GFP_KERNEL);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2256 if (!drv_buf->dma_desc)
fb231d7deffb41 Chandrakanth patil 2023-12-06 2257 return -1;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2258 for (i = 0; i < needed_desc; i++, desc_count++) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2259 drv_buf->dma_desc[i].addr = mrioc->ioctl_sge[desc_count].addr;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2260 drv_buf->dma_desc[i].dma_addr =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2261 mrioc->ioctl_sge[desc_count].dma_addr;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2262 if (buf_len < mrioc->ioctl_sge[desc_count].size)
fb231d7deffb41 Chandrakanth patil 2023-12-06 2263 drv_buf->dma_desc[i].size = buf_len;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2264 else
fb231d7deffb41 Chandrakanth patil 2023-12-06 2265 drv_buf->dma_desc[i].size =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2266 mrioc->ioctl_sge[desc_count].size;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2267 buf_len -= drv_buf->dma_desc[i].size;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2268 memset(drv_buf->dma_desc[i].addr, 0,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2269 mrioc->ioctl_sge[desc_count].size);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2270 if (drv_buf->data_dir == DMA_TO_DEVICE) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2271 memcpy(drv_buf->dma_desc[i].addr,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2272 drv_buf->bsg_buf + copied_len,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2273 drv_buf->dma_desc[i].size);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2274 copied_len += drv_buf->dma_desc[i].size;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2275 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2276 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2277 drv_buf->num_dma_desc = needed_desc;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2278 return 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2279 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2280 /**
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2281 * mpi3mr_bsg_process_mpt_cmds - MPI Pass through BSG handler
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2282 * @job: BSG job reference
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2283 *
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2284 * This function is the top level handler for MPI Pass through
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2285 * command, this does basic validation of the input data buffers,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2286 * identifies the given buffer types and MPI command, allocates
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2287 * DMAable memory for user given buffers, construstcs SGL
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2288 * properly and passes the command to the firmware.
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2289 *
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2290 * Once the MPI command is completed the driver copies the data
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2291 * if any and reply, sense information to user provided buffers.
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2292 * If the command is timed out then issues controller reset
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2293 * prior to returning.
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2294 *
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2295 * Return: 0 on success and proper error codes on failure
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2296 */
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2297
fb231d7deffb41 Chandrakanth patil 2023-12-06 2298 static long mpi3mr_bsg_process_mpt_cmds(struct bsg_job *job)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2299 {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2300 long rval = -EINVAL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2301 struct mpi3mr_ioc *mrioc = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2302 u8 *mpi_req = NULL, *sense_buff_k = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2303 u8 mpi_msg_size = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2304 struct mpi3mr_bsg_packet *bsg_req = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2305 struct mpi3mr_bsg_mptcmd *karg;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2306 struct mpi3mr_buf_entry *buf_entries = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2307 struct mpi3mr_buf_map *drv_bufs = NULL, *drv_buf_iter = NULL;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2308 u8 count, bufcnt = 0, is_rmcb = 0, is_rmrb = 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2309 u8 din_cnt = 0, dout_cnt = 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2310 u8 invalid_be = 0, erb_offset = 0xFF, mpirep_offset = 0xFF;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2311 u8 block_io = 0, nvme_fmt = 0, resp_code = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2312 struct mpi3_request_header *mpi_header = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2313 struct mpi3_status_reply_descriptor *status_desc;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2314 struct mpi3_scsi_task_mgmt_request *tm_req;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2315 u32 erbsz = MPI3MR_SENSE_BUF_SZ, tmplen;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2316 u16 dev_handle;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2317 struct mpi3mr_tgt_dev *tgtdev;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2318 struct mpi3mr_stgt_priv_data *stgt_priv = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2319 struct mpi3mr_bsg_in_reply_buf *bsg_reply_buf = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2320 u32 din_size = 0, dout_size = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2321 u8 *din_buf = NULL, *dout_buf = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2322 u8 *sgl_iter = NULL, *sgl_din_iter = NULL, *sgl_dout_iter = NULL;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2323 u16 rmc_size = 0, desc_count = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2324
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2325 bsg_req = job->request;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2326 karg = (struct mpi3mr_bsg_mptcmd *)&bsg_req->cmd.mptcmd;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2327
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2328 mrioc = mpi3mr_bsg_verify_adapter(karg->mrioc_id);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2329 if (!mrioc)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2330 return -ENODEV;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2331
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2332 if (mutex_lock_interruptible(&mrioc->bsg_cmds.mutex))
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2333 return -ERESTARTSYS;
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2334
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2335 if (mrioc->bsg_cmds.state & MPI3MR_CMD_PENDING) {
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2336 dprint_bsg_err(mrioc, "%s: command is in use\n", __func__);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2337 mutex_unlock(&mrioc->bsg_cmds.mutex);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2338 return -EAGAIN;
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2339 }
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2340
fb231d7deffb41 Chandrakanth patil 2023-12-06 2341 if (!mrioc->ioctl_sges_allocated) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2342 dprint_bsg_err(mrioc, "%s: DMA memory was not allocated\n",
fb231d7deffb41 Chandrakanth patil 2023-12-06 2343 __func__);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2344 return -ENOMEM;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2345 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2346
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2347 if (karg->timeout < MPI3MR_APP_DEFAULT_TIMEOUT)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2348 karg->timeout = MPI3MR_APP_DEFAULT_TIMEOUT;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2349
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2350 mpi_req = kzalloc(MPI3MR_ADMIN_REQ_FRAME_SZ, GFP_KERNEL);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2351 if (!mpi_req) {
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2352 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2353 return -ENOMEM;
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2354 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2355 mpi_header = (struct mpi3_request_header *)mpi_req;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2356
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2357 bufcnt = karg->buf_entry_list.num_of_entries;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2358 drv_bufs = kzalloc((sizeof(*drv_bufs) * bufcnt), GFP_KERNEL);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2359 if (!drv_bufs) {
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2360 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2361 rval = -ENOMEM;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2362 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2363 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2364
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2365 dout_buf = kzalloc(job->request_payload.payload_len,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2366 GFP_KERNEL);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2367 if (!dout_buf) {
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2368 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2369 rval = -ENOMEM;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2370 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2371 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2372
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2373 din_buf = kzalloc(job->reply_payload.payload_len,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2374 GFP_KERNEL);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2375 if (!din_buf) {
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2376 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2377 rval = -ENOMEM;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2378 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2379 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2380
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2381 sg_copy_to_buffer(job->request_payload.sg_list,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2382 job->request_payload.sg_cnt,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2383 dout_buf, job->request_payload.payload_len);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2384
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2385 buf_entries = karg->buf_entry_list.buf_entry;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2386 sgl_din_iter = din_buf;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2387 sgl_dout_iter = dout_buf;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2388 drv_buf_iter = drv_bufs;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2389
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2390 for (count = 0; count < bufcnt; count++, buf_entries++, drv_buf_iter++) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2391
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2392 switch (buf_entries->buf_type) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2393 case MPI3MR_BSG_BUFTYPE_RAIDMGMT_CMD:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2394 sgl_iter = sgl_dout_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2395 sgl_dout_iter += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2396 drv_buf_iter->data_dir = DMA_TO_DEVICE;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2397 is_rmcb = 1;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2398 if ((count != 0) || !buf_entries->buf_len)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2399 invalid_be = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2400 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2401 case MPI3MR_BSG_BUFTYPE_RAIDMGMT_RESP:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2402 sgl_iter = sgl_din_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2403 sgl_din_iter += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2404 drv_buf_iter->data_dir = DMA_FROM_DEVICE;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2405 is_rmrb = 1;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2406 if (count != 1 || !is_rmcb || !buf_entries->buf_len)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2407 invalid_be = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2408 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2409 case MPI3MR_BSG_BUFTYPE_DATA_IN:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2410 sgl_iter = sgl_din_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2411 sgl_din_iter += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2412 drv_buf_iter->data_dir = DMA_FROM_DEVICE;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2413 din_cnt++;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2414 din_size += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2415 if ((din_cnt > 1) && !is_rmcb)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2416 invalid_be = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2417 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2418 case MPI3MR_BSG_BUFTYPE_DATA_OUT:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2419 sgl_iter = sgl_dout_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2420 sgl_dout_iter += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2421 drv_buf_iter->data_dir = DMA_TO_DEVICE;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2422 dout_cnt++;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2423 dout_size += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2424 if ((dout_cnt > 1) && !is_rmcb)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2425 invalid_be = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2426 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2427 case MPI3MR_BSG_BUFTYPE_MPI_REPLY:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2428 sgl_iter = sgl_din_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2429 sgl_din_iter += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2430 drv_buf_iter->data_dir = DMA_NONE;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2431 mpirep_offset = count;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2432 if (!buf_entries->buf_len)
fb231d7deffb41 Chandrakanth patil 2023-12-06 2433 invalid_be = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2434 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2435 case MPI3MR_BSG_BUFTYPE_ERR_RESPONSE:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2436 sgl_iter = sgl_din_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2437 sgl_din_iter += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2438 drv_buf_iter->data_dir = DMA_NONE;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2439 erb_offset = count;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2440 if (!buf_entries->buf_len)
fb231d7deffb41 Chandrakanth patil 2023-12-06 2441 invalid_be = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2442 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2443 case MPI3MR_BSG_BUFTYPE_MPI_REQUEST:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2444 sgl_iter = sgl_dout_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2445 sgl_dout_iter += buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2446 drv_buf_iter->data_dir = DMA_NONE;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2447 mpi_msg_size = buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2448 if ((!mpi_msg_size || (mpi_msg_size % 4)) ||
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2449 (mpi_msg_size > MPI3MR_ADMIN_REQ_FRAME_SZ)) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2450 dprint_bsg_err(mrioc, "%s: invalid MPI message size\n",
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2451 __func__);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2452 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2453 rval = -EINVAL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2454 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2455 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2456 memcpy(mpi_req, sgl_iter, buf_entries->buf_len);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2457 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2458 default:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2459 invalid_be = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2460 break;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2461 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2462 if (invalid_be) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2463 dprint_bsg_err(mrioc, "%s: invalid buffer entries passed\n",
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2464 __func__);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2465 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2466 rval = -EINVAL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2467 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2468 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2469
fb231d7deffb41 Chandrakanth patil 2023-12-06 2470 if (sgl_dout_iter > (dout_buf + job->request_payload.payload_len)) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2471 dprint_bsg_err(mrioc, "%s: data_out buffer length mismatch\n",
fb231d7deffb41 Chandrakanth patil 2023-12-06 2472 __func__);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2473 mutex_unlock(&mrioc->bsg_cmds.mutex);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2474 rval = -EINVAL;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2475 goto out;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2476 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2477 if (sgl_din_iter > (din_buf + job->reply_payload.payload_len)) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2478 dprint_bsg_err(mrioc, "%s: data_in buffer length mismatch\n",
fb231d7deffb41 Chandrakanth patil 2023-12-06 2479 __func__);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2480 mutex_unlock(&mrioc->bsg_cmds.mutex);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2481 rval = -EINVAL;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2482 goto out;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2483 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2484
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2485 drv_buf_iter->bsg_buf = sgl_iter;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2486 drv_buf_iter->bsg_buf_len = buf_entries->buf_len;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2487 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2488
fb231d7deffb41 Chandrakanth patil 2023-12-06 2489 if (is_rmcb && ((din_size + dout_size) > MPI3MR_MAX_APP_XFER_SIZE)) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2490 dprint_bsg_err(mrioc, "%s:%d: invalid data transfer size passed for function 0x%x din_size = %d, dout_size = %d\n",
fb231d7deffb41 Chandrakanth patil 2023-12-06 2491 __func__, __LINE__, mpi_header->function, din_size,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2492 dout_size);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2493 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2494 rval = -EINVAL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2495 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2496 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2497
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2498 if (din_size > MPI3MR_MAX_APP_XFER_SIZE) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2499 dprint_bsg_err(mrioc,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2500 "%s:%d: invalid data transfer size passed for function 0x%x din_size=%d\n",
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2501 __func__, __LINE__, mpi_header->function, din_size);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2502 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2503 rval = -EINVAL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2504 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2505 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2506 if (dout_size > MPI3MR_MAX_APP_XFER_SIZE) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2507 dprint_bsg_err(mrioc,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2508 "%s:%d: invalid data transfer size passed for function 0x%x dout_size = %d\n",
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2509 __func__, __LINE__, mpi_header->function, dout_size);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2510 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2511 rval = -EINVAL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2512 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2513 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2514
fb231d7deffb41 Chandrakanth patil 2023-12-06 2515 if (mpi_header->function == MPI3_BSG_FUNCTION_SMP_PASSTHROUGH) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2516 if (din_size > MPI3MR_IOCTL_SGE_SIZE ||
fb231d7deffb41 Chandrakanth patil 2023-12-06 2517 dout_size > MPI3MR_IOCTL_SGE_SIZE) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2518 dprint_bsg_err(mrioc, "%s:%d: invalid message size passed:%d:%d:%d:%d\n",
fb231d7deffb41 Chandrakanth patil 2023-12-06 2519 __func__, __LINE__, din_cnt, dout_cnt, din_size,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2520 dout_size);
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2521 mutex_unlock(&mrioc->bsg_cmds.mutex);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2522 rval = -EINVAL;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2523 goto out;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2524 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2525 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2526
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2527 drv_buf_iter = drv_bufs;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2528 for (count = 0; count < bufcnt; count++, drv_buf_iter++) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2529 if (drv_buf_iter->data_dir == DMA_NONE)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2530 continue;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2531
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2532 drv_buf_iter->kern_buf_len = drv_buf_iter->bsg_buf_len;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2533 if (is_rmcb && !count) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2534 drv_buf_iter->kern_buf_len =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2535 mrioc->ioctl_chain_sge.size;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2536 drv_buf_iter->kern_buf =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2537 mrioc->ioctl_chain_sge.addr;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2538 drv_buf_iter->kern_buf_dma =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2539 mrioc->ioctl_chain_sge.dma_addr;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2540 drv_buf_iter->dma_desc = NULL;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2541 drv_buf_iter->num_dma_desc = 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2542 memset(drv_buf_iter->kern_buf, 0,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2543 drv_buf_iter->kern_buf_len);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2544 tmplen = min(drv_buf_iter->kern_buf_len,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2545 drv_buf_iter->bsg_buf_len);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2546 rmc_size = tmplen;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2547 memcpy(drv_buf_iter->kern_buf, drv_buf_iter->bsg_buf, tmplen);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2548 } else if (is_rmrb && (count == 1)) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2549 drv_buf_iter->kern_buf_len =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2550 mrioc->ioctl_resp_sge.size;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2551 drv_buf_iter->kern_buf =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2552 mrioc->ioctl_resp_sge.addr;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2553 drv_buf_iter->kern_buf_dma =
fb231d7deffb41 Chandrakanth patil 2023-12-06 2554 mrioc->ioctl_resp_sge.dma_addr;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2555 drv_buf_iter->dma_desc = NULL;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2556 drv_buf_iter->num_dma_desc = 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2557 memset(drv_buf_iter->kern_buf, 0,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2558 drv_buf_iter->kern_buf_len);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2559 tmplen = min(drv_buf_iter->kern_buf_len,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2560 drv_buf_iter->bsg_buf_len);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2561 drv_buf_iter->kern_buf_len = tmplen;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2562 memset(drv_buf_iter->bsg_buf, 0,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2563 drv_buf_iter->bsg_buf_len);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2564 } else {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2565 if (!drv_buf_iter->kern_buf_len)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2566 continue;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2567 if (mpi3mr_map_data_buffer_dma(mrioc, drv_buf_iter, desc_count)) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2568 rval = -ENOMEM;
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2569 mutex_unlock(&mrioc->bsg_cmds.mutex);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2570 dprint_bsg_err(mrioc, "%s:%d: mapping data buffers failed\n",
fb231d7deffb41 Chandrakanth patil 2023-12-06 2571 __func__, __LINE__);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2572 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2573 }
fb231d7deffb41 Chandrakanth patil 2023-12-06 2574 desc_count += drv_buf_iter->num_dma_desc;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2575 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2576 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2577
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2578 if (erb_offset != 0xFF) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2579 sense_buff_k = kzalloc(erbsz, GFP_KERNEL);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2580 if (!sense_buff_k) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2581 rval = -ENOMEM;
367ac16e5ff2dc Ranjan Kumar 2024-11-11 2582 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2583 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2584 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2585 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2586
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2587 if (mrioc->unrecoverable) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2588 dprint_bsg_err(mrioc, "%s: unrecoverable controller\n",
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2589 __func__);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2590 rval = -EFAULT;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2591 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2592 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2593 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2594 if (mrioc->reset_in_progress) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2595 dprint_bsg_err(mrioc, "%s: reset in progress\n", __func__);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2596 rval = -EAGAIN;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2597 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2598 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2599 }
1c342b0548e3f5 Sumit Saxena 2024-06-27 2600 if (mrioc->stop_bsgs || mrioc->block_on_pci_err) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2601 dprint_bsg_err(mrioc, "%s: bsgs are blocked\n", __func__);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2602 rval = -EAGAIN;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2603 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2604 goto out;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2605 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2606
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2607 if (mpi_header->function == MPI3_BSG_FUNCTION_NVME_ENCAPSULATED) {
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2608 nvme_fmt = mpi3mr_get_nvme_data_fmt(
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2609 (struct mpi3_nvme_encapsulated_request *)mpi_req);
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2610 if (nvme_fmt == MPI3MR_NVME_DATA_FORMAT_PRP) {
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2611 if (mpi3mr_build_nvme_prp(mrioc,
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2612 (struct mpi3_nvme_encapsulated_request *)mpi_req,
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2613 drv_bufs, bufcnt)) {
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2614 rval = -ENOMEM;
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2615 mutex_unlock(&mrioc->bsg_cmds.mutex);
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2616 goto out;
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2617 }
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2618 } else if (nvme_fmt == MPI3MR_NVME_DATA_FORMAT_SGL1 ||
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2619 nvme_fmt == MPI3MR_NVME_DATA_FORMAT_SGL2) {
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2620 if (mpi3mr_build_nvme_sgl(mrioc,
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2621 (struct mpi3_nvme_encapsulated_request *)mpi_req,
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2622 drv_bufs, bufcnt)) {
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2623 rval = -EINVAL;
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2624 mutex_unlock(&mrioc->bsg_cmds.mutex);
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2625 goto out;
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2626 }
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2627 } else {
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2628 dprint_bsg_err(mrioc,
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2629 "%s:invalid NVMe command format\n", __func__);
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2630 rval = -EINVAL;
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2631 mutex_unlock(&mrioc->bsg_cmds.mutex);
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2632 goto out;
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2633 }
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2634 } else {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2635 if (mpi3mr_bsg_build_sgl(mrioc, mpi_req, mpi_msg_size,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2636 drv_bufs, bufcnt, is_rmcb, is_rmrb,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2637 (dout_cnt + din_cnt))) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2638 dprint_bsg_err(mrioc, "%s: sgl build failed\n", __func__);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2639 rval = -EAGAIN;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2640 mutex_unlock(&mrioc->bsg_cmds.mutex);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2641 goto out;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2642 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2643 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2644
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2645 if (mpi_header->function == MPI3_BSG_FUNCTION_SCSI_TASK_MGMT) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2646 tm_req = (struct mpi3_scsi_task_mgmt_request *)mpi_req;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2647 if (tm_req->task_type !=
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2648 MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2649 dev_handle = tm_req->dev_handle;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2650 block_io = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2651 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2652 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2653 if (block_io) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2654 tgtdev = mpi3mr_get_tgtdev_by_handle(mrioc, dev_handle);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2655 if (tgtdev && tgtdev->starget && tgtdev->starget->hostdata) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2656 stgt_priv = (struct mpi3mr_stgt_priv_data *)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2657 tgtdev->starget->hostdata;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2658 atomic_inc(&stgt_priv->block_io);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2659 mpi3mr_tgtdev_put(tgtdev);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2660 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2661 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2662
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2663 mrioc->bsg_cmds.state = MPI3MR_CMD_PENDING;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2664 mrioc->bsg_cmds.is_waiting = 1;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2665 mrioc->bsg_cmds.callback = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2666 mrioc->bsg_cmds.is_sense = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2667 mrioc->bsg_cmds.sensebuf = sense_buff_k;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2668 memset(mrioc->bsg_cmds.reply, 0, mrioc->reply_sz);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2669 mpi_header->host_tag = cpu_to_le16(MPI3MR_HOSTTAG_BSG_CMDS);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2670 if (mrioc->logging_level & MPI3_DEBUG_BSG_INFO) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2671 dprint_bsg_info(mrioc,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2672 "%s: posting bsg request to the controller\n", __func__);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2673 dprint_dump(mpi_req, MPI3MR_ADMIN_REQ_FRAME_SZ,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2674 "bsg_mpi3_req");
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2675 if (mpi_header->function == MPI3_BSG_FUNCTION_MGMT_PASSTHROUGH) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2676 drv_buf_iter = &drv_bufs[0];
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2677 dprint_dump(drv_buf_iter->kern_buf,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2678 rmc_size, "mpi3_mgmt_req");
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2679 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2680 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2681
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2682 init_completion(&mrioc->bsg_cmds.done);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2683 rval = mpi3mr_admin_request_post(mrioc, mpi_req,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2684 MPI3MR_ADMIN_REQ_FRAME_SZ, 0);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2685
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2686
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2687 if (rval) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2688 mrioc->bsg_cmds.is_waiting = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2689 dprint_bsg_err(mrioc,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2690 "%s: posting bsg request is failed\n", __func__);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2691 rval = -EAGAIN;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2692 goto out_unlock;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2693 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2694 wait_for_completion_timeout(&mrioc->bsg_cmds.done,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2695 (karg->timeout * HZ));
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2696 if (block_io && stgt_priv)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2697 atomic_dec(&stgt_priv->block_io);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2698 if (!(mrioc->bsg_cmds.state & MPI3MR_CMD_COMPLETE)) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2699 mrioc->bsg_cmds.is_waiting = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2700 rval = -EAGAIN;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2701 if (mrioc->bsg_cmds.state & MPI3MR_CMD_RESET)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2702 goto out_unlock;
0a2714b787b911 Ranjan Kumar 2024-03-13 2703 if (((mpi_header->function != MPI3_FUNCTION_SCSI_IO) &&
0a2714b787b911 Ranjan Kumar 2024-03-13 2704 (mpi_header->function != MPI3_FUNCTION_NVME_ENCAPSULATED))
0a2714b787b911 Ranjan Kumar 2024-03-13 2705 || (mrioc->logging_level & MPI3_DEBUG_BSG_ERROR)) {
0a2714b787b911 Ranjan Kumar 2024-03-13 2706 ioc_info(mrioc, "%s: bsg request timedout after %d seconds\n",
0a2714b787b911 Ranjan Kumar 2024-03-13 2707 __func__, karg->timeout);
0a2714b787b911 Ranjan Kumar 2024-03-13 2708 if (!(mrioc->logging_level & MPI3_DEBUG_BSG_INFO)) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2709 dprint_dump(mpi_req, MPI3MR_ADMIN_REQ_FRAME_SZ,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2710 "bsg_mpi3_req");
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2711 if (mpi_header->function ==
0a2714b787b911 Ranjan Kumar 2024-03-13 2712 MPI3_FUNCTION_MGMT_PASSTHROUGH) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2713 drv_buf_iter = &drv_bufs[0];
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2714 dprint_dump(drv_buf_iter->kern_buf,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2715 rmc_size, "mpi3_mgmt_req");
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2716 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2717 }
0a2714b787b911 Ranjan Kumar 2024-03-13 2718 }
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2719 if ((mpi_header->function == MPI3_BSG_FUNCTION_NVME_ENCAPSULATED) ||
0a2714b787b911 Ranjan Kumar 2024-03-13 2720 (mpi_header->function == MPI3_BSG_FUNCTION_SCSI_IO)) {
0a2714b787b911 Ranjan Kumar 2024-03-13 2721 dprint_bsg_err(mrioc, "%s: bsg request timedout after %d seconds,\n"
0a2714b787b911 Ranjan Kumar 2024-03-13 2722 "issuing target reset to (0x%04x)\n", __func__,
0a2714b787b911 Ranjan Kumar 2024-03-13 2723 karg->timeout, mpi_header->function_dependent);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2724 mpi3mr_issue_tm(mrioc,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2725 MPI3_SCSITASKMGMT_TASKTYPE_TARGET_RESET,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2726 mpi_header->function_dependent, 0,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2727 MPI3MR_HOSTTAG_BLK_TMS, MPI3MR_RESETTM_TIMEOUT,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2728 &mrioc->host_tm_cmds, &resp_code, NULL);
0a2714b787b911 Ranjan Kumar 2024-03-13 2729 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2730 if (!(mrioc->bsg_cmds.state & MPI3MR_CMD_COMPLETE) &&
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2731 !(mrioc->bsg_cmds.state & MPI3MR_CMD_RESET))
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2732 mpi3mr_soft_reset_handler(mrioc,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2733 MPI3MR_RESET_FROM_APP_TIMEOUT, 1);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2734 goto out_unlock;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2735 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2736 dprint_bsg_info(mrioc, "%s: bsg request is completed\n", __func__);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2737
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2738 if (mrioc->prp_list_virt) {
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2739 dma_free_coherent(&mrioc->pdev->dev, mrioc->prp_sz,
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2740 mrioc->prp_list_virt, mrioc->prp_list_dma);
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2741 mrioc->prp_list_virt = NULL;
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2742 }
7dbd0dd8cde356 Sumit Saxena 2022-04-29 2743
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2744 if ((mrioc->bsg_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2745 != MPI3_IOCSTATUS_SUCCESS) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2746 dprint_bsg_info(mrioc,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2747 "%s: command failed, ioc_status(0x%04x) log_info(0x%08x)\n",
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2748 __func__,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2749 (mrioc->bsg_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK),
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2750 mrioc->bsg_cmds.ioc_loginfo);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2751 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2752
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2753 if ((mpirep_offset != 0xFF) &&
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2754 drv_bufs[mpirep_offset].bsg_buf_len) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2755 drv_buf_iter = &drv_bufs[mpirep_offset];
429846b4b6ce98 Shin'ichiro Kawasaki 2024-03-23 2756 drv_buf_iter->kern_buf_len = (sizeof(*bsg_reply_buf) +
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2757 mrioc->reply_sz);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2758 bsg_reply_buf = kzalloc(drv_buf_iter->kern_buf_len, GFP_KERNEL);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2759
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2760 if (!bsg_reply_buf) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2761 rval = -ENOMEM;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2762 goto out_unlock;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2763 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2764 if (mrioc->bsg_cmds.state & MPI3MR_CMD_REPLY_VALID) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2765 bsg_reply_buf->mpi_reply_type =
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2766 MPI3MR_BSG_MPI_REPLY_BUFTYPE_ADDRESS;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2767 memcpy(bsg_reply_buf->reply_buf,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2768 mrioc->bsg_cmds.reply, mrioc->reply_sz);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2769 } else {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2770 bsg_reply_buf->mpi_reply_type =
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2771 MPI3MR_BSG_MPI_REPLY_BUFTYPE_STATUS;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2772 status_desc = (struct mpi3_status_reply_descriptor *)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2773 bsg_reply_buf->reply_buf;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2774 status_desc->ioc_status = mrioc->bsg_cmds.ioc_status;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2775 status_desc->ioc_log_info = mrioc->bsg_cmds.ioc_loginfo;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2776 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2777 tmplen = min(drv_buf_iter->kern_buf_len,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2778 drv_buf_iter->bsg_buf_len);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2779 memcpy(drv_buf_iter->bsg_buf, bsg_reply_buf, tmplen);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2780 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2781
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2782 if (erb_offset != 0xFF && mrioc->bsg_cmds.sensebuf &&
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2783 mrioc->bsg_cmds.is_sense) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2784 drv_buf_iter = &drv_bufs[erb_offset];
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2785 tmplen = min(erbsz, drv_buf_iter->bsg_buf_len);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2786 memcpy(drv_buf_iter->bsg_buf, sense_buff_k, tmplen);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2787 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2788
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2789 drv_buf_iter = drv_bufs;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2790 for (count = 0; count < bufcnt; count++, drv_buf_iter++) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2791 if (drv_buf_iter->data_dir == DMA_NONE)
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2792 continue;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2793 if ((count == 1) && is_rmrb) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2794 memcpy(drv_buf_iter->bsg_buf,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2795 drv_buf_iter->kern_buf,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2796 drv_buf_iter->kern_buf_len);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2797 } else if (drv_buf_iter->data_dir == DMA_FROM_DEVICE) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2798 tmplen = 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2799 for (desc_count = 0;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2800 desc_count < drv_buf_iter->num_dma_desc;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2801 desc_count++) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2802 memcpy(((u8 *)drv_buf_iter->bsg_buf + tmplen),
fb231d7deffb41 Chandrakanth patil 2023-12-06 2803 drv_buf_iter->dma_desc[desc_count].addr,
fb231d7deffb41 Chandrakanth patil 2023-12-06 2804 drv_buf_iter->dma_desc[desc_count].size);
fb231d7deffb41 Chandrakanth patil 2023-12-06 2805 tmplen +=
fb231d7deffb41 Chandrakanth patil 2023-12-06 2806 drv_buf_iter->dma_desc[desc_count].size;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2807 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2808 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2809 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2810
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2811 out_unlock:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2812 if (din_buf) {
fb231d7deffb41 Chandrakanth patil 2023-12-06 2813 job->reply_payload_rcv_len =
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2814 sg_copy_from_buffer(job->reply_payload.sg_list,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2815 job->reply_payload.sg_cnt,
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2816 din_buf, job->reply_payload.payload_len);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2817 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2818 mrioc->bsg_cmds.is_sense = 0;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2819 mrioc->bsg_cmds.sensebuf = NULL;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2820 mrioc->bsg_cmds.state = MPI3MR_CMD_NOTUSED;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2821 mutex_unlock(&mrioc->bsg_cmds.mutex);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2822 out:
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2823 kfree(sense_buff_k);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2824 kfree(dout_buf);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2825 kfree(din_buf);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2826 kfree(mpi_req);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2827 if (drv_bufs) {
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2828 drv_buf_iter = drv_bufs;
fb231d7deffb41 Chandrakanth patil 2023-12-06 2829 for (count = 0; count < bufcnt; count++, drv_buf_iter++)
fb231d7deffb41 Chandrakanth patil 2023-12-06 2830 kfree(drv_buf_iter->dma_desc);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2831 kfree(drv_bufs);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2832 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2833 kfree(bsg_reply_buf);
506bc1a0d6ba62 Sumit Saxena 2022-04-29 @2834 return rval;
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2835 }
506bc1a0d6ba62 Sumit Saxena 2022-04-29 2836
:::::: The code at line 2834 was first introduced by commit
:::::: 506bc1a0d6ba626492c06e5632a3fbe202770fd2 scsi: mpi3mr: Add support for MPT commands
:::::: TO: Sumit Saxena <sumit.saxena@broadcom.com>
:::::: CC: Martin K. Petersen <martin.petersen@oracle.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2024-12-09 4:01 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-09 4:00 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-12-09 5:50 [linux-next:pending-fixes 350/550] drivers/scsi/mpi3mr/mpi3mr_app.c:2834 mpi3mr_bsg_process_mpt_cmds() warn: inconsistent returns '&mrioc->bsg_cmds.mutex' 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=202412071034.OF3x0CTb-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.