11.01.2021 16:00, Mikko Perttunen пишет: > +int tegra_drm_ioctl_channel_open(struct drm_device *drm, void *data, > + struct drm_file *file) > +{ > + struct tegra_drm_file *fpriv = file->driver_priv; > + struct tegra_drm *tegra = drm->dev_private; > + struct drm_tegra_channel_open *args = data; > + struct tegra_drm_client *client = NULL; > + struct tegra_drm_channel_ctx *ctx; > + int err; > + > + if (args->flags) > + return -EINVAL; > + > + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); > + if (!ctx) > + return -ENOMEM; > + > + err = -ENODEV; > + list_for_each_entry(client, &tegra->clients, list) { > + if (client->base.class == args->host1x_class) { > + err = 0; > + break; > + } > + } > + if (err) > + goto free_ctx; > + > + if (client->shared_channel) { > + ctx->channel = host1x_channel_get(client->shared_channel); Let's omit the shared_channel until it will be really needed and used.