.config_dequeue_wait_counts returns a nop case. Modify return parameter to reflect that since the caller also needs to ignore this condition. Fixes: <98a5af8103f> ("drm/amdkfd: Add pm_config_dequeue_wait_counts API") Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@xxxxxxx> --- drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 11 ++++++++--- drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c | 9 ++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c index 3f574d82b5fc..47de572741e7 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c @@ -436,19 +436,24 @@ int pm_config_dequeue_wait_counts(struct packet_manager *pm, retval = pm->pmf->config_dequeue_wait_counts(pm, buffer, cmd, value); - if (!retval) + if (retval > 0) { retval = kq_submit_packet(pm->priv_queue); + + /* If default value is modified, cache that in dqm->wait_times */ + if (!retval && cmd == KFD_DEQUEUE_WAIT_INIT) + update_dqm_wait_times(pm->dqm); + } else kq_rollback_packet(pm->priv_queue); } /* If default value is modified, cache that value in dqm->wait_times */ - if (!retval && cmd == KFD_DEQUEUE_WAIT_INIT) + if (retval > 0 && cmd == KFD_DEQUEUE_WAIT_INIT) update_dqm_wait_times(pm->dqm); out: mutex_unlock(&pm->lock); - return retval; + return retval < 0 ? retval : 0; } int pm_send_unmap_queue(struct packet_manager *pm, diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c index d440df602393..af3a18d81900 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c @@ -310,6 +310,13 @@ static inline void pm_build_dequeue_wait_counts_packet_info(struct packet_manage reg_data); } +/* pm_config_dequeue_wait_counts_v9: Builds WRITE_DATA packet with + * register/value for configuring dequeue wait counts + * + * @return: -ve for failure, 0 for nop and +ve for success and buffer is + * filled in with packet + * + **/ static int pm_config_dequeue_wait_counts_v9(struct packet_manager *pm, uint32_t *buffer, enum kfd_config_dequeue_wait_counts_cmd cmd, @@ -377,7 +384,7 @@ static int pm_config_dequeue_wait_counts_v9(struct packet_manager *pm, packet->data = reg_data; - return 0; + return sizeof(struct pm4_mec_write_data_mmio); } static int pm_unmap_queues_v9(struct packet_manager *pm, uint32_t *buffer, -- 2.34.1