mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 06:01:53 +02:00
drm/amdkfd: add an interface to query whether is KFD is active
Add an interface to query whether KFD has any active queues. v2: fix build issues Acked-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
ecfe9b2376
commit
8fe7cf58ff
|
|
@ -890,6 +890,15 @@ int amdgpu_amdkfd_start_sched(struct amdgpu_device *adev, uint32_t node_id)
|
|||
return kgd2kfd_start_sched(adev->kfd.dev, node_id);
|
||||
}
|
||||
|
||||
/* check if there are KFD queues active */
|
||||
bool amdgpu_amdkfd_compute_active(struct amdgpu_device *adev, uint32_t node_id)
|
||||
{
|
||||
if (!adev->kfd.init_complete)
|
||||
return false;
|
||||
|
||||
return kgd2kfd_compute_active(adev->kfd.dev, node_id);
|
||||
}
|
||||
|
||||
/* Config CGTT_SQ_CLK_CTRL */
|
||||
int amdgpu_amdkfd_config_sq_perfmon(struct amdgpu_device *adev, uint32_t xcp_id,
|
||||
bool core_override_enable, bool reg_override_enable, bool perfmon_override_enable)
|
||||
|
|
|
|||
|
|
@ -268,6 +268,7 @@ int amdgpu_amdkfd_start_sched(struct amdgpu_device *adev, uint32_t node_id);
|
|||
int amdgpu_amdkfd_stop_sched(struct amdgpu_device *adev, uint32_t node_id);
|
||||
int amdgpu_amdkfd_config_sq_perfmon(struct amdgpu_device *adev, uint32_t xcp_id,
|
||||
bool core_override_enable, bool reg_override_enable, bool perfmon_override_enable);
|
||||
bool amdgpu_amdkfd_compute_active(struct amdgpu_device *adev, uint32_t node_id);
|
||||
|
||||
|
||||
/* Read user wptr from a specified user address space with page fault
|
||||
|
|
@ -431,6 +432,7 @@ int kgd2kfd_check_and_lock_kfd(void);
|
|||
void kgd2kfd_unlock_kfd(void);
|
||||
int kgd2kfd_start_sched(struct kfd_dev *kfd, uint32_t node_id);
|
||||
int kgd2kfd_stop_sched(struct kfd_dev *kfd, uint32_t node_id);
|
||||
bool kgd2kfd_compute_active(struct kfd_dev *kfd, uint32_t node_id);
|
||||
#else
|
||||
static inline int kgd2kfd_init(void)
|
||||
{
|
||||
|
|
@ -511,5 +513,10 @@ static inline int kgd2kfd_stop_sched(struct kfd_dev *kfd, uint32_t node_id)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline bool kgd2kfd_compute_active(struct kfd_dev *kfd, uint32_t node_id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
#endif /* AMDGPU_AMDKFD_H_INCLUDED */
|
||||
|
|
|
|||
|
|
@ -1392,6 +1392,13 @@ void kfd_dec_compute_active(struct kfd_node *node)
|
|||
WARN_ONCE(count < 0, "Compute profile ref. count error");
|
||||
}
|
||||
|
||||
static bool kfd_compute_active(struct kfd_node *node)
|
||||
{
|
||||
if (atomic_read(&node->kfd->compute_profile))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void kgd2kfd_smi_event_throttle(struct kfd_dev *kfd, uint64_t throttle_bitmask)
|
||||
{
|
||||
/*
|
||||
|
|
@ -1485,6 +1492,24 @@ int kgd2kfd_stop_sched(struct kfd_dev *kfd, uint32_t node_id)
|
|||
return node->dqm->ops.halt(node->dqm);
|
||||
}
|
||||
|
||||
bool kgd2kfd_compute_active(struct kfd_dev *kfd, uint32_t node_id)
|
||||
{
|
||||
struct kfd_node *node;
|
||||
|
||||
if (!kfd->init_complete)
|
||||
return false;
|
||||
|
||||
if (node_id >= kfd->num_nodes) {
|
||||
dev_warn(kfd->adev->dev, "Invalid node ID: %u exceeds %u\n",
|
||||
node_id, kfd->num_nodes - 1);
|
||||
return false;
|
||||
}
|
||||
|
||||
node = kfd->nodes[node_id];
|
||||
|
||||
return kfd_compute_active(node);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
|
||||
/* This function will send a package to HIQ to hang the HWS
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user