diff options
| -rw-r--r-- | drivers/ata/libata-core.c | 23 | ||||
| -rw-r--r-- | drivers/ata/libata-sff.c | 23 | ||||
| -rw-r--r-- | drivers/ata/libata.h | 10 | 
3 files changed, 50 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) | |||
| 5670 | ap->stats.unhandled_irq = 1; | 5670 | ap->stats.unhandled_irq = 1; | 
| 5671 | ap->stats.idle_irq = 1; | 5671 | ap->stats.idle_irq = 1; | 
| 5672 | #endif | 5672 | #endif | 
| 5673 | ata_sff_port_init(ap); | ||
| 5674 | |||
| 5673 | return ap; | 5675 | return ap; | 
| 5674 | } | 5676 | } | 
| 5675 | 5677 | ||
| @@ -6584,6 +6586,8 @@ static void __init ata_parse_force_param(void) | |||
| 6584 | 6586 | ||
| 6585 | static int __init ata_init(void) | 6587 | static int __init ata_init(void) | 
| 6586 | { | 6588 | { | 
| 6589 | int rc = -ENOMEM; | ||
| 6590 | |||
| 6587 | ata_parse_force_param(); | 6591 | ata_parse_force_param(); | 
| 6588 | 6592 | ||
| 6589 | /* | 6593 | /* | 
| @@ -6595,24 +6599,31 @@ static int __init ata_init(void) | |||
| 6595 | */ | 6599 | */ | 
| 6596 | ata_wq = create_workqueue("ata"); | 6600 | ata_wq = create_workqueue("ata"); | 
| 6597 | if (!ata_wq) | 6601 | if (!ata_wq) | 
| 6598 | goto free_force_tbl; | 6602 | goto fail; | 
| 6599 | 6603 | ||
| 6600 | ata_aux_wq = create_singlethread_workqueue("ata_aux"); | 6604 | ata_aux_wq = create_singlethread_workqueue("ata_aux"); | 
| 6601 | if (!ata_aux_wq) | 6605 | if (!ata_aux_wq) | 
| 6602 | goto free_wq; | 6606 | goto fail; | 
| 6607 | |||
| 6608 | rc = ata_sff_init(); | ||
| 6609 | if (rc) | ||
| 6610 | goto fail; | ||
| 6603 | 6611 | ||
| 6604 | printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); | 6612 | printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); | 
| 6605 | return 0; | 6613 | return 0; | 
| 6606 | 6614 | ||
| 6607 | free_wq: | 6615 | fail: | 
| 6608 | destroy_workqueue(ata_wq); | ||
| 6609 | free_force_tbl: | ||
| 6610 | kfree(ata_force_tbl); | 6616 | kfree(ata_force_tbl); | 
| 6611 | return -ENOMEM; | 6617 | if (ata_wq) | 
| 6618 | destroy_workqueue(ata_wq); | ||
| 6619 | if (ata_aux_wq) | ||
| 6620 | destroy_workqueue(ata_aux_wq); | ||
| 6621 | return rc; | ||
| 6612 | } | 6622 | } | 
| 6613 | 6623 | ||
| 6614 | static void __exit ata_exit(void) | 6624 | static void __exit ata_exit(void) | 
| 6615 | { | 6625 | { | 
| 6626 | ata_sff_exit(); | ||
| 6616 | kfree(ata_force_tbl); | 6627 | kfree(ata_force_tbl); | 
| 6617 | destroy_workqueue(ata_wq); | 6628 | destroy_workqueue(ata_wq); | 
| 6618 | destroy_workqueue(ata_aux_wq); | 6629 | destroy_workqueue(ata_aux_wq); | 
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index f1c99a3e8b2c..4a3d1f214457 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c  | |||
| @@ -3061,3 +3061,26 @@ void ata_pci_bmdma_init(struct ata_host *host) | |||
| 3061 | EXPORT_SYMBOL_GPL(ata_pci_bmdma_init); | 3061 | EXPORT_SYMBOL_GPL(ata_pci_bmdma_init); | 
| 3062 | 3062 | ||
| 3063 | #endif /* CONFIG_PCI */ | 3063 | #endif /* CONFIG_PCI */ | 
| 3064 | |||
| 3065 | /** | ||
| 3066 | * ata_sff_port_init - Initialize SFF/BMDMA ATA port | ||
| 3067 | * @ap: Port to initialize | ||
| 3068 | * | ||
| 3069 | * Called on port allocation to initialize SFF/BMDMA specific | ||
| 3070 | * fields. | ||
| 3071 | * | ||
| 3072 | * LOCKING: | ||
| 3073 | * None. | ||
| 3074 | */ | ||
| 3075 | void ata_sff_port_init(struct ata_port *ap) | ||
| 3076 | { | ||
| 3077 | } | ||
| 3078 | |||
| 3079 | int __init ata_sff_init(void) | ||
| 3080 | { | ||
| 3081 | return 0; | ||
| 3082 | } | ||
| 3083 | |||
| 3084 | void __exit ata_sff_exit(void) | ||
| 3085 | { | ||
| 3086 | } | ||
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 132da80aa23a..d89502f3123a 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h  | |||
| @@ -203,6 +203,16 @@ static inline int sata_pmp_attach(struct ata_device *dev) | |||
| 203 | /* libata-sff.c */ | 203 | /* libata-sff.c */ | 
| 204 | #ifdef CONFIG_ATA_SFF | 204 | #ifdef CONFIG_ATA_SFF | 
| 205 | extern void ata_pio_task(struct work_struct *work); | 205 | extern void ata_pio_task(struct work_struct *work); | 
| 206 | extern void ata_sff_port_init(struct ata_port *ap); | ||
| 207 | extern int ata_sff_init(void); | ||
| 208 | extern void ata_sff_exit(void); | ||
| 209 | #else /* CONFIG_ATA_SFF */ | ||
| 210 | static inline void ata_sff_port_init(struct ata_port *ap) | ||
| 211 | { } | ||
| 212 | static inline int ata_sff_init(void) | ||
| 213 | { return 0; } | ||
| 214 | static inline void ata_sff_exit(void) | ||
| 215 | { } | ||
| 206 | #endif /* CONFIG_ATA_SFF */ | 216 | #endif /* CONFIG_ATA_SFF */ | 
| 207 | 217 | ||
| 208 | #endif /* __LIBATA_H__ */ | 218 | #endif /* __LIBATA_H__ */ | 
