mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-01 10:43:43 +00:00
ACPI: scan: Simplify acpi_table_events_fn()
Notice that the table field of struct acpi_table_events_work is never read and its event field is always equal to ACPI_TABLE_EVENT_LOAD, so both of them are redundant. Accordingly, drop struct acpi_table_events_work and use struct work_struct directly instead of it, simplify acpi_scan_table_handler() and rename it to acpi_scan_table_notify(). Moreover, make acpi_bus_table_handler() check the event code against ACPI_TABLE_EVENT_LOAD before calling acpi_scan_table_notify(), so it is not necessary to do that check in the latter. No intentional functional impact. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
5f4ce26078
commit
8d287e8292
@ -1206,7 +1206,8 @@ void __init acpi_subsystem_init(void)
|
||||
|
||||
static acpi_status acpi_bus_table_handler(u32 event, void *table, void *context)
|
||||
{
|
||||
acpi_scan_table_handler(event, table, context);
|
||||
if (event == ACPI_TABLE_EVENT_LOAD)
|
||||
acpi_scan_table_notify();
|
||||
|
||||
return acpi_sysfs_table_handler(event, table, context);
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src);
|
||||
bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent);
|
||||
|
||||
acpi_status acpi_sysfs_table_handler(u32 event, void *table, void *context);
|
||||
void acpi_scan_table_handler(u32 event, void *table, void *context);
|
||||
void acpi_scan_table_notify(void);
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
Device Node Initialization / Removal
|
||||
|
@ -2533,46 +2533,28 @@ int __init __acpi_probe_device_table(struct acpi_probe_entry *ap_head, int nr)
|
||||
return count;
|
||||
}
|
||||
|
||||
struct acpi_table_events_work {
|
||||
struct work_struct work;
|
||||
void *table;
|
||||
u32 event;
|
||||
};
|
||||
|
||||
static void acpi_table_events_fn(struct work_struct *work)
|
||||
{
|
||||
struct acpi_table_events_work *tew;
|
||||
acpi_scan_lock_acquire();
|
||||
acpi_bus_scan(ACPI_ROOT_OBJECT);
|
||||
acpi_scan_lock_release();
|
||||
|
||||
tew = container_of(work, struct acpi_table_events_work, work);
|
||||
|
||||
if (tew->event == ACPI_TABLE_EVENT_LOAD) {
|
||||
acpi_scan_lock_acquire();
|
||||
acpi_bus_scan(ACPI_ROOT_OBJECT);
|
||||
acpi_scan_lock_release();
|
||||
}
|
||||
|
||||
kfree(tew);
|
||||
kfree(work);
|
||||
}
|
||||
|
||||
void acpi_scan_table_handler(u32 event, void *table, void *context)
|
||||
void acpi_scan_table_notify(void)
|
||||
{
|
||||
struct acpi_table_events_work *tew;
|
||||
struct work_struct *work;
|
||||
|
||||
if (!acpi_scan_initialized)
|
||||
return;
|
||||
|
||||
if (event != ACPI_TABLE_EVENT_LOAD)
|
||||
work = kmalloc(sizeof(*work), GFP_KERNEL);
|
||||
if (!work)
|
||||
return;
|
||||
|
||||
tew = kmalloc(sizeof(*tew), GFP_KERNEL);
|
||||
if (!tew)
|
||||
return;
|
||||
|
||||
INIT_WORK(&tew->work, acpi_table_events_fn);
|
||||
tew->table = table;
|
||||
tew->event = event;
|
||||
|
||||
schedule_work(&tew->work);
|
||||
INIT_WORK(work, acpi_table_events_fn);
|
||||
schedule_work(work);
|
||||
}
|
||||
|
||||
int acpi_reconfig_notifier_register(struct notifier_block *nb)
|
||||
|
Loading…
Reference in New Issue
Block a user