Re: [RFC v3 5/8] dmabuf: Add gpu cgroup charge transfer function

From: Michal Koutný
Date: Mon Mar 21 2022 - 13:45:40 EST


Hello.

On Wed, Mar 09, 2022 at 04:52:15PM +0000, "T.J. Mercier" <tjmercier@xxxxxxxxxx> 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