mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
ACPI / scan: always register memory hotplug scan handler
Prevent platform devices from being created for ACPI memory device objects if CONFIG_ACPI_HOTPLUG_MEMORY is unset by compiling out the memory hotplug scan handler's callbacks only in that case and still compiling its device ID list in and registering the scan handler in either case. Also unset the memory hotplug scan handler's .attach() callback if acpi_no_memhotplug is set, but still register the scan handler to avoid creating platform devices for ACPI memory devices in that case too. This change is based on a prototype from Zhang Rui. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
parent
a1ec657213
commit
cccd420859
@ -66,7 +66,7 @@ obj-$(CONFIG_ACPI_PCI_SLOT) += pci_slot.o
|
|||||||
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
|
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
|
||||||
obj-y += container.o
|
obj-y += container.o
|
||||||
obj-$(CONFIG_ACPI_THERMAL) += thermal.o
|
obj-$(CONFIG_ACPI_THERMAL) += thermal.o
|
||||||
obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o
|
obj-y += acpi_memhotplug.o
|
||||||
obj-$(CONFIG_ACPI_BATTERY) += battery.o
|
obj-$(CONFIG_ACPI_BATTERY) += battery.o
|
||||||
obj-$(CONFIG_ACPI_SBS) += sbshc.o
|
obj-$(CONFIG_ACPI_SBS) += sbshc.o
|
||||||
obj-$(CONFIG_ACPI_SBS) += sbs.o
|
obj-$(CONFIG_ACPI_SBS) += sbs.o
|
||||||
|
@ -44,6 +44,13 @@
|
|||||||
|
|
||||||
ACPI_MODULE_NAME("acpi_memhotplug");
|
ACPI_MODULE_NAME("acpi_memhotplug");
|
||||||
|
|
||||||
|
static const struct acpi_device_id memory_device_ids[] = {
|
||||||
|
{ACPI_MEMORY_DEVICE_HID, 0},
|
||||||
|
{"", 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI_HOTPLUG_MEMORY
|
||||||
|
|
||||||
/* Memory Device States */
|
/* Memory Device States */
|
||||||
#define MEMORY_INVALID_STATE 0
|
#define MEMORY_INVALID_STATE 0
|
||||||
#define MEMORY_POWER_ON_STATE 1
|
#define MEMORY_POWER_ON_STATE 1
|
||||||
@ -53,11 +60,6 @@ static int acpi_memory_device_add(struct acpi_device *device,
|
|||||||
const struct acpi_device_id *not_used);
|
const struct acpi_device_id *not_used);
|
||||||
static void acpi_memory_device_remove(struct acpi_device *device);
|
static void acpi_memory_device_remove(struct acpi_device *device);
|
||||||
|
|
||||||
static const struct acpi_device_id memory_device_ids[] = {
|
|
||||||
{ACPI_MEMORY_DEVICE_HID, 0},
|
|
||||||
{"", 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct acpi_scan_handler memory_device_handler = {
|
static struct acpi_scan_handler memory_device_handler = {
|
||||||
.ids = memory_device_ids,
|
.ids = memory_device_ids,
|
||||||
.attach = acpi_memory_device_add,
|
.attach = acpi_memory_device_add,
|
||||||
@ -364,9 +366,11 @@ static bool __initdata acpi_no_memhotplug;
|
|||||||
|
|
||||||
void __init acpi_memory_hotplug_init(void)
|
void __init acpi_memory_hotplug_init(void)
|
||||||
{
|
{
|
||||||
if (acpi_no_memhotplug)
|
if (acpi_no_memhotplug) {
|
||||||
|
memory_device_handler.attach = NULL;
|
||||||
|
acpi_scan_add_handler(&memory_device_handler);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
acpi_scan_add_handler_with_hotplug(&memory_device_handler, "memory");
|
acpi_scan_add_handler_with_hotplug(&memory_device_handler, "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,3 +380,16 @@ static int __init disable_acpi_memory_hotplug(char *str)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("acpi_no_memhotplug", disable_acpi_memory_hotplug);
|
__setup("acpi_no_memhotplug", disable_acpi_memory_hotplug);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static struct acpi_scan_handler memory_device_handler = {
|
||||||
|
.ids = memory_device_ids,
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init acpi_memory_hotplug_init(void)
|
||||||
|
{
|
||||||
|
acpi_scan_add_handler(&memory_device_handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_ACPI_HOTPLUG_MEMORY */
|
||||||
|
@ -33,6 +33,7 @@ void acpi_platform_init(void);
|
|||||||
void acpi_pnp_init(void);
|
void acpi_pnp_init(void);
|
||||||
int acpi_sysfs_init(void);
|
int acpi_sysfs_init(void);
|
||||||
void acpi_container_init(void);
|
void acpi_container_init(void);
|
||||||
|
void acpi_memory_hotplug_init(void);
|
||||||
#ifdef CONFIG_ACPI_DOCK
|
#ifdef CONFIG_ACPI_DOCK
|
||||||
void register_dock_dependent_device(struct acpi_device *adev,
|
void register_dock_dependent_device(struct acpi_device *adev,
|
||||||
acpi_handle dshandle);
|
acpi_handle dshandle);
|
||||||
@ -44,11 +45,6 @@ static inline void register_dock_dependent_device(struct acpi_device *adev,
|
|||||||
static inline int dock_notify(struct acpi_device *adev, u32 event) { return -ENODEV; }
|
static inline int dock_notify(struct acpi_device *adev, u32 event) { return -ENODEV; }
|
||||||
static inline void acpi_dock_add(struct acpi_device *adev) {}
|
static inline void acpi_dock_add(struct acpi_device *adev) {}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ACPI_HOTPLUG_MEMORY
|
|
||||||
void acpi_memory_hotplug_init(void);
|
|
||||||
#else
|
|
||||||
static inline void acpi_memory_hotplug_init(void) {}
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_X86
|
#ifdef CONFIG_X86
|
||||||
void acpi_cmos_rtc_init(void);
|
void acpi_cmos_rtc_init(void);
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user