[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4D52F43F.5040507@ru.mvista.com>
Date: Wed, 09 Feb 2011 23:08:31 +0300
From: Sergei Shtylyov <sshtylyov@...sta.com>
To: Bartlomiej Zolnierkiewicz <bzolnier@...il.com>
CC: linux-ide@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] libata: reduce ata_pci_[sff,bmdma]_init_one() size
Hello.
Bartlomiej Zolnierkiewicz wrote:
> Turn both helpers (which are used only during LLDs initialization
> time and thus are not performance sensitive) into wrappers around
> the new ata_pci_init_one() function, this cuts 20 LOC and saves
> ~1.1k of the output code size (x86-64):
> text data bss dec hex filename
> 21392 0 19 21411 53a3 drivers/ata/libata-sff.o.before
> 20256 0 19 20275 4f33 drivers/ata/libata-sff.o.after
> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@...il.com>
> ---
> drivers/ata/libata-sff.c | 112 +++++++++++++++++++----------------------------
> 1 file changed, 46 insertions(+), 66 deletions(-)
> Index: b/drivers/ata/libata-sff.c
> ===================================================================
> --- a/drivers/ata/libata-sff.c
> +++ b/drivers/ata/libata-sff.c
[...]
> @@ -2538,14 +2517,22 @@ int ata_pci_sff_init_one(struct pci_dev
> if (rc)
> goto out;
>
> - /* prepare and activate SFF host */
> - rc = ata_pci_sff_prepare_host(pdev, ppi, &host);
> + if (bmdma)
> + /* prepare and activate BMDMA host */
> + rc = ata_pci_bmdma_prepare_host(pdev, ppi, &host);
> + else
> + /* prepare and activate SFF host */
> + rc = ata_pci_sff_prepare_host(pdev, ppi, &host);
> if (rc)
> goto out;
> host->private_data = host_priv;
> - host->flags |= hflag;
> + host->flags |= hflags;
>
> - rc = ata_pci_sff_activate_host(host, ata_sff_interrupt, sht);
> + if (bmdma) {
> + pci_set_master(pdev);
> + rc = ata_pci_sff_activate_host(host, ata_bmdma_interrupt, sht);
> + } else
> + rc = ata_pci_sff_activate_host(host, ata_sff_interrupt, sht);
Perhaps this will save even more:
if (bmdma)
pci_set_master(pdev);
rc = ata_pci_sff_activate_host(host, bmdma ? ata_bmdma_interrupt :
ata_sff_interrupt, sht);
> @@ -2554,6 +2541,35 @@ out:
>
> return rc;
> }
> +
> +/**
> + * ata_pci_sff_init_one - Initialize/register PIO-only PCI IDE controller
> + * @pdev: Controller to be initialized
> + * @ppi: array of port_info, must be enough for two ports
> + * @sht: scsi_host_template to use when registering the host
> + * @host_priv: host private_data
> + * @hflag: host flags
> + *
> + * This is a helper function which can be called from a driver's
> + * xxx_init_one() probe function if the hardware uses traditional
> + * IDE taskfile registers and is PIO only.
> + *
> + * ASSUMPTION:
> + * Nobody makes a single channel controller that appears solely as
> + * the secondary legacy port on PCI.
> + *
> + * LOCKING:
> + * Inherited from PCI layer (may sleep).
> + *
> + * RETURNS:
> + * Zero on success, negative on errno-based value on error.
> + */
> +int ata_pci_sff_init_one(struct pci_dev *pdev,
> + const struct ata_port_info * const *ppi,
> + struct scsi_host_template *sht, void *host_priv, int hflag)
s/hflag/hflags/ for consistency?
> +{
> + return ata_pci_init_one(pdev, ppi, sht, host_priv, hflag, 0);
s/0/false/?
> +}
> EXPORT_SYMBOL_GPL(ata_pci_sff_init_one);
>
> #endif /* CONFIG_PCI */
> @@ -3272,43 +3288,7 @@ int ata_pci_bmdma_init_one(struct pci_de
> struct scsi_host_template *sht, void *host_priv,
> int hflags)
> {
[...]
> + return ata_pci_init_one(pdev, ppi, sht, host_priv, hflags, 1);
s/1/true/?
WBR, Sergei
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists