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: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 7ed5b157
...@@ -89,12 +89,8 @@ static const struct dmi_system_id ide_acpi_dmi_table[] = { ...@@ -89,12 +89,8 @@ static const struct dmi_system_id ide_acpi_dmi_table[] = {
{ } /* terminate list */ { } /* terminate list */
}; };
static int ide_acpi_blacklist(void) int ide_acpi_init(void)
{ {
static int done;
if (done)
return 0;
done = 1;
dmi_check_system(ide_acpi_dmi_table); dmi_check_system(ide_acpi_dmi_table);
return 0; return 0;
} }
...@@ -624,7 +620,7 @@ void ide_acpi_set_state(ide_hwif_t *hwif, int on) ...@@ -624,7 +620,7 @@ void ide_acpi_set_state(ide_hwif_t *hwif, int on)
} }
/** /**
* ide_acpi_init - initialize the ACPI link for an IDE interface * ide_acpi_init_port - initialize the ACPI link for an IDE interface
* @hwif: target IDE interface (channel) * @hwif: target IDE interface (channel)
* *
* The ACPI spec is not quite clear when the drive identify buffer * 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,10 +630,8 @@ void ide_acpi_set_state(ide_hwif_t *hwif, int on)
* So we get the information during startup; but this means that * So we get the information during startup; but this means that
* any changes during run-time will be lost after resume. * any changes during run-time will be lost after resume.
*/ */
void ide_acpi_init(ide_hwif_t *hwif) void ide_acpi_init_port(ide_hwif_t *hwif)
{ {
ide_acpi_blacklist();
hwif->acpidata = kzalloc(sizeof(struct ide_acpi_hwif_link), GFP_KERNEL); hwif->acpidata = kzalloc(sizeof(struct ide_acpi_hwif_link), GFP_KERNEL);
if (!hwif->acpidata) if (!hwif->acpidata)
return; return;
......
...@@ -1543,7 +1543,7 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d, ...@@ -1543,7 +1543,7 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d,
j++; j++;
ide_acpi_init(hwif); ide_acpi_init_port(hwif);
if (hwif->present) if (hwif->present)
ide_acpi_port_init_devices(hwif); ide_acpi_port_init_devices(hwif);
......
...@@ -527,6 +527,8 @@ static int __init ide_init(void) ...@@ -527,6 +527,8 @@ static int __init ide_init(void)
goto out_port_class; goto out_port_class;
} }
ide_acpi_init();
proc_ide_create(); proc_ide_create();
return 0; return 0;
......
...@@ -1484,17 +1484,19 @@ static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; } ...@@ -1484,17 +1484,19 @@ static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; }
#endif /* CONFIG_BLK_DEV_IDEDMA */ #endif /* CONFIG_BLK_DEV_IDEDMA */
#ifdef CONFIG_BLK_DEV_IDEACPI #ifdef CONFIG_BLK_DEV_IDEACPI
int ide_acpi_init(void);
extern int ide_acpi_exec_tfs(ide_drive_t *drive); extern int ide_acpi_exec_tfs(ide_drive_t *drive);
extern void ide_acpi_get_timing(ide_hwif_t *hwif); extern void ide_acpi_get_timing(ide_hwif_t *hwif);
extern void ide_acpi_push_timing(ide_hwif_t *hwif); extern void ide_acpi_push_timing(ide_hwif_t *hwif);
extern void ide_acpi_init(ide_hwif_t *hwif); void ide_acpi_init_port(ide_hwif_t *);
void ide_acpi_port_init_devices(ide_hwif_t *); void ide_acpi_port_init_devices(ide_hwif_t *);
extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); extern void ide_acpi_set_state(ide_hwif_t *hwif, int on);
#else #else
static inline int ide_acpi_init(void) { return 0; }
static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; }
static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; }
static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; }
static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } static inline void ide_acpi_init_port(ide_hwif_t *hwif) { ; }
static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; }
static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {}
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment