mirror of
https://github.com/torvalds/linux.git
synced 2026-04-22 08:44:02 -04:00
drm/amdkfd: Introduce kfd_node struct (v5)
Introduce a new structure, kfd_node, which will now represent a compute node. kfd_node is carved out of kfd_dev structure. kfd_dev struct now will become the parent of kfd_node, and will store common resources such as doorbells, GTT sub-alloctor etc. kfd_node struct will store all resources specific to a compute node, such as device queue manager, interrupt handling etc. This is the first step in adding compute partition support in KFD. v2: introduce kfd_node struct to gc v11 (Hawking) v3: make reference to kfd_dev struct through kfd_node (Morris) v4: use kfd_node instead for kfd isr/mqd functions (Morris) v5: rebase (Alex) Signed-off-by: Mukul Joshi <mukul.joshi@amd.com> Tested-by: Amber Lin <Amber.Lin@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Morris Zhang <Shiwu.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
5cf1675591
commit
8dc1db3172
@@ -81,7 +81,7 @@ static int find_available_queue_slot(struct process_queue_manager *pqm,
|
||||
|
||||
void kfd_process_dequeue_from_device(struct kfd_process_device *pdd)
|
||||
{
|
||||
struct kfd_dev *dev = pdd->dev;
|
||||
struct kfd_node *dev = pdd->dev;
|
||||
|
||||
if (pdd->already_dequeued)
|
||||
return;
|
||||
@@ -93,7 +93,7 @@ void kfd_process_dequeue_from_device(struct kfd_process_device *pdd)
|
||||
int pqm_set_gws(struct process_queue_manager *pqm, unsigned int qid,
|
||||
void *gws)
|
||||
{
|
||||
struct kfd_dev *dev = NULL;
|
||||
struct kfd_node *dev = NULL;
|
||||
struct process_queue_node *pqn;
|
||||
struct kfd_process_device *pdd;
|
||||
struct kgd_mem *mem = NULL;
|
||||
@@ -178,7 +178,7 @@ void pqm_uninit(struct process_queue_manager *pqm)
|
||||
}
|
||||
|
||||
static int init_user_queue(struct process_queue_manager *pqm,
|
||||
struct kfd_dev *dev, struct queue **q,
|
||||
struct kfd_node *dev, struct queue **q,
|
||||
struct queue_properties *q_properties,
|
||||
struct file *f, struct amdgpu_bo *wptr_bo,
|
||||
unsigned int qid)
|
||||
@@ -199,7 +199,7 @@ static int init_user_queue(struct process_queue_manager *pqm,
|
||||
(*q)->device = dev;
|
||||
(*q)->process = pqm->process;
|
||||
|
||||
if (dev->shared_resources.enable_mes) {
|
||||
if (dev->kfd->shared_resources.enable_mes) {
|
||||
retval = amdgpu_amdkfd_alloc_gtt_mem(dev->adev,
|
||||
AMDGPU_MES_GANG_CTX_SIZE,
|
||||
&(*q)->gang_ctx_bo,
|
||||
@@ -224,7 +224,7 @@ cleanup:
|
||||
}
|
||||
|
||||
int pqm_create_queue(struct process_queue_manager *pqm,
|
||||
struct kfd_dev *dev,
|
||||
struct kfd_node *dev,
|
||||
struct file *f,
|
||||
struct queue_properties *properties,
|
||||
unsigned int *qid,
|
||||
@@ -258,7 +258,7 @@ int pqm_create_queue(struct process_queue_manager *pqm,
|
||||
* Hence we also check the type as well
|
||||
*/
|
||||
if ((pdd->qpd.is_debug) || (type == KFD_QUEUE_TYPE_DIQ))
|
||||
max_queues = dev->device_info.max_no_of_hqd/2;
|
||||
max_queues = dev->kfd->device_info.max_no_of_hqd/2;
|
||||
|
||||
if (pdd->qpd.queue_count >= max_queues)
|
||||
return -ENOSPC;
|
||||
@@ -354,7 +354,7 @@ int pqm_create_queue(struct process_queue_manager *pqm,
|
||||
*/
|
||||
*p_doorbell_offset_in_process =
|
||||
(q->properties.doorbell_off * sizeof(uint32_t)) &
|
||||
(kfd_doorbell_process_slice(dev) - 1);
|
||||
(kfd_doorbell_process_slice(dev->kfd) - 1);
|
||||
|
||||
pr_debug("PQM After DQM create queue\n");
|
||||
|
||||
@@ -387,7 +387,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)
|
||||
struct process_queue_node *pqn;
|
||||
struct kfd_process_device *pdd;
|
||||
struct device_queue_manager *dqm;
|
||||
struct kfd_dev *dev;
|
||||
struct kfd_node *dev;
|
||||
int retval;
|
||||
|
||||
dqm = NULL;
|
||||
@@ -439,7 +439,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)
|
||||
pdd->qpd.num_gws = 0;
|
||||
}
|
||||
|
||||
if (dev->shared_resources.enable_mes) {
|
||||
if (dev->kfd->shared_resources.enable_mes) {
|
||||
amdgpu_amdkfd_free_gtt_mem(dev->adev,
|
||||
pqn->q->gang_ctx_bo);
|
||||
if (pqn->q->wptr_bo)
|
||||
@@ -859,7 +859,7 @@ int kfd_criu_restore_queue(struct kfd_process *p,
|
||||
}
|
||||
|
||||
if (!pdd->doorbell_index &&
|
||||
kfd_alloc_process_doorbells(pdd->dev, &pdd->doorbell_index) < 0) {
|
||||
kfd_alloc_process_doorbells(pdd->dev->kfd, &pdd->doorbell_index) < 0) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user