scan.c (935ab8509ccb277c536c9fad96b1a90d3bed98fc) | scan.c (eb50aaf960e3bedfef79063411ffd670da94b84b) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * scan.c - support for transforming the ACPI namespace into individual objects 4 */ 5 6#include <linux/module.h> 7#include <linux/init.h> 8#include <linux/slab.h> --- 465 unchanged lines hidden (view full) --- 474 475 mutex_lock(&acpi_device_lock); 476 if (device->parent) 477 list_del(&device->node); 478 479 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) 480 if (!strcmp(acpi_device_bus_id->bus_id, 481 acpi_device_hid(device))) { | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * scan.c - support for transforming the ACPI namespace into individual objects 4 */ 5 6#include <linux/module.h> 7#include <linux/init.h> 8#include <linux/slab.h> --- 465 unchanged lines hidden (view full) --- 474 475 mutex_lock(&acpi_device_lock); 476 if (device->parent) 477 list_del(&device->node); 478 479 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) 480 if (!strcmp(acpi_device_bus_id->bus_id, 481 acpi_device_hid(device))) { |
482 if (acpi_device_bus_id->instance_no > 0) 483 acpi_device_bus_id->instance_no--; 484 else { | 482 ida_simple_remove(&acpi_device_bus_id->instance_ida, device->pnp.instance_no); 483 if (ida_is_empty(&acpi_device_bus_id->instance_ida)) { |
485 list_del(&acpi_device_bus_id->node); 486 kfree_const(acpi_device_bus_id->bus_id); 487 kfree(acpi_device_bus_id); 488 } 489 break; 490 } 491 492 list_del(&device->wakeup_list); --- 63 unchanged lines hidden (view full) --- 556 mutex_lock(&acpi_device_del_lock); 557 558 /* 559 * Use the ACPI hotplug workqueue which is ordered, so this work item 560 * won't run after any hotplug work items submitted subsequently. That 561 * prevents attempts to register device objects identical to those being 562 * deleted from happening concurrently (such attempts result from 563 * hotplug events handled via the ACPI hotplug workqueue). It also will | 484 list_del(&acpi_device_bus_id->node); 485 kfree_const(acpi_device_bus_id->bus_id); 486 kfree(acpi_device_bus_id); 487 } 488 break; 489 } 490 491 list_del(&device->wakeup_list); --- 63 unchanged lines hidden (view full) --- 555 mutex_lock(&acpi_device_del_lock); 556 557 /* 558 * Use the ACPI hotplug workqueue which is ordered, so this work item 559 * won't run after any hotplug work items submitted subsequently. That 560 * prevents attempts to register device objects identical to those being 561 * deleted from happening concurrently (such attempts result from 562 * hotplug events handled via the ACPI hotplug workqueue). It also will |
564 * run after all of the work items submitted previously, which helps | 563 * run after all of the work items submitted previosuly, which helps |
565 * those work items to ensure that they are not accessing stale device 566 * objects. 567 */ 568 if (list_empty(&acpi_device_del_list)) 569 acpi_queue_hotplug_work(&work); 570 571 list_add_tail(&adev->del_list, &acpi_device_del_list); 572 /* Make acpi_ns_validate_handle() return NULL for this handle. */ --- 53 unchanged lines hidden (view full) --- 626 /* Find suitable bus_id and instance number in acpi_bus_id_list. */ 627 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) { 628 if (!strcmp(acpi_device_bus_id->bus_id, dev_id)) 629 return acpi_device_bus_id; 630 } 631 return NULL; 632} 633 | 564 * those work items to ensure that they are not accessing stale device 565 * objects. 566 */ 567 if (list_empty(&acpi_device_del_list)) 568 acpi_queue_hotplug_work(&work); 569 570 list_add_tail(&adev->del_list, &acpi_device_del_list); 571 /* Make acpi_ns_validate_handle() return NULL for this handle. */ --- 53 unchanged lines hidden (view full) --- 625 /* Find suitable bus_id and instance number in acpi_bus_id_list. */ 626 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) { 627 if (!strcmp(acpi_device_bus_id->bus_id, dev_id)) 628 return acpi_device_bus_id; 629 } 630 return NULL; 631} 632 |
633static int acpi_device_set_name(struct acpi_device *device, 634 struct acpi_device_bus_id *acpi_device_bus_id) 635{ 636 struct ida *instance_ida = &acpi_device_bus_id->instance_ida; 637 int result; 638 639 result = ida_simple_get(instance_ida, 0, ACPI_MAX_DEVICE_INSTANCES, GFP_KERNEL); 640 if (result < 0) 641 return result; 642 643 device->pnp.instance_no = result; 644 dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, result); 645 return 0; 646} 647 |
|
634int acpi_device_add(struct acpi_device *device, 635 void (*release)(struct device *)) 636{ 637 struct acpi_device_bus_id *acpi_device_bus_id; 638 int result; 639 640 if (device->handle) { 641 acpi_status status; --- 18 unchanged lines hidden (view full) --- 660 INIT_LIST_HEAD(&device->physical_node_list); 661 INIT_LIST_HEAD(&device->del_list); 662 mutex_init(&device->physical_node_lock); 663 664 mutex_lock(&acpi_device_lock); 665 666 acpi_device_bus_id = acpi_device_bus_id_match(acpi_device_hid(device)); 667 if (acpi_device_bus_id) { | 648int acpi_device_add(struct acpi_device *device, 649 void (*release)(struct device *)) 650{ 651 struct acpi_device_bus_id *acpi_device_bus_id; 652 int result; 653 654 if (device->handle) { 655 acpi_status status; --- 18 unchanged lines hidden (view full) --- 674 INIT_LIST_HEAD(&device->physical_node_list); 675 INIT_LIST_HEAD(&device->del_list); 676 mutex_init(&device->physical_node_lock); 677 678 mutex_lock(&acpi_device_lock); 679 680 acpi_device_bus_id = acpi_device_bus_id_match(acpi_device_hid(device)); 681 if (acpi_device_bus_id) { |
668 acpi_device_bus_id->instance_no++; | 682 result = acpi_device_set_name(device, acpi_device_bus_id); 683 if (result) 684 goto err_unlock; |
669 } else { 670 acpi_device_bus_id = kzalloc(sizeof(*acpi_device_bus_id), 671 GFP_KERNEL); 672 if (!acpi_device_bus_id) { 673 result = -ENOMEM; 674 goto err_unlock; 675 } 676 acpi_device_bus_id->bus_id = 677 kstrdup_const(acpi_device_hid(device), GFP_KERNEL); 678 if (!acpi_device_bus_id->bus_id) { 679 kfree(acpi_device_bus_id); 680 result = -ENOMEM; 681 goto err_unlock; 682 } 683 | 685 } else { 686 acpi_device_bus_id = kzalloc(sizeof(*acpi_device_bus_id), 687 GFP_KERNEL); 688 if (!acpi_device_bus_id) { 689 result = -ENOMEM; 690 goto err_unlock; 691 } 692 acpi_device_bus_id->bus_id = 693 kstrdup_const(acpi_device_hid(device), GFP_KERNEL); 694 if (!acpi_device_bus_id->bus_id) { 695 kfree(acpi_device_bus_id); 696 result = -ENOMEM; 697 goto err_unlock; 698 } 699 |
700 ida_init(&acpi_device_bus_id->instance_ida); 701 702 result = acpi_device_set_name(device, acpi_device_bus_id); 703 if (result) { 704 kfree(acpi_device_bus_id); 705 goto err_unlock; 706 } 707 |
|
684 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list); 685 } | 708 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list); 709 } |
686 dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no); | |
687 688 if (device->parent) 689 list_add_tail(&device->node, &device->parent->children); 690 691 if (device->wakeup.flags.valid) 692 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list); 693 694 mutex_unlock(&acpi_device_lock); --- 1767 unchanged lines hidden --- | 710 711 if (device->parent) 712 list_add_tail(&device->node, &device->parent->children); 713 714 if (device->wakeup.flags.valid) 715 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list); 716 717 mutex_unlock(&acpi_device_lock); --- 1767 unchanged lines hidden --- |