aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-03-24 18:22:41 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-03-24 18:22:41 -0400
commit8b803bd184e3f6892284d4b50801b9ec85cd9b96 (patch)
treec7727ccfeba7e187aeca3ccdc8049269d368e564
parent7ed5b157d9dff55bf477b4c8b4708d5d45476677 (diff)
ide: sanitize ACPI initialization
* ide_acpi_init() -> ide_acpi_init_port() * ide_acpi_blacklist() -> ide_acpi_init() * Call ide_acpi_init() only once (do it during IDE core initialization) and cleanup the function accordingly. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/ide-acpi.c12
-rw-r--r--drivers/ide/ide-probe.c2
-rw-r--r--drivers/ide/ide.c2
-rw-r--r--include/linux/ide.h6
4 files changed, 10 insertions, 12 deletions
diff --git a/drivers/ide/ide-acpi.c b/drivers/ide/ide-acpi.c
index 8d6d31fcbfba..ba5932d7b1bb 100644
--- a/drivers/ide/ide-acpi.c
+++ b/drivers/ide/ide-acpi.c
@@ -89,12 +89,8 @@ static const struct dmi_system_id ide_acpi_dmi_table[] = {
89 { } /* terminate list */ 89 { } /* terminate list */
90}; 90};
91 91
92static int ide_acpi_blacklist(void) 92int ide_acpi_init(void)
93{ 93{
94 static int done;
95 if (done)
96 return 0;
97 done = 1;
98 dmi_check_system(ide_acpi_dmi_table); 94 dmi_check_system(ide_acpi_dmi_table);
99 return 0; 95 return 0;
100} 96}
@@ -624,7 +620,7 @@ void ide_acpi_set_state(ide_hwif_t *hwif, int on)
624} 620}
625 621
626/** 622/**
627 * ide_acpi_init - initialize the ACPI link for an IDE interface 623 * ide_acpi_init_port - initialize the ACPI link for an IDE interface
628 * @hwif: target IDE interface (channel) 624 * @hwif: target IDE interface (channel)
629 * 625 *
630 * The ACPI spec is not quite clear when the drive identify buffer 626 * The ACPI spec is not quite clear when the drive identify buffer
@@ -634,10 +630,8 @@ void ide_acpi_set_state(ide_hwif_t *hwif, int on)
634 * So we get the information during startup; but this means that 630 * So we get the information during startup; but this means that
635 * any changes during run-time will be lost after resume. 631 * any changes during run-time will be lost after resume.
636 */ 632 */
637void ide_acpi_init(ide_hwif_t *hwif) 633void ide_acpi_init_port(ide_hwif_t *hwif)
638{ 634{
639 ide_acpi_blacklist();
640
641 hwif->acpidata = kzalloc(sizeof(struct ide_acpi_hwif_link), GFP_KERNEL); 635 hwif->acpidata = kzalloc(sizeof(struct ide_acpi_hwif_link), GFP_KERNEL);
642 if (!hwif->acpidata) 636 if (!hwif->acpidata)
643 return; 637 return;
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index eb0a38cd83ce..a51ad2bd62b4 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1543,7 +1543,7 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d,
1543 1543
1544 j++; 1544 j++;
1545 1545
1546 ide_acpi_init(hwif); 1546 ide_acpi_init_port(hwif);
1547 1547
1548 if (hwif->present) 1548 if (hwif->present)
1549 ide_acpi_port_init_devices(hwif); 1549 ide_acpi_port_init_devices(hwif);
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 0920e3b0c962..c779aa24dbe6 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -527,6 +527,8 @@ static int __init ide_init(void)
527 goto out_port_class; 527 goto out_port_class;
528 } 528 }
529 529
530 ide_acpi_init();
531
530 proc_ide_create(); 532 proc_ide_create();
531 533
532 return 0; 534 return 0;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 7ed395b4b891..6bb104f4e341 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1484,17 +1484,19 @@ static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; }
1484#endif /* CONFIG_BLK_DEV_IDEDMA */ 1484#endif /* CONFIG_BLK_DEV_IDEDMA */
1485 1485
1486#ifdef CONFIG_BLK_DEV_IDEACPI 1486#ifdef CONFIG_BLK_DEV_IDEACPI
1487int ide_acpi_init(void);
1487extern int ide_acpi_exec_tfs(ide_drive_t *drive); 1488extern int ide_acpi_exec_tfs(ide_drive_t *drive);
1488extern void ide_acpi_get_timing(ide_hwif_t *hwif); 1489extern void ide_acpi_get_timing(ide_hwif_t *hwif);
1489extern void ide_acpi_push_timing(ide_hwif_t *hwif); 1490extern void ide_acpi_push_timing(ide_hwif_t *hwif);
1490extern void ide_acpi_init(ide_hwif_t *hwif); 1491void ide_acpi_init_port(ide_hwif_t *);
1491void ide_acpi_port_init_devices(ide_hwif_t *); 1492void ide_acpi_port_init_devices(ide_hwif_t *);
1492extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); 1493extern void ide_acpi_set_state(ide_hwif_t *hwif, int on);
1493#else 1494#else
1495static inline int ide_acpi_init(void) { return 0; }
1494static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } 1496static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; }
1495static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } 1497static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; }
1496static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } 1498static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; }
1497static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } 1499static inline void ide_acpi_init_port(ide_hwif_t *hwif) { ; }
1498static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } 1500static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; }
1499static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} 1501static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {}
1500#endif 1502#endif