All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Garzik <jeff@garzik.org>
To: Matthew Wilcox <matthew@wil.cx>
Cc: linux-scsi@vger.kernel.org
Subject: Re: [PATCH 3/21] advansys: Convert to pci_register_driver interface
Date: Thu, 26 Jul 2007 15:31:21 -0400	[thread overview]
Message-ID: <46A8F689.108@garzik.org> (raw)
In-Reply-To: <11854705774041-git-send-email-matthew@wil.cx>

Matthew Wilcox wrote:
> +static int __devinit
> +advansys_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
> +{
> +	int ioport;
> +	struct Scsi_Host *shost;
> +
> +	if (pci_enable_device(pdev))
> +		goto fail;
> +
> +	ioport = pci_resource_start(pdev, 0);
> +	shost = advansys_board_found(ioport, &pdev->dev, ASC_IS_PCI);
> +
> +	if (shost) {
> +		pci_set_drvdata(pdev, shost);
> +		return 0;
> +	}
> +
> +	pci_disable_device(pdev);
> + fail:
> +	return -ENODEV;
> +}

1) you should propagate pci_enable_device return value to caller on error

1.1) in general, following my comment #1 will make this function look 
more like other normal Linux code, i.e.

	rc = foo
	if (rc)
		goto err_out

	return 0;

      err_out:
	return rc;

2) you dropped the check for pci_resource_start() returning zero (look 
for 'iop == 0' in original code)

3) what happened to PCI BAR #1 ?  shouldn't you move that call here too? 
  it gets ioremapped (look at 'pci_memory_address' in old code, right 
next to pci_resource_start call)

4) it is often wise to add sanity checks that ensure that PCI BAR #0 == 
IORESOURCE_IO and PCI BAR #1 == IORESOURCE_MEM



> +static void __devexit advansys_pci_remove(struct pci_dev *pdev)
> +{
> +	int i;
> +	struct Scsi_Host *shost = pci_get_drvdata(pdev);
> +	scsi_remove_host(shost);
> +	advansys_release(shost);
> +
> +	for (i = 0; i < asc_board_count; i++) {
> +		if (asc_host[i] == shost) {
> +			asc_host[i] = NULL;
> +			break;
> +		}
> +	}
> +
> +	pci_disable_device(pdev);

5) call pci_set_drvdata(pdev, NULL) as with other PCI drivers


> +static struct pci_driver advansys_pci_driver = {
> +	.name = "advansys",
> +	.id_table = advansys_pci_tbl,
> +	.probe = advansys_pci_probe,
> +	.remove = __devexit_p(advansys_pci_remove),
> +};

6) suggestions:  tab alignment for struct member values; makes it far 
easier to read.


> +static int __init advansys_init(void)
> +{
> +	int count, error;
> +	count = advansys_detect();
> +	error = pci_register_driver(&advansys_pci_driver);
> +
> +	/*
> +	 * If we found some ISA, EISA or VLB devices, we must not fail.
> +	 * We may not drive any PCI devices, but it's better to drive
> +	 * the cards that we successfully discovered than none at all.
> +	 */
> +	if (count > 0)
> +		error = 0;
> +	return error;
> +}
> +
> +static void __exit advansys_exit(void)
> +{
> +	int i;
> +
> +	pci_unregister_driver(&advansys_pci_driver);

7) bug: don't unregister, if pci_register_driver() failed during init


