diff options
| author | David S. Miller <davem@davemloft.net> | 2010-04-06 23:53:30 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-04-06 23:53:30 -0700 | 
| commit | 4a35ecf8bf1c4b039503fa554100fe85c761de76 (patch) | |
| tree | 9b75f5d5636004d9a9aa496924377379be09aa1f /drivers/scsi/ibmvscsi/ibmvfc.c | |
| parent | b4d562e3c3553ac58c7120555c4e4aefbb090a2a (diff) | |
| parent | fb9e2d887243499b8d28efcf80821c4f6a092395 (diff) | |
| download | olio-linux-3.10-4a35ecf8bf1c4b039503fa554100fe85c761de76.tar.xz olio-linux-3.10-4a35ecf8bf1c4b039503fa554100fe85c761de76.zip  | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
	drivers/net/bonding/bond_main.c
	drivers/net/via-velocity.c
	drivers/net/wireless/iwlwifi/iwl-agn.c
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvfc.c')
| -rw-r--r-- | drivers/scsi/ibmvscsi/ibmvfc.c | 27 | 
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index 732f6d35b4a..4e577e2fee3 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c @@ -29,6 +29,7 @@  #include <linux/interrupt.h>  #include <linux/kthread.h>  #include <linux/of.h> +#include <linux/pm.h>  #include <linux/stringify.h>  #include <asm/firmware.h>  #include <asm/irq.h> @@ -4736,6 +4737,27 @@ static int ibmvfc_remove(struct vio_dev *vdev)  }  /** + * ibmvfc_resume - Resume from suspend + * @dev:	device struct + * + * We may have lost an interrupt across suspend/resume, so kick the + * interrupt handler + * + */ +static int ibmvfc_resume(struct device *dev) +{ +	unsigned long flags; +	struct ibmvfc_host *vhost = dev_get_drvdata(dev); +	struct vio_dev *vdev = to_vio_dev(dev); + +	spin_lock_irqsave(vhost->host->host_lock, flags); +	vio_disable_interrupts(vdev); +	tasklet_schedule(&vhost->tasklet); +	spin_unlock_irqrestore(vhost->host->host_lock, flags); +	return 0; +} + +/**   * ibmvfc_get_desired_dma - Calculate DMA resources needed by the driver   * @vdev:	vio device struct   * @@ -4755,6 +4777,10 @@ static struct vio_device_id ibmvfc_device_table[] __devinitdata = {  };  MODULE_DEVICE_TABLE(vio, ibmvfc_device_table); +static struct dev_pm_ops ibmvfc_pm_ops = { +	.resume = ibmvfc_resume +}; +  static struct vio_driver ibmvfc_driver = {  	.id_table = ibmvfc_device_table,  	.probe = ibmvfc_probe, @@ -4763,6 +4789,7 @@ static struct vio_driver ibmvfc_driver = {  	.driver = {  		.name = IBMVFC_NAME,  		.owner = THIS_MODULE, +		.pm = &ibmvfc_pm_ops,  	}  };  |