05.09.2020 13:34, Mikko Perttunen пишет:
> +int tegra_drm_ioctl_channel_submit(struct drm_device *drm, void *data,
> +                                struct drm_file *file)
> +{
> +     struct tegra_drm_file *fpriv = file->driver_priv;
> +     struct drm_tegra_channel_submit *args = data;
> +     struct drm_tegra_submit_syncpt_incr incr;
> +     struct tegra_drm_job_data *job_data;
> +     struct ww_acquire_ctx acquire_ctx;
> +     struct tegra_drm_channel_ctx *ctx;
> +     struct host1x_job *job;
> +     struct gather_bo *bo;
> +     u32 i;
> +     int err;
> +
> +     if (args->reserved[0] || args->reserved[1] || args->reserved[2] ||
> +         args->reserved[3])
> +             return -EINVAL;
> +
> +     ctx = tegra_drm_channel_ctx_lock(fpriv, args->channel_ctx);
> +     if (!ctx)
> +             return -EINVAL;
> +
> +     err = submit_copy_gather_data(drm, &bo, args);
> +     if (err)
> +             goto unlock;
> +
> +     job_data = kzalloc(sizeof(*job_data), GFP_KERNEL);
> +     if (!job_data) {
> +             err = -ENOMEM;
> +             goto put_bo;
> +     }
> +
> +     err = submit_process_bufs(drm, bo, job_data, ctx, args, &acquire_ctx);
> +     if (err)
> +             goto free_job_data;
> +
> +     err = submit_create_job(drm, &job, bo, ctx, args, file);
> +     if (err)
> +             goto free_job_data;
> +
> +     err = submit_handle_syncpts(drm, job, &incr, args);
> +     if (err)
> +             goto put_job;

How many sync points would use an average job? Maybe it should be better
to have the predefined array of sync points within the struct
drm_tegra_channel_submit?
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to