> +	for (i = 0; i < asc_board_count; i++) {
> +		struct Scsi_Host *host = asc_host[i];
> +		if (!host)
> +			continue;
> +		scsi_remove_host(host);
> +		advansys_release(host);
> +		asc_host[i] = NULL;

this last line of code is rather pointless, isn't it?


  parent reply	other threads:[~2007-07-26 19:31 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-26 17:11 Advansys driver Matthew Wilcox
2007-07-26 17:22 ` [PATCH 1/21] advansys: Clean up proc_info implementation Matthew Wilcox
2007-07-26 18:51   ` Jeff Garzik
2007-07-26 19:05     ` Matthew Wilcox
2007-07-26 17:22 ` [PATCH 2/21] advansys: version, copyright, etc Matthew Wilcox
2007-07-26 18:56   ` Jeff Garzik
2007-07-26 19:03     ` Matthew Wilcox
2007-07-26 19:08       ` Jeff Garzik
2007-07-26 19:16         ` Matthew Wilcox
2007-07-26 19:25         ` Christer Weinigel
2007-07-26 17:22 ` [PATCH 3/21] advansys: Convert to pci_register_driver interface Matthew Wilcox
2007-07-26 19:05   ` Jeff Garzik
2007-07-26 19:31   ` Jeff Garzik [this message]
2007-07-26 20:49     ` Matthew Wilcox
2007-07-26 21:21       ` Jeff Garzik
2007-07-27 13:48       ` Jeff Garzik
2007-07-26 17:22 ` [PATCH 4/21] advansys: restructure error handling in advansys_board_found Matthew Wilcox
2007-07-26 17:22 ` [PATCH 5/21] advansys: split advansys_init_wide_chip() out of advansys_board_found() Matthew Wilcox
2007-07-26 17:22 ` [PATCH 6/21] advansys: Move to scsi hotplug initialisation model Matthew Wilcox
2007-07-26 18:01   ` Christoph Hellwig
2007-07-26 18:04     ` Matthew Wilcox
2007-07-26 18:06       ` Matthew Wilcox
2007-07-26 18:16         ` Jeff Garzik
2007-07-26 18:29           ` Matthew Wilcox
2007-07-26 18:13       ` Jeff Garzik
2007-07-26 19:19   ` Jeff Garzik
2007-07-26 17:22 ` [PATCH 7/21] advansys: Convert to EISA driver model Matthew Wilcox
2007-07-26 19:38   ` Jeff Garzik
2007-07-26 20:37     ` Matthew Wilcox
2007-07-27 13:50       ` Jeff Garzik
2007-07-27 14:16         ` Matthew Wilcox
2007-07-27 14:55           ` Jeff Garzik
2007-07-26 17:22 ` [PATCH 8/21] advansys: Rewrite resource management Matthew Wilcox
2007-07-26 19:41   ` Jeff Garzik
2007-07-26 17:22 ` [PATCH 9/21] advansys: More PCI cleanups Matthew Wilcox
2007-07-26 19:43   ` Jeff Garzik
2007-07-26 19:50     ` Matthew Wilcox
2007-07-26 19:55       ` Jeff Garzik
2007-07-26 17:22 ` [PATCH 10/21] advansys: remove AscCompareString() Matthew Wilcox
2007-07-26 17:22 ` [PATCH 11/21] Add QUANTUM XP34301 to the blacklist Matthew Wilcox
2007-07-26 17:22 ` [PATCH 12/21] advansys: remove INQUIRY sniffing Matthew Wilcox
2007-07-26 17:22 ` [PATCH 13/21] advansys: misc reformatting Matthew Wilcox
2007-07-26 17:22 ` [PATCH 14/21] advansys: delete AscGetChipBusType Matthew Wilcox
2007-07-26 17:22 ` [PATCH 15/21] advansys: ioremap no longer needs page-aligned addresses Matthew Wilcox
2007-07-26 17:22 ` [PATCH 16/21] advansys: Stop using n_io_port in Scsi_Host structure Matthew Wilcox
2007-07-26 17:22 ` [PATCH 17/21] advansys: remove detect_called Matthew Wilcox
2007-07-26 19:48   ` Jeff Garzik
2007-07-26 17:22 ` [PATCH 18/21] advansys: Move struct device out of the cfg structures Matthew Wilcox
2007-07-26 19:49   ` Jeff Garzik
2007-07-26 20:26     ` Matthew Wilcox
2007-07-26 17:22 ` [PATCH 19/21] advansys: Remove library-style callback routines Matthew Wilcox
2007-07-26 17:22 ` [PATCH 20/21] advansys: Remove pci_slot_info Matthew Wilcox
2007-07-26 17:22 ` [PATCH 21/21] advansys: use memcpy instead of open-coded loop Matthew Wilcox
2007-07-26 19:50   ` Jeff Garzik
2007-07-27  4:58     ` Matthew Wilcox

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=46A8F689.108@garzik.org \
    --to=jeff@garzik.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=matthew@wil.cx \
    /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.