Commit 31548020 authored by Martin K. Petersen's avatar Martin K. Petersen
Browse files

Merge branch '5.14/scsi-fixes' into 5.15/scsi-staging



Resolve mpt3sas conflict between 5.14/scsi-fixes and 5.15/scsi-staging
reported by sfr.

Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents 4cc0096e f0f82e24
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -453,8 +453,8 @@ static int initialize_controller(struct scsi_device *sdev,
		if (!h->ctlr)
			err = SCSI_DH_RES_TEMP_UNAVAIL;
		else {
			list_add_rcu(&h->node, &h->ctlr->dh_list);
			h->sdev = sdev;
			list_add_rcu(&h->node, &h->ctlr->dh_list);
		}
		spin_unlock(&list_lock);
		err = SCSI_DH_OK;
@@ -778,11 +778,11 @@ static void rdac_bus_detach( struct scsi_device *sdev )
	spin_lock(&list_lock);
	if (h->ctlr) {
		list_del_rcu(&h->node);
		h->sdev = NULL;
		kref_put(&h->ctlr->kref, release_controller);
	}
	spin_unlock(&list_lock);
	sdev->handler_data = NULL;
	synchronize_rcu();
	kfree(h);
}

+17 −2
Original line number Diff line number Diff line
@@ -807,6 +807,13 @@ static int ibmvfc_init_event_pool(struct ibmvfc_host *vhost,
	for (i = 0; i < size; ++i) {
		struct ibmvfc_event *evt = &pool->events[i];

		/*
		 * evt->active states
		 *  1 = in flight
		 *  0 = being completed
		 * -1 = free/freed
		 */
		atomic_set(&evt->active, -1);
		atomic_set(&evt->free, 1);
		evt->crq.valid = 0x80;
		evt->crq.ioba = cpu_to_be64(pool->iu_token + (sizeof(*evt->xfer_iu) * i));
@@ -1017,6 +1024,7 @@ static void ibmvfc_free_event(struct ibmvfc_event *evt)

	BUG_ON(!ibmvfc_valid_event(pool, evt));
	BUG_ON(atomic_inc_return(&evt->free) != 1);
	BUG_ON(atomic_dec_and_test(&evt->active));

	spin_lock_irqsave(&evt->queue->l_lock, flags);
	list_add_tail(&evt->queue_list, &evt->queue->free);
@@ -1072,6 +1080,12 @@ static void ibmvfc_complete_purge(struct list_head *purge_list)
 **/
static void ibmvfc_fail_request(struct ibmvfc_event *evt, int error_code)
{
	/*
	 * Anything we are failing should still be active. Otherwise, it
	 * implies we already got a response for the command and are doing
	 * something bad like double completing it.
	 */
	BUG_ON(!atomic_dec_and_test(&evt->active));
	if (evt->cmnd) {
		evt->cmnd->result = (error_code << 16);
		evt->done = ibmvfc_scsi_eh_done;
@@ -1723,6 +1737,7 @@ static int ibmvfc_send_event(struct ibmvfc_event *evt,

		evt->done(evt);
	} else {
		atomic_set(&evt->active, 1);
		spin_unlock_irqrestore(&evt->queue->l_lock, flags);
		ibmvfc_trc_start(evt);
	}
@@ -3251,7 +3266,7 @@ static void ibmvfc_handle_crq(struct ibmvfc_crq *crq, struct ibmvfc_host *vhost,
		return;
	}

	if (unlikely(atomic_read(&evt->free))) {
	if (unlikely(atomic_dec_if_positive(&evt->active))) {
		dev_err(vhost->dev, "Received duplicate correlation_token 0x%08llx!\n",
			crq->ioba);
		return;
@@ -3778,7 +3793,7 @@ static void ibmvfc_handle_scrq(struct ibmvfc_crq *crq, struct ibmvfc_host *vhost
		return;
	}

	if (unlikely(atomic_read(&evt->free))) {
	if (unlikely(atomic_dec_if_positive(&evt->active))) {
		dev_err(vhost->dev, "Received duplicate correlation_token 0x%08llx!\n",
			crq->ioba);
		return;
+1 −0
Original line number Diff line number Diff line
@@ -745,6 +745,7 @@ struct ibmvfc_event {
	struct ibmvfc_target *tgt;
	struct scsi_cmnd *cmnd;
	atomic_t free;
	atomic_t active;
	union ibmvfc_iu *xfer_iu;
	void (*done)(struct ibmvfc_event *evt);
	void (*_done)(struct ibmvfc_event *evt);
+15 −6
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ mraid_mm_get_adapter(mimd_t __user *umimd, int *rval)
	mimd_t		mimd;
	uint32_t	adapno;
	int		iterator;

	bool		is_found;

	if (copy_from_user(&mimd, umimd, sizeof(mimd_t))) {
		*rval = -EFAULT;
@@ -254,12 +254,16 @@ mraid_mm_get_adapter(mimd_t __user *umimd, int *rval)

	adapter = NULL;
	iterator = 0;
	is_found = false;

	list_for_each_entry(adapter, &adapters_list_g, list) {
		if (iterator++ == adapno) break;
		if (iterator++ == adapno) {
			is_found = true;
			break;
		}
	}

	if (!adapter) {
	if (!is_found) {
		*rval = -ENODEV;
		return NULL;
	}
@@ -725,6 +729,7 @@ ioctl_done(uioc_t *kioc)
	uint32_t	adapno;
	int		iterator;
	mraid_mmadp_t*	adapter;
	bool		is_found;

	/*
	 * When the kioc returns from driver, make sure it still doesn't
@@ -747,19 +752,23 @@ ioctl_done(uioc_t *kioc)
		iterator	= 0;
		adapter		= NULL;
		adapno		= kioc->adapno;
		is_found	= false;

		con_log(CL_ANN, ( KERN_WARNING "megaraid cmm: completed "
					"ioctl that was timedout before\n"));

		list_for_each_entry(adapter, &adapters_list_g, list) {
			if (iterator++ == adapno) break;
			if (iterator++ == adapno) {
				is_found = true;
				break;
			}
		}

		kioc->timedout = 0;

		if (adapter) {
		if (is_found)
			mraid_mm_dealloc_kioc( adapter, kioc );
		}

	}
	else {
		wake_up(&wait_q);
+16 −16
Original line number Diff line number Diff line
@@ -3076,13 +3076,13 @@ _base_check_enable_msix(struct MPT3SAS_ADAPTER *ioc)
}

/**
 * _base_free_irq - free irq
 * mpt3sas_base_free_irq - free irq
 * @ioc: per adapter object
 *
 * Freeing respective reply_queue from the list.
 */
static void
_base_free_irq(struct MPT3SAS_ADAPTER *ioc)
void
mpt3sas_base_free_irq(struct MPT3SAS_ADAPTER *ioc)
{
	struct adapter_reply_queue *reply_q, *next;

@@ -3308,12 +3308,12 @@ _base_check_and_enable_high_iops_queues(struct MPT3SAS_ADAPTER *ioc,
}

/**
 * _base_disable_msix - disables msix
 * mpt3sas_base_disable_msix - disables msix
 * @ioc: per adapter object
 *
 */
static void
_base_disable_msix(struct MPT3SAS_ADAPTER *ioc)
void
mpt3sas_base_disable_msix(struct MPT3SAS_ADAPTER *ioc)
{
	if (!ioc->msix_enable)
		return;
@@ -3486,8 +3486,8 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
	for (i = 0; i < ioc->reply_queue_count; i++) {
		r = _base_request_irq(ioc, i);
		if (r) {
			_base_free_irq(ioc);
			_base_disable_msix(ioc);
			mpt3sas_base_free_irq(ioc);
			mpt3sas_base_disable_msix(ioc);
			goto try_ioapic;
		}
	}
@@ -3525,8 +3525,8 @@ mpt3sas_base_unmap_resources(struct MPT3SAS_ADAPTER *ioc)

	dexitprintk(ioc, ioc_info(ioc, "%s\n", __func__));

	_base_free_irq(ioc);
	_base_disable_msix(ioc);
	mpt3sas_base_free_irq(ioc);
	mpt3sas_base_disable_msix(ioc);

	kfree(ioc->replyPostRegisterIndex);
	ioc->replyPostRegisterIndex = NULL;
@@ -7880,14 +7880,14 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
}

/**
 * _base_make_ioc_ready - put controller in READY state
 * mpt3sas_base_make_ioc_ready - put controller in READY state
 * @ioc: per adapter object
 * @type: FORCE_BIG_HAMMER or SOFT_RESET
 *
 * Return: 0 for success, non-zero for failure.
 */
static int
_base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, enum reset_type type)
int
mpt3sas_base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, enum reset_type type)
{
	u32 ioc_state;
	int rc;
@@ -8164,7 +8164,7 @@ mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc)
	if (ioc->chip_phys && ioc->chip) {
		mpt3sas_base_mask_interrupts(ioc);
		ioc->shost_recovery = 1;
		_base_make_ioc_ready(ioc, SOFT_RESET);
		mpt3sas_base_make_ioc_ready(ioc, SOFT_RESET);
		ioc->shost_recovery = 0;
	}

@@ -8284,7 +8284,7 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
	ioc->build_sg_mpi = &_base_build_sg;
	ioc->build_zero_len_sge_mpi = &_base_build_zero_len_sge;

	r = _base_make_ioc_ready(ioc, SOFT_RESET);
	r = mpt3sas_base_make_ioc_ready(ioc, SOFT_RESET);
	if (r)
		goto out_free_resources;

@@ -8739,7 +8739,7 @@ mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc,
	mpt3sas_wait_for_commands_to_complete(ioc);
	mpt3sas_base_mask_interrupts(ioc);
	mpt3sas_base_pause_mq_polling(ioc);
	r = _base_make_ioc_ready(ioc, type);
	r = mpt3sas_base_make_ioc_ready(ioc, type);
	if (r)
		goto out;
	_base_clear_outstanding_commands(ioc);
Loading