Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a862b5c8 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
  [SCSI] JAZZ ESP and SUN ESP need SPI_ATTRS
  [SCSI] atari_NCR5380: update_timeout removal
  [SCSI] aacraid: fix shutdown handler to also disable interrupts.
  [SCSI] qla2xxx: fix timeout in qla2x00_down_timeout
  [SCSI] fix CONFIG_SCSI_WAIT_SCAN=m
parents 0b662c64 3a243070
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1532,6 +1532,7 @@ source "drivers/scsi/arm/Kconfig"
config JAZZ_ESP
	bool "MIPS JAZZ FAS216 SCSI support"
	depends on MACH_JAZZ && SCSI
	select SCSI_SPI_ATTRS
	help
	  This is the driver for the onboard SCSI host adapter of MIPS Magnum
	  4000, Acer PICA, Olivetti M700-10 and a few other identical OEM
@@ -1756,6 +1757,7 @@ config SUN3X_ESP
config SCSI_SUNESP
	tristate "Sparc ESP Scsi Driver"
	depends on SBUS && SCSI
	select SCSI_SPI_ATTRS
	help
	  This is the driver for the Sun ESP SCSI host adapter. The ESP
	  chipset is present in most SPARC SBUS-based computers.
+12 −10
Original line number Diff line number Diff line
@@ -863,6 +863,14 @@ static struct scsi_host_template aac_driver_template = {
	.emulated                       = 1,
};

static void __aac_shutdown(struct aac_dev * aac)
{
	kthread_stop(aac->thread);
	aac_send_shutdown(aac);
	aac_adapter_disable_int(aac);
	free_irq(aac->pdev->irq, aac);
}

static int __devinit aac_probe_one(struct pci_dev *pdev,
		const struct pci_device_id *id)
{
@@ -1015,10 +1023,7 @@ static int __devinit aac_probe_one(struct pci_dev *pdev,
	return 0;

 out_deinit:
	kthread_stop(aac->thread);
	aac_send_shutdown(aac);
	aac_adapter_disable_int(aac);
	free_irq(pdev->irq, aac);
	__aac_shutdown(aac);
 out_unmap:
	aac_fib_map_free(aac);
	pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys);
@@ -1038,7 +1043,8 @@ static void aac_shutdown(struct pci_dev *dev)
{
	struct Scsi_Host *shost = pci_get_drvdata(dev);
	struct aac_dev *aac = (struct aac_dev *)shost->hostdata;
	aac_send_shutdown(aac);
	scsi_block_requests(shost);
	__aac_shutdown(aac);
}

static void __devexit aac_remove_one(struct pci_dev *pdev)
@@ -1048,16 +1054,12 @@ static void __devexit aac_remove_one(struct pci_dev *pdev)

	scsi_remove_host(shost);

	kthread_stop(aac->thread);

	aac_send_shutdown(aac);
	aac_adapter_disable_int(aac);
	__aac_shutdown(aac);
	aac_fib_map_free(aac);
	pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr,
			aac->comm_phys);
	kfree(aac->queues);

	free_irq(pdev->irq, aac);
	aac_adapter_ioremap(aac, 0);
	
	kfree(aac->fibs);
+2 −42
Original line number Diff line number Diff line
@@ -893,45 +893,6 @@ static int NCR5380_init(struct Scsi_Host *instance, int flags)
	return 0;
}

/*
 * our own old-style timeout update
 */
/*
 * The strategy is to cause the timer code to call scsi_times_out()
 * when the soonest timeout is pending.
 * The arguments are used when we are queueing a new command, because
 * we do not want to subtract the time used from this time, but when we
 * set the timer, we want to take this value into account.
 */

int atari_scsi_update_timeout(Scsi_Cmnd * SCset, int timeout)
{
	int rtn;

	/*
	 * We are using the new error handling code to actually register/deregister
	 * timers for timeout.
	 */

	if (!timer_pending(&SCset->eh_timeout))
		rtn = 0;
	else
		rtn = SCset->eh_timeout.expires - jiffies;

	if (timeout == 0) {
		del_timer(&SCset->eh_timeout);
		SCset->eh_timeout.data = (unsigned long)NULL;
		SCset->eh_timeout.expires = 0;
	} else {
		if (SCset->eh_timeout.data != (unsigned long)NULL)
			del_timer(&SCset->eh_timeout);
		SCset->eh_timeout.data = (unsigned long)SCset;
		SCset->eh_timeout.expires = jiffies + timeout;
		add_timer(&SCset->eh_timeout);
	}
	return rtn;
}

/*
 * Function : int NCR5380_queue_command (Scsi_Cmnd *cmd,
 *	void (*done)(Scsi_Cmnd *))
@@ -956,7 +917,6 @@ static int NCR5380_queue_command(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
	Scsi_Cmnd *tmp;
	int oldto;
	unsigned long flags;
	// extern int update_timeout(Scsi_Cmnd * SCset, int timeout);

#if (NDEBUG & NDEBUG_NO_WRITE)
	switch (cmd->cmnd[0]) {
@@ -1029,9 +989,9 @@ static int NCR5380_queue_command(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
	 * alter queues and touch the lock.
	 */
	if (!IS_A_TT()) {
		oldto = atari_scsi_update_timeout(cmd, 0);
		/* perhaps stop command timer here */
		falcon_get_lock();
		atari_scsi_update_timeout(cmd, oldto);
		/* perhaps restart command timer here */
	}
	if (!(hostdata->issue_queue) || (cmd->cmnd[0] == REQUEST_SENSE)) {
		LIST(cmd, hostdata->issue_queue);
+1 −1
Original line number Diff line number Diff line
@@ -2590,7 +2590,7 @@ qla2x00_down_timeout(struct semaphore *sema, unsigned long timeout)
			return 0;
		if (msleep_interruptible(step))
			break;
	} while (--iterations >= 0);
	} while (--iterations > 0);

	return -ETIMEDOUT;
}
+9 −0
Original line number Diff line number Diff line
@@ -184,6 +184,15 @@ int scsi_complete_async_scans(void)
/* Only exported for the benefit of scsi_wait_scan */
EXPORT_SYMBOL_GPL(scsi_complete_async_scans);

#ifndef MODULE
/*
 * For async scanning we need to wait for all the scans to complete before
 * trying to mount the root fs.  Otherwise non-modular drivers may not be ready
 * yet.
 */
late_initcall(scsi_complete_async_scans);
#endif

/**
 * scsi_unlock_floptical - unlock device via a special MODE SENSE command
 * @sdev:	scsi device to send command to