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: [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

             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.