static int __init check_acpi_ids(struct acpi_processor *pr_backup) { if (!pr_backup) return -ENODEV; acpi_id_present = kcalloc(BITS_TO_LONGS(nr_acpi_bits), sizeof(unsigned long), GFP_KERNEL); if (!acpi_id_present) return -ENOMEM; acpi_id_cst_present = kcalloc(BITS_TO_LONGS(nr_acpi_bits), sizeof(unsigned long), GFP_KERNEL); if (!acpi_id_cst_present) { kfree(acpi_id_present); return -ENOMEM; } acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, read_acpi_id, NULL, NULL, NULL); acpi_get_devices("ACPI0007", read_acpi_id, NULL, NULL); if (!bitmap_equal(acpi_id_present, acpi_ids_done, nr_acpi_bits)) { unsigned int i; for_each_set_bit(i, acpi_id_present, nr_acpi_bits) { pr_backup->acpi_id = i; pr_backup->flags.power = test_bit(i, acpi_id_cst_present); (void)upload_pm_data(pr_backup); }
static int __init check_acpi_ids(struct acpi_processor *pr_backup) { if (!pr_backup) return -ENODEV; /* All online CPUs have been processed at this stage. Now verify * whether in fact "online CPUs" == physical CPUs. */ acpi_id_present = kcalloc(BITS_TO_LONGS(nr_acpi_bits), sizeof(unsigned long), GFP_KERNEL); if (!acpi_id_present) return -ENOMEM; acpi_id_cst_present = kcalloc(BITS_TO_LONGS(nr_acpi_bits), sizeof(unsigned long), GFP_KERNEL); if (!acpi_id_cst_present) { kfree(acpi_id_present); return -ENOMEM; } acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, read_acpi_id, NULL, NULL, NULL); acpi_get_devices("ACPI0007", read_acpi_id, NULL, NULL); if (!bitmap_equal(acpi_id_present, acpi_ids_done, nr_acpi_bits)) { unsigned int i; for_each_set_bit(i, acpi_id_present, nr_acpi_bits) { pr_backup->acpi_id = i; /* Mask out C-states if there are no _CST or PBLK */ pr_backup->flags.power = test_bit(i, acpi_id_cst_present); (void)upload_pm_data(pr_backup); }