mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 16:37:50 +00:00
libata: reduce ata_pci_[sff,bmdma]_init_one() size
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@gmail.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
e9f7cd51cc
commit
c203603360
1 changed files with 52 additions and 71 deletions
|
@ -2507,6 +2507,56 @@ static const struct ata_port_info *ata_sff_find_valid_pi(
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ata_pci_init_one(struct pci_dev *pdev,
|
||||||
|
const struct ata_port_info * const *ppi,
|
||||||
|
struct scsi_host_template *sht, void *host_priv,
|
||||||
|
int hflags, bool bmdma)
|
||||||
|
{
|
||||||
|
struct device *dev = &pdev->dev;
|
||||||
|
const struct ata_port_info *pi;
|
||||||
|
struct ata_host *host = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
DPRINTK("ENTER\n");
|
||||||
|
|
||||||
|
pi = ata_sff_find_valid_pi(ppi);
|
||||||
|
if (!pi) {
|
||||||
|
dev_err(&pdev->dev, "no valid port_info specified\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!devres_open_group(dev, NULL, GFP_KERNEL))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
rc = pcim_enable_device(pdev);
|
||||||
|
if (rc)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
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 |= hflags;
|
||||||
|
|
||||||
|
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);
|
||||||
|
out:
|
||||||
|
if (rc == 0)
|
||||||
|
devres_remove_group(&pdev->dev, NULL);
|
||||||
|
else
|
||||||
|
devres_release_group(&pdev->dev, NULL);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_pci_sff_init_one - Initialize/register PIO-only PCI IDE controller
|
* ata_pci_sff_init_one - Initialize/register PIO-only PCI IDE controller
|
||||||
* @pdev: Controller to be initialized
|
* @pdev: Controller to be initialized
|
||||||
|
@ -2533,41 +2583,7 @@ int ata_pci_sff_init_one(struct pci_dev *pdev,
|
||||||
const struct ata_port_info * const *ppi,
|
const struct ata_port_info * const *ppi,
|
||||||
struct scsi_host_template *sht, void *host_priv, int hflag)
|
struct scsi_host_template *sht, void *host_priv, int hflag)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
return ata_pci_init_one(pdev, ppi, sht, host_priv, hflag, 0);
|
||||||
const struct ata_port_info *pi;
|
|
||||||
struct ata_host *host = NULL;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
DPRINTK("ENTER\n");
|
|
||||||
|
|
||||||
pi = ata_sff_find_valid_pi(ppi);
|
|
||||||
if (!pi) {
|
|
||||||
dev_err(&pdev->dev, "no valid port_info specified\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!devres_open_group(dev, NULL, GFP_KERNEL))
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
rc = pcim_enable_device(pdev);
|
|
||||||
if (rc)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
/* 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;
|
|
||||||
|
|
||||||
rc = ata_pci_sff_activate_host(host, ata_sff_interrupt, sht);
|
|
||||||
out:
|
|
||||||
if (rc == 0)
|
|
||||||
devres_remove_group(&pdev->dev, NULL);
|
|
||||||
else
|
|
||||||
devres_release_group(&pdev->dev, NULL);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(ata_pci_sff_init_one);
|
EXPORT_SYMBOL_GPL(ata_pci_sff_init_one);
|
||||||
|
|
||||||
|
@ -3286,42 +3302,7 @@ int ata_pci_bmdma_init_one(struct pci_dev *pdev,
|
||||||
struct scsi_host_template *sht, void *host_priv,
|
struct scsi_host_template *sht, void *host_priv,
|
||||||
int hflags)
|
int hflags)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
return ata_pci_init_one(pdev, ppi, sht, host_priv, hflags, 1);
|
||||||
const struct ata_port_info *pi;
|
|
||||||
struct ata_host *host = NULL;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
DPRINTK("ENTER\n");
|
|
||||||
|
|
||||||
pi = ata_sff_find_valid_pi(ppi);
|
|
||||||
if (!pi) {
|
|
||||||
dev_err(&pdev->dev, "no valid port_info specified\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!devres_open_group(dev, NULL, GFP_KERNEL))
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
rc = pcim_enable_device(pdev);
|
|
||||||
if (rc)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
/* prepare and activate BMDMA host */
|
|
||||||
rc = ata_pci_bmdma_prepare_host(pdev, ppi, &host);
|
|
||||||
if (rc)
|
|
||||||
goto out;
|
|
||||||
host->private_data = host_priv;
|
|
||||||
host->flags |= hflags;
|
|
||||||
|
|
||||||
pci_set_master(pdev);
|
|
||||||
rc = ata_pci_sff_activate_host(host, ata_bmdma_interrupt, sht);
|
|
||||||
out:
|
|
||||||
if (rc == 0)
|
|
||||||
devres_remove_group(&pdev->dev, NULL);
|
|
||||||
else
|
|
||||||
devres_release_group(&pdev->dev, NULL);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(ata_pci_bmdma_init_one);
|
EXPORT_SYMBOL_GPL(ata_pci_bmdma_init_one);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue