RE: [PATCH 01/44] drm/amdgpu: replace per_device_list by array

2021-03-23 Thread Kim, Jonathan
[AMD Official Use Only - Internal Distribution Only]

> -Original Message-
> From: amd-gfx  On Behalf Of Felix
> Kuehling
> Sent: Monday, March 22, 2021 6:58 AM
> To: dri-de...@lists.freedesktop.org; amd-gfx@lists.freedesktop.org
> Cc: Sierra Guiza, Alejandro (Alex) 
> Subject: [PATCH 01/44] drm/amdgpu: replace per_device_list by array
>
> [CAUTION: External Email]
>
> From: Alex Sierra 
>
> Remove per_device_list from kfd_process and replace it with a
> kfd_process_device pointers array of MAX_GPU_INSTANCES size. This helps
> to manage the kfd_process_devices binded to a specific kfd_process.
> Also, functions used by kfd_chardev to iterate over the list were removed,
> since they are not valid anymore. Instead, it was replaced by a local loop
> iterating the array.
>
> Signed-off-by: Alex Sierra 
> Signed-off-by: Felix Kuehling 

As discussed, this patch is required to sync internal branches for the KFD and 
is
Reviewed-by: Jonathan Kim 

> ---
>  drivers/gpu/drm/amd/amdkfd/kfd_chardev.c  | 116 --
>  drivers/gpu/drm/amd/amdkfd/kfd_iommu.c|   8 +-
>  drivers/gpu/drm/amd/amdkfd/kfd_priv.h |  20 +--
>  drivers/gpu/drm/amd/amdkfd/kfd_process.c  | 108 
>  .../amd/amdkfd/kfd_process_queue_manager.c|   6 +-
>  5 files changed, 111 insertions(+), 147 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> index 6802c616e10e..43de260b2230 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> @@ -870,52 +870,47 @@ static int kfd_ioctl_get_process_apertures(struct
> file *filp,  {
> struct kfd_ioctl_get_process_apertures_args *args = data;
> struct kfd_process_device_apertures *pAperture;
> -   struct kfd_process_device *pdd;
> +   int i;
>
> dev_dbg(kfd_device, "get apertures for PASID 0x%x", p->pasid);
>
> args->num_of_nodes = 0;
>
> mutex_lock(>mutex);
> +   /* Run over all pdd of the process */
> +   for (i = 0; i < p->n_pdds; i++) {
> +   struct kfd_process_device *pdd = p->pdds[i];
> +
> +   pAperture =
> +   >process_apertures[args->num_of_nodes];
> +   pAperture->gpu_id = pdd->dev->id;
> +   pAperture->lds_base = pdd->lds_base;
> +   pAperture->lds_limit = pdd->lds_limit;
> +   pAperture->gpuvm_base = pdd->gpuvm_base;
> +   pAperture->gpuvm_limit = pdd->gpuvm_limit;
> +   pAperture->scratch_base = pdd->scratch_base;
> +   pAperture->scratch_limit = pdd->scratch_limit;
>
> -   /*if the process-device list isn't empty*/
> -   if (kfd_has_process_device_data(p)) {
> -   /* Run over all pdd of the process */
> -   pdd = kfd_get_first_process_device_data(p);
> -   do {
> -   pAperture =
> -   >process_apertures[args->num_of_nodes];
> -   pAperture->gpu_id = pdd->dev->id;
> -   pAperture->lds_base = pdd->lds_base;
> -   pAperture->lds_limit = pdd->lds_limit;
> -   pAperture->gpuvm_base = pdd->gpuvm_base;
> -   pAperture->gpuvm_limit = pdd->gpuvm_limit;
> -   pAperture->scratch_base = pdd->scratch_base;
> -   pAperture->scratch_limit = pdd->scratch_limit;
> -
> -   dev_dbg(kfd_device,
> -   "node id %u\n", args->num_of_nodes);
> -   dev_dbg(kfd_device,
> -   "gpu id %u\n", pdd->dev->id);
> -   dev_dbg(kfd_device,
> -   "lds_base %llX\n", pdd->lds_base);
> -   dev_dbg(kfd_device,
> -   "lds_limit %llX\n", pdd->lds_limit);
> -   dev_dbg(kfd_device,
> -   "gpuvm_base %llX\n", pdd->gpuvm_base);
> -   dev_dbg(kfd_device,
> -   "gpuvm_limit %llX\n", pdd->gpuvm_limit);
> -   dev_dbg(kfd_device,
> -   "scratch_base %llX\n", pdd->scratch_base);
> -   dev_dbg(kfd_device,
> -   "scratch_limit %llX\n", pdd->scratch_limit);
> -
> - 

[PATCH 01/44] drm/amdgpu: replace per_device_list by array

2021-03-22 Thread Felix Kuehling
From: Alex Sierra 

Remove per_device_list from kfd_process and replace it with a
kfd_process_device pointers array of MAX_GPU_INSTANCES size. This helps
to manage the kfd_process_devices binded to a specific kfd_process.
Also, functions used by kfd_chardev to iterate over the list were
removed, since they are not valid anymore. Instead, it was replaced by a
local loop iterating the array.

Signed-off-by: Alex Sierra 
Signed-off-by: Felix Kuehling 
---
 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c  | 116 --
 drivers/gpu/drm/amd/amdkfd/kfd_iommu.c|   8 +-
 drivers/gpu/drm/amd/amdkfd/kfd_priv.h |  20 +--
 drivers/gpu/drm/amd/amdkfd/kfd_process.c  | 108 
 .../amd/amdkfd/kfd_process_queue_manager.c|   6 +-
 5 files changed, 111 insertions(+), 147 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
index 6802c616e10e..43de260b2230 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
@@ -870,52 +870,47 @@ static int kfd_ioctl_get_process_apertures(struct file 
*filp,
 {
struct kfd_ioctl_get_process_apertures_args *args = data;
struct kfd_process_device_apertures *pAperture;
-   struct kfd_process_device *pdd;
+   int i;
 
dev_dbg(kfd_device, "get apertures for PASID 0x%x", p->pasid);
 
args->num_of_nodes = 0;
 
mutex_lock(>mutex);
+   /* Run over all pdd of the process */
+   for (i = 0; i < p->n_pdds; i++) {
+   struct kfd_process_device *pdd = p->pdds[i];
+
+   pAperture =
+   >process_apertures[args->num_of_nodes];
+   pAperture->gpu_id = pdd->dev->id;
+   pAperture->lds_base = pdd->lds_base;
+   pAperture->lds_limit = pdd->lds_limit;
+   pAperture->gpuvm_base = pdd->gpuvm_base;
+   pAperture->gpuvm_limit = pdd->gpuvm_limit;
+   pAperture->scratch_base = pdd->scratch_base;
+   pAperture->scratch_limit = pdd->scratch_limit;
 
-   /*if the process-device list isn't empty*/
-   if (kfd_has_process_device_data(p)) {
-   /* Run over all pdd of the process */
-   pdd = kfd_get_first_process_device_data(p);
-   do {
-   pAperture =
-   >process_apertures[args->num_of_nodes];
-   pAperture->gpu_id = pdd->dev->id;
-   pAperture->lds_base = pdd->lds_base;
-   pAperture->lds_limit = pdd->lds_limit;
-   pAperture->gpuvm_base = pdd->gpuvm_base;
-   pAperture->gpuvm_limit = pdd->gpuvm_limit;
-   pAperture->scratch_base = pdd->scratch_base;
-   pAperture->scratch_limit = pdd->scratch_limit;
-
-   dev_dbg(kfd_device,
-   "node id %u\n", args->num_of_nodes);
-   dev_dbg(kfd_device,
-   "gpu id %u\n", pdd->dev->id);
-   dev_dbg(kfd_device,
-   "lds_base %llX\n", pdd->lds_base);
-   dev_dbg(kfd_device,
-   "lds_limit %llX\n", pdd->lds_limit);
-   dev_dbg(kfd_device,
-   "gpuvm_base %llX\n", pdd->gpuvm_base);
-   dev_dbg(kfd_device,
-   "gpuvm_limit %llX\n", pdd->gpuvm_limit);
-   dev_dbg(kfd_device,
-   "scratch_base %llX\n", pdd->scratch_base);
-   dev_dbg(kfd_device,
-   "scratch_limit %llX\n", pdd->scratch_limit);
-
-   args->num_of_nodes++;
-
-   pdd = kfd_get_next_process_device_data(p, pdd);
-   } while (pdd && (args->num_of_nodes < NUM_OF_SUPPORTED_GPUS));
-   }
+   dev_dbg(kfd_device,
+   "node id %u\n", args->num_of_nodes);
+   dev_dbg(kfd_device,
+   "gpu id %u\n", pdd->dev->id);
+   dev_dbg(kfd_device,
+   "lds_base %llX\n", pdd->lds_base);
+   dev_dbg(kfd_device,
+   "lds_limit %llX\n", pdd->lds_limit);
+   dev_dbg(kfd_device,
+   "gpuvm_base %llX\n", pdd->gpuvm_base);
+   dev_dbg(kfd_device,
+   "gpuvm_limit %llX\n", pdd->gpuvm_limit);
+   dev_dbg(kfd_device,
+   "scratch_base %llX\n", pdd->scratch_base);
+   dev_dbg(kfd_device,
+   "scratch_limit %llX\n", pdd->scratch_limit);
 
+   if (++args->num_of_nodes >= NUM_OF_SUPPORTED_GPUS)
+   break;
+   }
mutex_unlock(>mutex);
 
return 0;
@@ -926,9 +921,8 @@ static