Lines Matching refs:hive

185 	struct amdgpu_hive_info *hive = container_of(  in amdgpu_xgmi_show_attrs()  local
189 return snprintf(buf, PAGE_SIZE, "%llu\n", hive->hive_id); in amdgpu_xgmi_show_attrs()
196 struct amdgpu_hive_info *hive = container_of( in amdgpu_xgmi_hive_release() local
199 mutex_destroy(&hive->hive_lock); in amdgpu_xgmi_hive_release()
200 kfree(hive); in amdgpu_xgmi_hive_release()
257 struct amdgpu_hive_info *hive) in amdgpu_xgmi_sysfs_add_dev_info() argument
276 if (hive->kobj.parent != (&adev->dev->kobj)) { in amdgpu_xgmi_sysfs_add_dev_info()
277 ret = sysfs_create_link(&adev->dev->kobj, &hive->kobj, in amdgpu_xgmi_sysfs_add_dev_info()
285 sprintf(node, "node%d", atomic_read(&hive->number_devices)); in amdgpu_xgmi_sysfs_add_dev_info()
287 ret = sysfs_create_link(&hive->kobj, &adev->dev->kobj, node); in amdgpu_xgmi_sysfs_add_dev_info()
307 struct amdgpu_hive_info *hive) in amdgpu_xgmi_sysfs_rem_dev_info() argument
315 if (hive->kobj.parent != (&adev->dev->kobj)) in amdgpu_xgmi_sysfs_rem_dev_info()
318 sprintf(node, "node%d", atomic_read(&hive->number_devices)); in amdgpu_xgmi_sysfs_rem_dev_info()
319 sysfs_remove_link(&hive->kobj, node); in amdgpu_xgmi_sysfs_rem_dev_info()
327 struct amdgpu_hive_info *hive = NULL, *tmp = NULL; in amdgpu_get_xgmi_hive() local
333 if (adev->hive) { in amdgpu_get_xgmi_hive()
334 kobject_get(&adev->hive->kobj); in amdgpu_get_xgmi_hive()
335 return adev->hive; in amdgpu_get_xgmi_hive()
341 list_for_each_entry_safe(hive, tmp, &xgmi_hive_list, node) { in amdgpu_get_xgmi_hive()
342 if (hive->hive_id == adev->gmc.xgmi.hive_id) in amdgpu_get_xgmi_hive()
347 hive = kzalloc(sizeof(*hive), GFP_KERNEL); in amdgpu_get_xgmi_hive()
348 if (!hive) { in amdgpu_get_xgmi_hive()
350 hive = NULL; in amdgpu_get_xgmi_hive()
355 ret = kobject_init_and_add(&hive->kobj, in amdgpu_get_xgmi_hive()
361 kfree(hive); in amdgpu_get_xgmi_hive()
362 hive = NULL; in amdgpu_get_xgmi_hive()
366 hive->hive_id = adev->gmc.xgmi.hive_id; in amdgpu_get_xgmi_hive()
367 INIT_LIST_HEAD(&hive->device_list); in amdgpu_get_xgmi_hive()
368 INIT_LIST_HEAD(&hive->node); in amdgpu_get_xgmi_hive()
369 mutex_init(&hive->hive_lock); in amdgpu_get_xgmi_hive()
370 atomic_set(&hive->in_reset, 0); in amdgpu_get_xgmi_hive()
371 atomic_set(&hive->number_devices, 0); in amdgpu_get_xgmi_hive()
372 task_barrier_init(&hive->tb); in amdgpu_get_xgmi_hive()
373 hive->pstate = AMDGPU_XGMI_PSTATE_UNKNOWN; in amdgpu_get_xgmi_hive()
374 hive->hi_req_gpu = NULL; in amdgpu_get_xgmi_hive()
379 hive->hi_req_count = AMDGPU_MAX_XGMI_DEVICE_PER_HIVE; in amdgpu_get_xgmi_hive()
380 list_add_tail(&hive->node, &xgmi_hive_list); in amdgpu_get_xgmi_hive()
383 if (hive) in amdgpu_get_xgmi_hive()
384 kobject_get(&hive->kobj); in amdgpu_get_xgmi_hive()
386 return hive; in amdgpu_get_xgmi_hive()
389 void amdgpu_put_xgmi_hive(struct amdgpu_hive_info *hive) in amdgpu_put_xgmi_hive() argument
391 if (hive) in amdgpu_put_xgmi_hive()
392 kobject_put(&hive->kobj); in amdgpu_put_xgmi_hive()
398 struct amdgpu_hive_info *hive = amdgpu_get_xgmi_hive(adev); in amdgpu_xgmi_set_pstate() local
399 struct amdgpu_device *request_adev = hive->hi_req_gpu ? in amdgpu_xgmi_set_pstate()
400 hive->hi_req_gpu : adev; in amdgpu_xgmi_set_pstate()
402 bool init_low = hive->pstate == AMDGPU_XGMI_PSTATE_UNKNOWN; in amdgpu_xgmi_set_pstate()
404 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_set_pstate()
408 if (!hive || adev->asic_type != CHIP_VEGA20) in amdgpu_xgmi_set_pstate()
411 mutex_lock(&hive->hive_lock); in amdgpu_xgmi_set_pstate()
414 hive->hi_req_count++; in amdgpu_xgmi_set_pstate()
416 hive->hi_req_count--; in amdgpu_xgmi_set_pstate()
422 if (hive->pstate == pstate || in amdgpu_xgmi_set_pstate()
423 (!is_hi_req && hive->hi_req_count && !init_low)) in amdgpu_xgmi_set_pstate()
438 hive->pstate = hive->hi_req_count ? in amdgpu_xgmi_set_pstate()
439 hive->pstate : AMDGPU_XGMI_PSTATE_MIN; in amdgpu_xgmi_set_pstate()
441 hive->pstate = pstate; in amdgpu_xgmi_set_pstate()
442 hive->hi_req_gpu = pstate != AMDGPU_XGMI_PSTATE_MIN ? in amdgpu_xgmi_set_pstate()
446 mutex_unlock(&hive->hive_lock); in amdgpu_xgmi_set_pstate()
450 int amdgpu_xgmi_update_topology(struct amdgpu_hive_info *hive, struct amdgpu_device *adev) in amdgpu_xgmi_update_topology() argument
456 atomic_read(&hive->number_devices), in amdgpu_xgmi_update_topology()
483 struct amdgpu_hive_info *hive; in amdgpu_xgmi_add_device() local
518 hive = amdgpu_get_xgmi_hive(adev); in amdgpu_xgmi_add_device()
519 if (!hive) { in amdgpu_xgmi_add_device()
526 mutex_lock(&hive->hive_lock); in amdgpu_xgmi_add_device()
530 list_add_tail(&adev->gmc.xgmi.head, &hive->device_list); in amdgpu_xgmi_add_device()
531 list_for_each_entry(entry, &hive->device_list, head) in amdgpu_xgmi_add_device()
534 atomic_set(&hive->number_devices, count); in amdgpu_xgmi_add_device()
536 task_barrier_add_task(&hive->tb); in amdgpu_xgmi_add_device()
539 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { in amdgpu_xgmi_add_device()
547 ret = amdgpu_xgmi_update_topology(hive, tmp_adev); in amdgpu_xgmi_add_device()
553 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) { in amdgpu_xgmi_add_device()
568 ret = amdgpu_xgmi_sysfs_add_dev_info(adev, hive); in amdgpu_xgmi_add_device()
571 mutex_unlock(&hive->hive_lock); in amdgpu_xgmi_add_device()
574 adev->hive = hive; in amdgpu_xgmi_add_device()
578 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_add_device()
589 struct amdgpu_hive_info *hive = adev->hive; in amdgpu_xgmi_remove_device() local
594 if (!hive) in amdgpu_xgmi_remove_device()
597 mutex_lock(&hive->hive_lock); in amdgpu_xgmi_remove_device()
598 task_barrier_rem_task(&hive->tb); in amdgpu_xgmi_remove_device()
599 amdgpu_xgmi_sysfs_rem_dev_info(adev, hive); in amdgpu_xgmi_remove_device()
600 if (hive->hi_req_gpu == adev) in amdgpu_xgmi_remove_device()
601 hive->hi_req_gpu = NULL; in amdgpu_xgmi_remove_device()
603 mutex_unlock(&hive->hive_lock); in amdgpu_xgmi_remove_device()
605 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_remove_device()
606 adev->hive = NULL; in amdgpu_xgmi_remove_device()
608 if (atomic_dec_return(&hive->number_devices) == 0) { in amdgpu_xgmi_remove_device()
611 list_del(&hive->node); in amdgpu_xgmi_remove_device()
614 amdgpu_put_xgmi_hive(hive); in amdgpu_xgmi_remove_device()