[PATCH] drm/amdkfd: Check cgroup when returning DMABuf info
Felix Kuehling
felix.kuehling at amd.com
Mon Mar 18 20:12:39 UTC 2024
On 2024-03-15 14:17, Mukul Joshi wrote:
> Check cgroup permissions when returning DMA-buf info and
> based on cgroup check return the id of the GPU that has
> access to the BO.
>
> Signed-off-by: Mukul Joshi <mukul.joshi at amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> index dfa8c69532d4..f9631f4b1a02 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> @@ -1523,7 +1523,7 @@ static int kfd_ioctl_get_dmabuf_info(struct file *filep,
>
> /* Find a KFD GPU device that supports the get_dmabuf_info query */
> for (i = 0; kfd_topology_enum_kfd_devices(i, &dev) == 0; i++)
> - if (dev)
> + if (dev && !kfd_devcgroup_check_permission(dev))
> break;
> if (!dev)
> return -EINVAL;
> @@ -1545,7 +1545,7 @@ static int kfd_ioctl_get_dmabuf_info(struct file *filep,
> if (xcp_id >= 0)
> args->gpu_id = dmabuf_adev->kfd.dev->nodes[xcp_id]->id;
> else
> - args->gpu_id = dmabuf_adev->kfd.dev->nodes[0]->id;
> + args->gpu_id = dev->id;
If I remember correctly, this was meant as a fallback in case for GTT
BOs where the exporting partition wasn't known and the application
didn't have access to the first partition. I think the way you wrote
this, it could also change the behaviour (report the wrong GPU ID) on
single-partition GPUs, which is probably not intended. Maybe this would
preserve the behaviour for that case:
...
- else
+ else if (!kfd_devcgroup_check_permission(dmabuf_adev->kfd.dev->nodes[0]))
args->gpu_id = dmabuf_adev->kfd.dev->nodes[0]->id;
+ else
+ args->gpu_id = dev->id;
Or maybe a more general solution would make DMABuf import work when the
exporter is really unknown or not even a GPU. This came up not so long
ago in the context of interop with 3rd-party devices. This may require
user mode changes as well.
Regards,
Felix
> args->flags = flags;
>
> /* Copy metadata buffer to user mode */
More information about the amd-gfx
mailing list