diff options
author | Tejun Heo <tj@kernel.org> | 2010-05-10 21:41:35 +0200 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2010-05-19 13:34:10 -0400 |
commit | 270390e1ae1818b111543b8bfffa08095d73c1a5 (patch) | |
tree | be6145d1a3ea7d2e80f303a62c5f9ba5a753c0f5 /drivers/ata/libata-core.c | |
parent | c7087652e1890a3feef35b30ee1d4be68e1932cd (diff) |
libata-sff: introduce ata_sff_init/exit() and ata_sff_port_init()
In preparation of proper SFF/BMDMA separation, introduce
ata_sff_init/exit() and ata_sff_port_init(). These functions
currently don't do anything.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r-- | drivers/ata/libata-core.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index cc49a0d3089f..200f49d09228 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -5670,6 +5670,8 @@ struct ata_port *ata_port_alloc(struct ata_host *host) ap->stats.unhandled_irq = 1; ap->stats.idle_irq = 1; #endif + ata_sff_port_init(ap); + return ap; } @@ -6584,6 +6586,8 @@ static void __init ata_parse_force_param(void) static int __init ata_init(void) { + int rc = -ENOMEM; + ata_parse_force_param(); /* @@ -6595,24 +6599,31 @@ static int __init ata_init(void) */ ata_wq = create_workqueue("ata"); if (!ata_wq) - goto free_force_tbl; + goto fail; ata_aux_wq = create_singlethread_workqueue("ata_aux"); if (!ata_aux_wq) - goto free_wq; + goto fail; + + rc = ata_sff_init(); + if (rc) + goto fail; printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); return 0; -free_wq: - destroy_workqueue(ata_wq); -free_force_tbl: +fail: kfree(ata_force_tbl); - return -ENOMEM; + if (ata_wq) + destroy_workqueue(ata_wq); + if (ata_aux_wq) + destroy_workqueue(ata_aux_wq); + return rc; } static void __exit ata_exit(void) { + ata_sff_exit(); kfree(ata_force_tbl); destroy_workqueue(ata_wq); destroy_workqueue(ata_aux_wq); |