From b853e66d368457a681f3d0981e4eda1ab113dcdd Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Tue, 27 Mar 2018 15:50:08 -0400 Subject: [PATCH 4155/5725] drm/amdkfd: Put packet sizes directly into packet_manager_funcs This is more efficient than indirectly calling a size query function that just returns the constant size. Change-Id: Ifbab7d7ea74b66e7de56e061a2c8fa78cfc0db47 Signed-off-by: Felix Kuehling --- drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c | 58 ++++++--------------- drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c | 64 ++++++------------------ drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 20 ++++---- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 17 +++---- 4 files changed, 46 insertions(+), 113 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c index b53e5ee..f311f13 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_v9.c @@ -323,51 +323,21 @@ static uint32_t pm_release_mem_v9(uint64_t gpu_addr, uint32_t *buffer) return sizeof(struct pm4_mec_release_mem) / sizeof(unsigned int); } -static uint32_t pm_get_map_process_packet_size_v9(void) -{ - return sizeof(struct pm4_mes_map_process); -} - -static uint32_t pm_get_runlist_packet_size_v9(void) -{ - return sizeof(struct pm4_mes_runlist); -} - -static uint32_t pm_get_map_queues_packet_size_v9(void) -{ - return sizeof(struct pm4_mes_map_queues); -} - -static uint32_t pm_get_unmap_queues_packet_size_v9(void) -{ - return sizeof(struct pm4_mes_unmap_queues); -} - -static uint32_t pm_get_query_status_packet_size_v9(void) -{ - return sizeof(struct pm4_mes_query_status); -} - -static uint32_t pm_get_release_mem_packet_size_v9(void) -{ - return sizeof(struct pm4_mec_release_mem); -} - static struct packet_manager_funcs kfd_v9_pm_funcs = { - .map_process = pm_map_process_v9, - .runlist = pm_runlist_v9, - .set_resources = pm_set_resources_vi, - .map_queues = pm_map_queues_v9, - .unmap_queues = pm_unmap_queues_v9, - .query_status = pm_query_status_v9, - .release_mem = pm_release_mem_v9, - .get_map_process_packet_size = pm_get_map_process_packet_size_v9, - .get_runlist_packet_size = pm_get_runlist_packet_size_v9, - .get_set_resources_packet_size = pm_get_set_resources_packet_size_vi, - .get_map_queues_packet_size = pm_get_map_queues_packet_size_v9, - .get_unmap_queues_packet_size = pm_get_unmap_queues_packet_size_v9, - .get_query_status_packet_size = pm_get_query_status_packet_size_v9, - .get_release_mem_packet_size = pm_get_release_mem_packet_size_v9, + .map_process = pm_map_process_v9, + .runlist = pm_runlist_v9, + .set_resources = pm_set_resources_vi, + .map_queues = pm_map_queues_v9, + .unmap_queues = pm_unmap_queues_v9, + .query_status = pm_query_status_v9, + .release_mem = pm_release_mem_v9, + .map_process_size = sizeof(struct pm4_mes_map_process), + .runlist_size = sizeof(struct pm4_mes_runlist), + .set_resources_size = sizeof(struct pm4_mes_set_resources), + .map_queues_size = sizeof(struct pm4_mes_map_queues), + .unmap_queues_size = sizeof(struct pm4_mes_unmap_queues), + .query_status_size = sizeof(struct pm4_mes_query_status), + .release_mem_size = sizeof(struct pm4_mec_release_mem) }; void kfd_pm_func_init_v9(struct packet_manager *pm) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c index e798873..178c5d0 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue_vi.c @@ -358,57 +358,21 @@ static uint32_t pm_release_mem_vi(uint64_t gpu_addr, uint32_t *buffer) return sizeof(struct pm4_mec_release_mem) / sizeof(unsigned int); } -static uint32_t pm_get_map_process_packet_size_vi(void) -{ - return sizeof(struct pm4_mes_map_process); -} - -static uint32_t pm_get_runlist_packet_size_vi(void) -{ - return sizeof(struct pm4_mes_runlist); -} - -uint32_t pm_get_set_resources_packet_size_vi(void) -{ - return sizeof(struct pm4_mes_set_resources); -} - -static uint32_t pm_get_map_queues_packet_size_vi(void) -{ - return sizeof(struct pm4_mes_map_queues); -} - -static uint32_t pm_get_unmap_queues_packet_size_vi(void) -{ - return sizeof(struct pm4_mes_unmap_queues); -} - -static uint32_t pm_get_query_status_packet_size_vi(void) -{ - return sizeof(struct pm4_mes_query_status); -} - -static uint32_t pm_get_release_mem_packet_size_vi(void) -{ - return sizeof(struct pm4_mec_release_mem); -} - - static struct packet_manager_funcs kfd_vi_pm_funcs = { - .map_process = pm_map_process_vi, - .runlist = pm_runlist_vi, - .set_resources = pm_set_resources_vi, - .map_queues = pm_map_queues_vi, - .unmap_queues = pm_unmap_queues_vi, - .query_status = pm_query_status_vi, - .release_mem = pm_release_mem_vi, - .get_map_process_packet_size = pm_get_map_process_packet_size_vi, - .get_runlist_packet_size = pm_get_runlist_packet_size_vi, - .get_set_resources_packet_size = pm_get_set_resources_packet_size_vi, - .get_map_queues_packet_size = pm_get_map_queues_packet_size_vi, - .get_unmap_queues_packet_size = pm_get_unmap_queues_packet_size_vi, - .get_query_status_packet_size = pm_get_query_status_packet_size_vi, - .get_release_mem_packet_size = pm_get_release_mem_packet_size_vi, + .map_process = pm_map_process_vi, + .runlist = pm_runlist_vi, + .set_resources = pm_set_resources_vi, + .map_queues = pm_map_queues_vi, + .unmap_queues = pm_unmap_queues_vi, + .query_status = pm_query_status_vi, + .release_mem = pm_release_mem_vi, + .map_process_size = sizeof(struct pm4_mes_map_process), + .runlist_size = sizeof(struct pm4_mes_runlist), + .set_resources_size = sizeof(struct pm4_mes_set_resources), + .map_queues_size = sizeof(struct pm4_mes_map_queues), + .unmap_queues_size = sizeof(struct pm4_mes_unmap_queues), + .query_status_size = sizeof(struct pm4_mes_query_status), + .release_mem_size = sizeof(struct pm4_mec_release_mem) }; void kfd_pm_func_init_vi(struct packet_manager *pm) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c index 8abefd7..699352b 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c @@ -69,9 +69,9 @@ static void pm_calc_rlib_size(struct packet_manager *pm, pr_debug("Over subscribed runlist\n"); } - map_queue_size = pm->pmf->get_map_queues_packet_size(); + map_queue_size = pm->pmf->map_queues_size; /* calculate run list ib allocation size */ - *rlib_size = process_count * pm->pmf->get_map_process_packet_size() + + *rlib_size = process_count * pm->pmf->map_process_size + queue_count * map_queue_size; /* @@ -79,7 +79,7 @@ static void pm_calc_rlib_size(struct packet_manager *pm, * when over subscription */ if (*over_subscription) - *rlib_size += pm->pmf->get_runlist_packet_size(); + *rlib_size += pm->pmf->runlist_size; pr_debug("runlist ib size %d\n", *rlib_size); } @@ -160,7 +160,7 @@ static int pm_create_runlist_ib(struct packet_manager *pm, return retval; proccesses_mapped++; - inc_wptr(&rl_wptr, pm->pmf->get_map_process_packet_size(), + inc_wptr(&rl_wptr, pm->pmf->map_process_size, alloc_size_bytes); list_for_each_entry(kq, &qpd->priv_queue_list, list) { @@ -178,7 +178,7 @@ static int pm_create_runlist_ib(struct packet_manager *pm, return retval; inc_wptr(&rl_wptr, - pm->pmf->get_map_queues_packet_size(), + pm->pmf->map_queues_size, alloc_size_bytes); } @@ -197,7 +197,7 @@ static int pm_create_runlist_ib(struct packet_manager *pm, return retval; inc_wptr(&rl_wptr, - pm->pmf->get_map_queues_packet_size(), + pm->pmf->map_queues_size, alloc_size_bytes); } } @@ -262,7 +262,7 @@ int pm_send_set_resources(struct packet_manager *pm, uint32_t *buffer, size; int retval = 0; - size = pm->pmf->get_set_resources_packet_size(); + size = pm->pmf->set_resources_size; mutex_lock(&pm->lock); pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, size / sizeof(uint32_t), @@ -299,7 +299,7 @@ int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues) pr_debug("runlist IB address: 0x%llX\n", rl_gpu_ib_addr); - packet_size_dwords = pm->pmf->get_runlist_packet_size() / + packet_size_dwords = pm->pmf->runlist_size / sizeof(uint32_t); mutex_lock(&pm->lock); @@ -337,7 +337,7 @@ int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address, if (WARN_ON(!fence_address)) return -EFAULT; - size = pm->pmf->get_query_status_packet_size(); + size = pm->pmf->query_status_size; mutex_lock(&pm->lock); pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, size / sizeof(uint32_t), (unsigned int **)&buffer); @@ -366,7 +366,7 @@ int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type, uint32_t *buffer, size; int retval = 0; - size = pm->pmf->get_unmap_queues_packet_size(); + size = pm->pmf->unmap_queues_size; mutex_lock(&pm->lock); pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, size / sizeof(uint32_t), (unsigned int **)&buffer); diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h index 641ea82..0c2fa89 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h @@ -976,14 +976,14 @@ struct packet_manager_funcs { uint64_t fence_address, uint32_t fence_value); uint32_t (*release_mem)(uint64_t gpu_addr, uint32_t *buffer); - uint32_t (*get_map_process_packet_size)(void); - uint32_t (*get_runlist_packet_size)(void); - uint32_t (*get_set_resources_packet_size)(void); - uint32_t (*get_map_queues_packet_size)(void); - uint32_t (*get_unmap_queues_packet_size)(void); - uint32_t (*get_query_status_packet_size)(void); - uint32_t (*get_release_mem_packet_size)(void); - + /* Packet sizes */ + int map_process_size; + int runlist_size; + int set_resources_size; + int map_queues_size; + int unmap_queues_size; + int query_status_size; + int release_mem_size; }; int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm); @@ -1005,7 +1005,6 @@ void pm_release_ib(struct packet_manager *pm); unsigned int pm_build_pm4_header(unsigned int opcode, size_t packet_size); int pm_set_resources_vi(struct packet_manager *pm, uint32_t *buffer, struct scheduling_resources *res); -uint32_t pm_get_set_resources_packet_size_vi(void); void kfd_pm_func_init_vi(struct packet_manager *pm); void kfd_pm_func_init_v9(struct packet_manager *pm); -- 2.7.4