[PATCH v2 03/23] drm/amdkfd: enable pc sampling query

James Zhu jamesz at amd.com
Wed Dec 13 15:41:18 UTC 2023


On 2023-12-12 19:55, Yat Sin, David wrote:
> [AMD Official Use Only - General]
>
>> -----Original Message-----
>> From: Zhu, James<James.Zhu at amd.com>
>> Sent: Thursday, December 7, 2023 5:54 PM
>> To:amd-gfx at lists.freedesktop.org
>> Cc: Kuehling, Felix<Felix.Kuehling at amd.com>; Greathouse, Joseph
>> <Joseph.Greathouse at amd.com>; Yat Sin, David<David.YatSin at amd.com>;
>> Zhu, James<James.Zhu at amd.com>
>> Subject: [PATCH v2 03/23] drm/amdkfd: enable pc sampling query
>>
>> From: David Yat Sin<david.yatsin at amd.com>
>>
>> Enable pc sampling to query system capability.
>>
>> Co-developed-by: James Zhu<James.Zhu at amd.com>
>> Signed-off-by: James Zhu<James.Zhu at amd.com>
>> Signed-off-by: David Yat Sin<david.yatsin at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdkfd/kfd_pc_sampling.c | 54
>> +++++++++++++++++++-
>>   1 file changed, 53 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_pc_sampling.c
>> b/drivers/gpu/drm/amd/amdkfd/kfd_pc_sampling.c
>> index a7e78ff42d07..49fecbc7013e 100644
>> --- a/drivers/gpu/drm/amd/amdkfd/kfd_pc_sampling.c
>> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_pc_sampling.c
>> @@ -25,10 +25,62 @@
>>   #include "amdgpu_amdkfd.h"
>>   #include "kfd_pc_sampling.h"
>>
>> +struct supported_pc_sample_info {
>> +     uint32_t ip_version;
>> +     const struct kfd_pc_sample_info *sample_info; };
>> +
>> +const struct kfd_pc_sample_info sample_info_hosttrap_9_0_0 = {
>> +     0, 1, ~0ULL, 0, KFD_IOCTL_PCS_METHOD_HOSTTRAP,
>> +KFD_IOCTL_PCS_TYPE_TIME_US };
>> +
>> +struct supported_pc_sample_info supported_formats[] = {
>> +     { IP_VERSION(9, 4, 1), &sample_info_hosttrap_9_0_0 },
>> +     { IP_VERSION(9, 4, 2), &sample_info_hosttrap_9_0_0 }, };
>> +
>>   static int kfd_pc_sample_query_cap(struct kfd_process_device *pdd,
>>                                        struct kfd_ioctl_pc_sample_args
>> __user *user_args)  {
>> -     return -EINVAL;
>> +     uint64_t sample_offset;
>> +     int num_method = 0;
>> +     int i;
>> +
>> +     for (i = 0; i < ARRAY_SIZE(supported_formats); i++)
>> +             if (KFD_GC_VERSION(pdd->dev) ==
>> supported_formats[i].ip_version)
>> +                     num_method++;
>> +
>> +     if (!num_method) {
>> +             pr_debug("PC Sampling not supported on GC_HWIP:0x%x.",
>> +                     pdd->dev->adev->ip_versions[GC_HWIP][0]);
>> +             return -EOPNOTSUPP;
>> +     }
>> +
>> +     if (!user_args->sample_info_ptr) {
> Should be:
> if (!user_args->sample_info_ptr || !user_args->num_sample_info) {
>
>> +             user_args->num_sample_info = num_method;
>> +             return 0;
>> +     }
>> +
>> +     if (user_args->num_sample_info < num_method) {
>> +             user_args->num_sample_info = num_method;
>> +             pr_debug("Sample info buffer is not large enough, "
>> +                      "ASIC requires space for %d kfd_pc_sample_info
>> entries.", num_method);
>> +             return -ENOSPC;
>> +     }
>> +
>> +     sample_offset = user_args->sample_info_ptr;
> If there is another active PC Sampling session that is active, I thought we were planning to have code to
> return a reduced list with only the methods that are compatible with the current active session. Did we
> decide to drop this behavior?
[JZ] Do we have design changed here? I though we allow sharing the 
sameactive PC Sampling session between multiple processes.
>
> Regards,
> David
>
>> +     for (i = 0; i < ARRAY_SIZE(supported_formats); i++) {
>> +             if (KFD_GC_VERSION(pdd->dev) ==
>> supported_formats[i].ip_version) {
>> +                     int ret = copy_to_user((void __user *) sample_offset,
>> +                             supported_formats[i].sample_info,
>> sizeof(struct kfd_pc_sample_info));
>> +                     if (ret) {
>> +                             pr_debug("Failed to copy PC sampling info to
>> user.");
>> +                             return -EFAULT;
>> +                     }
>> +                     sample_offset += sizeof(struct kfd_pc_sample_info);
>> +             }
>> +     }
>> +
>> +     return 0;
>>   }
>>
>>   static int kfd_pc_sample_start(struct kfd_process_device *pdd)
>> --
>> 2.25.1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20231213/27d7f805/attachment.htm>


More information about the amd-gfx mailing list