forked from luck/tmp_suning_uos_patched
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>
This commit is contained in:
parent
7ed5b157d9
commit
8b803bd184
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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)
|
||||||
* 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,
|
||||||
|
|
||||||
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)
|
||||||
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) { ; }
|
||||||
#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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user