All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomas Henzl <thenzl@redhat.com>
To: Ching Huang <ching2048@areca.com.tw>,
	hch@infradead.org, jbottomley@parallels.com,
	dan.carpenter@oracle.com, agordeev@redhat.com,
	linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 3/17] arcmsr: Add code to support system hibernation
Date: Fri, 08 Aug 2014 16:23:45 +0200	[thread overview]
Message-ID: <53E4DD71.4050203@redhat.com> (raw)
In-Reply-To: <1407499546.5099.8.camel@Centos6.3-64>

On 08/08/2014 02:05 PM, Ching Huang wrote:
> From: Ching Huang <ching2048@areca.com.tw>
>
> This patch adds code to support system hibernation.
>
> Changes in v2 of 3/17:
> * merge patch 18/18 to this patch

Thanks, and please mark the the 18/18 as obsolete - add a comment there 

In my previous response were other comments too, you haven't probably 
noticed them. I could be wrong with my comments, but if you want a review
you should explain why the code is ok as it is.

>
> Signed-off-by: Ching Huang <ching2048@areca.com.tw>
> ---
>
> Thanks to Tomas's advice.
>
> diff -uprN a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
> --- a/drivers/scsi/arcmsr/arcmsr_hba.c	2014-08-01 17:54:46.000000000 +0800
> +++ b/drivers/scsi/arcmsr/arcmsr_hba.c	2014-08-08 19:03:48.000000000 +0800
> @@ -89,11 +89,15 @@ static int arcmsr_bios_param(struct scsi
>  static int arcmsr_queue_command(struct Scsi_Host *h, struct scsi_cmnd *cmd);
>  static int arcmsr_probe(struct pci_dev *pdev,
>  				const struct pci_device_id *id);
> +static int arcmsr_suspend(struct pci_dev *pdev, pm_message_t state);
> +static int arcmsr_resume(struct pci_dev *pdev);
>  static void arcmsr_remove(struct pci_dev *pdev);
>  static void arcmsr_shutdown(struct pci_dev *pdev);
>  static void arcmsr_iop_init(struct AdapterControlBlock *acb);
>  static void arcmsr_free_ccb_pool(struct AdapterControlBlock *acb);
>  static u32 arcmsr_disable_outbound_ints(struct AdapterControlBlock *acb);
> +static void arcmsr_enable_outbound_ints(struct AdapterControlBlock *acb,
> +	u32 intmask_org);
>  static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb);
>  static void arcmsr_flush_hba_cache(struct AdapterControlBlock *acb);
>  static void arcmsr_flush_hbb_cache(struct AdapterControlBlock *acb);
> @@ -167,6 +171,8 @@ static struct pci_driver arcmsr_pci_driv
>  	.id_table			= arcmsr_device_id_table,
>  	.probe			= arcmsr_probe,
>  	.remove			= arcmsr_remove,
> +	.suspend		= arcmsr_suspend,
> +	.resume			= arcmsr_resume,
>  	.shutdown		= arcmsr_shutdown,
>  };
>  /*
> @@ -772,6 +778,76 @@ static void arcmsr_free_irq(struct pci_d
>  		free_irq(pdev->irq, acb);
>  }
>  
> +static int arcmsr_suspend(struct pci_dev *pdev, pm_message_t state)
> +{
> +	uint32_t intmask_org;
> +	struct Scsi_Host *host = pci_get_drvdata(pdev);
> +	struct AdapterControlBlock *acb =
> +		(struct AdapterControlBlock *)host->hostdata;
> +
> +	intmask_org = arcmsr_disable_outbound_ints(acb);
> +	arcmsr_free_irq(pdev, acb);
> +	del_timer_sync(&acb->eternal_timer);
> +	flush_work(&acb->arcmsr_do_message_isr_bh);
> +	arcmsr_stop_adapter_bgrb(acb);
> +	arcmsr_flush_adapter_cache(acb);
> +	pci_set_drvdata(pdev, host);
> +	pci_save_state(pdev);
> +	pci_disable_device(pdev);
> +	pci_set_power_state(pdev, pci_choose_state(pdev, state));
> +	return 0;
> +}
> +
> +static int arcmsr_resume(struct pci_dev *pdev)
> +{
> +	int error;
> +	struct Scsi_Host *host = pci_get_drvdata(pdev);
> +	struct AdapterControlBlock *acb =
> +		(struct AdapterControlBlock *)host->hostdata;
> +
> +	pci_set_power_state(pdev, PCI_D0);
> +	pci_enable_wake(pdev, PCI_D0, 0);
> +	pci_restore_state(pdev);
> +	if (pci_enable_device(pdev)) {
> +		pr_warn("%s: pci_enable_device error\n", __func__);
> +		return -ENODEV;
> +	}
> +	error = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
> +	if (error) {
> +		error = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
> +		if (error) {
> +			pr_warn("scsi%d: No suitable DMA mask available\n",
> +			       host->host_no);
> +			goto controller_unregister;
> +		}
> +	}
> +	pci_set_master(pdev);
> +	if (arcmsr_request_irq(pdev, acb) == FAILED)
> +		goto controller_stop;
> +	arcmsr_iop_init(acb);
> +	INIT_WORK(&acb->arcmsr_do_message_isr_bh, arcmsr_message_isr_bh_fn);
> +	atomic_set(&acb->rq_map_token, 16);
> +	atomic_set(&acb->ante_token_value, 16);
> +	acb->fw_flag = FW_NORMAL;
> +	init_timer(&acb->eternal_timer);
> +	acb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ);
> +	acb->eternal_timer.data = (unsigned long) acb;
> +	acb->eternal_timer.function = &arcmsr_request_device_map;
> +	add_timer(&acb->eternal_timer);
> +	return 0;
> +controller_stop:
> +	arcmsr_stop_adapter_bgrb(acb);
> +	arcmsr_flush_adapter_cache(acb);
> +controller_unregister:
> +	scsi_remove_host(host);
> +	arcmsr_free_ccb_pool(acb);
> +	arcmsr_unmap_pciregion(acb);
> +	pci_release_regions(pdev);
> +	scsi_host_put(host);
> +	pci_disable_device(pdev);
> +	return -ENODEV;
> +}
> +
>  static uint8_t arcmsr_abort_hba_allcmd(struct AdapterControlBlock *acb)
>  {
>  	struct MessageUnit_A __iomem *reg = acb->pmuA;
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2014-08-08 14:23 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-08 12:05 [PATCH v2 3/17] arcmsr: Add code to support system hibernation Ching Huang
2014-08-08 14:23 ` Tomas Henzl [this message]
2014-08-11 11:09   ` Ching Huang
2014-08-11 13:07     ` Dan Carpenter
2014-08-11 13:11       ` Christoph Hellwig

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=53E4DD71.4050203@redhat.com \
    --to=thenzl@redhat.com \
    --cc=agordeev@redhat.com \
    --cc=ching2048@areca.com.tw \
    --cc=dan.carpenter@oracle.com \
    --cc=hch@infradead.org \
    --cc=jbottomley@parallels.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    /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.