Lines Matching defs:hfi_instance
104 * struct hfi_instance - Representation of an HFI instance (i.e., a table)
118 struct hfi_instance {
150 * @hfi_instance: Attributes of the HFI table to which this CPU belongs
156 struct hfi_instance *hfi_instance;
162 static struct hfi_instance *hfi_instances;
171 static void get_hfi_caps(struct hfi_instance *hfi_instance,
176 raw_spin_lock_irq(&hfi_instance->table_lock);
177 for_each_cpu(cpu, hfi_instance->cpus) {
182 caps = hfi_instance->data + index * hfi_features.cpu_stride;
194 raw_spin_unlock_irq(&hfi_instance->table_lock);
200 static void update_capabilities(struct hfi_instance *hfi_instance)
208 cpu_count = cpumask_weight(hfi_instance->cpus);
210 /* No CPUs to report in this hfi_instance. */
218 get_hfi_caps(hfi_instance, cpu_caps);
244 struct hfi_instance *hfi_instance;
246 hfi_instance = container_of(to_delayed_work(work), struct hfi_instance,
249 update_capabilities(hfi_instance);
254 struct hfi_instance *hfi_instance;
268 * local APIC is unmasked. Hence, info->hfi_instance cannot be NULL
271 hfi_instance = info->hfi_instance;
272 if (unlikely(!hfi_instance)) {
283 if (!raw_spin_trylock(&hfi_instance->event_lock))
289 raw_spin_unlock(&hfi_instance->event_lock);
298 new_timestamp = *(u64 *)hfi_instance->hw_table;
299 if (*hfi_instance->timestamp == new_timestamp) {
301 raw_spin_unlock(&hfi_instance->event_lock);
305 raw_spin_lock(&hfi_instance->table_lock);
311 memcpy(hfi_instance->local_table, hfi_instance->hw_table,
320 raw_spin_unlock(&hfi_instance->table_lock);
321 raw_spin_unlock(&hfi_instance->event_lock);
323 queue_delayed_work(hfi_updates_wq, &hfi_instance->update_work,
343 static void init_hfi_instance(struct hfi_instance *hfi_instance)
346 hfi_instance->hdr = hfi_instance->local_table +
347 sizeof(*hfi_instance->timestamp);
350 hfi_instance->data = hfi_instance->hdr + hfi_features.hdr_size;
363 static void hfi_set_hw_table(struct hfi_instance *hfi_instance)
368 hw_table_pa = virt_to_phys(hfi_instance->hw_table);
414 struct hfi_instance *hfi_instance;
428 hfi_instance = info->hfi_instance;
429 if (!hfi_instance) {
433 hfi_instance = &hfi_instances[die_id];
434 info->hfi_instance = hfi_instance;
445 if (hfi_instance->hdr) {
446 cpumask_set_cpu(cpu, hfi_instance->cpus);
458 hfi_instance->hw_table = alloc_pages_exact(hfi_features.nr_table_pages,
460 if (!hfi_instance->hw_table)
467 hfi_instance->local_table = kzalloc(hfi_features.nr_table_pages << PAGE_SHIFT,
469 if (!hfi_instance->local_table)
472 init_hfi_instance(hfi_instance);
474 INIT_DELAYED_WORK(&hfi_instance->update_work, hfi_update_work_fn);
475 raw_spin_lock_init(&hfi_instance->table_lock);
476 raw_spin_lock_init(&hfi_instance->event_lock);
478 cpumask_set_cpu(cpu, hfi_instance->cpus);
480 hfi_set_hw_table(hfi_instance);
488 free_pages_exact(hfi_instance->hw_table, hfi_features.nr_table_pages);
505 struct hfi_instance *hfi_instance;
512 hfi_instance = info->hfi_instance;
513 if (!hfi_instance)
516 if (!hfi_instance->hdr)
520 cpumask_clear_cpu(cpu, hfi_instance->cpus);
522 if (!cpumask_weight(hfi_instance->cpus))
577 struct hfi_instance *hfi_instance = info->hfi_instance;
580 hfi_set_hw_table(hfi_instance);
599 struct hfi_instance *hfi_instance;
619 hfi_instance = &hfi_instances[i];
620 if (!zalloc_cpumask_var(&hfi_instance->cpus, GFP_KERNEL))
634 hfi_instance = &hfi_instances[j];
635 free_cpumask_var(hfi_instance->cpus);