[RFC v3 5/8] dmabuf: Add gpu cgroup charge transfer function
Michal Koutný
mkoutny at suse.com
Mon Mar 21 17:45:30 UTC 2022
Hello.
On Wed, Mar 09, 2022 at 04:52:15PM +0000, "T.J. Mercier" <tjmercier at google.com> wrote:
> +int dma_buf_charge_transfer(struct dma_buf *dmabuf, struct gpucg *gpucg)
> +{
> +#ifdef CONFIG_CGROUP_GPU
> + struct gpucg *current_gpucg;
> + int ret = 0;
> +
> + /*
> + * Verify that the cgroup of the process requesting the transfer is the
> + * same as the one the buffer is currently charged to.
> + */
> + current_gpucg = gpucg_get(current);
> + mutex_lock(&dmabuf->lock);
> + if (current_gpucg != dmabuf->gpucg) {
> + ret = -EPERM;
> + goto err;
> + }
Add a shortcut for gpucg == current_gpucg?
> +
> + ret = gpucg_try_charge(gpucg, dmabuf->gpucg_dev, dmabuf->size);
> + if (ret)
> + goto err;
> +
> + dmabuf->gpucg = gpucg;
> +
> + /* uncharge the buffer from the cgroup it's currently charged to. */
> + gpucg_uncharge(current_gpucg, dmabuf->gpucg_dev, dmabuf->size);
I think gpucg_* API would need to cater for such transfers too since
possibly transitional breach of a limit during the transfer may
unnecessarily fail the operation.
My 0.02€,
Michal
More information about the dri-devel
mailing list