On Mon, Jan 11, 2021 at 03:00:16PM +0200, Mikko Perttunen wrote: > To avoid duplication, allocate the per-engine shared channel in the > core code instead. Once MLOCKs are implemented on Host1x side, we > can also update this to avoid allocating a shared channel when > MLOCKs are enabled. > > Signed-off-by: Mikko Perttunen > --- > drivers/gpu/drm/tegra/drm.c | 11 +++++++++++ > drivers/gpu/drm/tegra/drm.h | 4 ++++ > 2 files changed, 15 insertions(+) It'd be helpful if the commit message explained what these per-engine shared channels are used for. > > diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c > index cd81b52a9e06..afd3f143c5e0 100644 > --- a/drivers/gpu/drm/tegra/drm.c > +++ b/drivers/gpu/drm/tegra/drm.c > @@ -880,6 +880,14 @@ static const struct drm_driver tegra_drm_driver = { > int tegra_drm_register_client(struct tegra_drm *tegra, > struct tegra_drm_client *client) > { > + /* > + * When MLOCKs are implemented, change to allocate a shared channel > + * only when MLOCKs are disabled. > + */ > + client->shared_channel = host1x_channel_request(&client->base); > + if (!client->shared_channel) > + return -EBUSY; > + > mutex_lock(&tegra->clients_lock); > list_add_tail(&client->list, &tegra->clients); > client->drm = tegra; > @@ -896,6 +904,9 @@ int tegra_drm_unregister_client(struct tegra_drm *tegra, > client->drm = NULL; > mutex_unlock(&tegra->clients_lock); > > + if (client->shared_channel) > + host1x_channel_put(client->shared_channel); > + > return 0; > } > > diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h > index f38de08e0c95..0f38f159aa8e 100644 > --- a/drivers/gpu/drm/tegra/drm.h > +++ b/drivers/gpu/drm/tegra/drm.h > @@ -87,8 +87,12 @@ struct tegra_drm_client { > struct list_head list; > struct tegra_drm *drm; > > + /* Set by driver */ > unsigned int version; > const struct tegra_drm_client_ops *ops; > + > + /* Set by TegraDRM core */ > + struct host1x_channel *shared_channel; Perhaps reorder this so that the core-initialized fields are closer to the top and the client-initialized fields are closer to the bottom? That seems like a more natural order. Thierry