From: Ilija Hadzic <ihadzic@research.bell-labs.com> To: dri-devel@lists.freedesktop.org Subject: [PATCH 06/19] drm: add support for render nodes Date: Thu, 12 Apr 2012 14:19:31 -0400 [thread overview] Message-ID: <1334254784-3200-7-git-send-email-ihadzic@research.bell-labs.com> (raw) In-Reply-To: <1334254784-3200-1-git-send-email-ihadzic@research.bell-labs.com> Add support for creating multiple render nodes on the same physical GPU. Patch derived from 7c5cc4f63556e351e9e5980ed22accad410e3fdc originally authored by Dave Airlie. Signed-off-by: Ilija Hadzic <ihadzic@research.bell-labs.com> --- drivers/gpu/drm/drm_crtc.c | 1 + drivers/gpu/drm/drm_stub.c | 32 +++++++++++++++++++++++++++++++- drivers/gpu/drm/drm_vm.c | 7 +++++++ include/drm/drmP.h | 4 +++- include/drm/drm_crtc.h | 1 + 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index eafb49d..4fc7c5f 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -952,6 +952,7 @@ int drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *group) group->num_planes = 0; return 0; } +EXPORT_SYMBOL(drm_mode_group_init); int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group) diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 6d7b083..53033d3 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -269,6 +269,7 @@ int drm_fill_in_dev(struct drm_device *dev, INIT_LIST_HEAD(&dev->vmalist); INIT_LIST_HEAD(&dev->maplist); INIT_LIST_HEAD(&dev->vblank_event_list); + INIT_LIST_HEAD(&dev->render_minor_list); spin_lock_init(&dev->count_lock); spin_lock_init(&dev->event_lock); @@ -355,6 +356,7 @@ int drm_get_minor(struct drm_device *dev, struct drm_minor **minor, int type) new_minor->dev = dev; new_minor->index = minor_id; INIT_LIST_HEAD(&new_minor->master_list); + INIT_LIST_HEAD(&new_minor->render_node_list); idr_replace(&drm_minors_idr, new_minor, minor_id); @@ -398,6 +400,29 @@ err_idr: return ret; } +int drm_create_minor_render(struct drm_device *dev, struct drm_minor **minor_p) +{ + int ret; + struct drm_minor *minor; + + ret = drm_get_minor(dev, &minor, DRM_MINOR_RENDER); + if (ret) + return ret; + + list_add_tail(&minor->render_node_list, &dev->render_minor_list); + return 0; +} + +int drm_destroy_minor_render(struct drm_device *dev) +{ + struct drm_minor *minor, *tmp; + + list_for_each_entry_safe(minor, tmp, &dev->render_minor_list, render_node_list) { + drm_put_minor(&minor); + } + return 0; +} + /** * Put a secondary minor number. * @@ -414,6 +439,8 @@ int drm_put_minor(struct drm_minor **minor_p) DRM_DEBUG("release secondary minor %d\n", minor->index); + list_del(&minor->render_node_list); + if (minor->type == DRM_MINOR_LEGACY) drm_proc_cleanup(minor, drm_proc_root); #if defined(CONFIG_DEBUG_FS) @@ -476,9 +503,12 @@ void drm_put_dev(struct drm_device *dev) drm_ctxbitmap_cleanup(dev); - if (drm_core_check_feature(dev, DRIVER_MODESET)) + if (drm_core_check_feature(dev, DRIVER_MODESET)) { drm_put_minor(&dev->control); + drm_destroy_minor_render(dev); + } + if (driver->driver_features & DRIVER_GEM) drm_gem_destroy(dev); diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c index bcd15b0..7cf67dd 100644 --- a/drivers/gpu/drm/drm_vm.c +++ b/drivers/gpu/drm/drm_vm.c @@ -691,8 +691,15 @@ EXPORT_SYMBOL(drm_mmap); void drm_unmap_mapping(struct drm_device *dev, loff_t const holebegin, loff_t const holelen) { + struct drm_minor *minor; if (dev->primary->dev_mapping) unmap_mapping_range(dev->primary->dev_mapping, holebegin, holelen, 1); + + list_for_each_entry(minor, &dev->render_minor_list, render_node_list) { + if (minor->dev_mapping) + unmap_mapping_range(minor->dev_mapping, + holebegin, holelen, 1); + } } EXPORT_SYMBOL(drm_unmap_mapping); diff --git a/include/drm/drmP.h b/include/drm/drmP.h index eeb377a..d9eee26 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -999,6 +999,8 @@ struct drm_minor { struct drm_mode_group mode_group; struct address_space *dev_mapping; + + struct list_head render_node_list; }; /* mode specified on the command line */ @@ -1162,7 +1164,7 @@ struct drm_device { unsigned int agp_buffer_token; struct drm_minor *control; /**< Control node for card */ struct drm_minor *primary; /**< render type primary screen head */ - + struct list_head render_minor_list; struct drm_mode_config mode_config; /**< Current mode config */ /** \name GEM information */ diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 4aa793e..2b9d062 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -851,6 +851,7 @@ extern char *drm_get_dvi_i_select_name(int val); extern char *drm_get_tv_subconnector_name(int val); extern char *drm_get_tv_select_name(int val); extern void drm_fb_release(struct drm_file *file_priv); +extern int drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *group); extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); extern struct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter); -- 1.7.8.5
next prev parent reply other threads:[~2012-04-12 18:21 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-04-12 18:19 [RFC v2] Revive the work on render-nodes branch Ilija Hadzic 2012-04-12 18:19 ` [PATCH 01/19] drm: simplify dereferencing of node type Ilija Hadzic 2012-04-12 18:19 ` [PATCH 02/19] drm: track planes in drm_mode_group structure Ilija Hadzic 2012-04-12 18:19 ` [PATCH 03/19] drm: use drm_mode_group in drm_mode_getplane_res Ilija Hadzic 2012-04-12 18:19 ` [PATCH 04/19] drm: do not push inode down into drm_open_helper Ilija Hadzic 2012-04-12 18:19 ` [PATCH 05/19] drm: move dev_mapping to the minor node Ilija Hadzic 2012-04-20 10:04 ` Dave Airlie 2012-04-30 14:48 ` Ilija Hadzic 2012-04-30 16:39 ` Dave Airlie 2012-04-30 16:52 ` Ilija Hadzic 2012-04-30 17:53 ` Dave Airlie 2012-04-30 18:04 ` Dave Airlie 2012-05-15 20:48 ` Ilija Hadzic 2012-04-12 18:19 ` Ilija Hadzic [this message] 2012-04-12 18:19 ` [PATCH 07/19] drm: initial multiple nodes ioctl work Ilija Hadzic 2012-04-20 10:15 ` Dave Airlie 2012-04-12 18:19 ` [PATCH 08/19] drm: separate render node descriptor from minor Ilija Hadzic 2012-04-12 18:19 ` [PATCH 09/19] drm: cleanup render node ioctls Ilija Hadzic 2012-04-12 18:19 ` [PATCH 10/19] drm: only allow render node ioctls through control node Ilija Hadzic 2012-04-12 18:19 ` [PATCH 11/19] drm: do not remove a render node in use Ilija Hadzic 2012-04-12 18:19 ` [PATCH 12/19] drm: allocate correct id_list size for a render node Ilija Hadzic 2012-04-12 18:19 ` [PATCH 13/19] drm: add drm_mode_group_fini function Ilija Hadzic 2012-04-12 18:19 ` [PATCH 14/19] drm: properly free id_list when a render node is removed Ilija Hadzic 2012-04-12 18:19 ` [PATCH 15/19] drm: call drm_mode_group_fini on primary node Ilija Hadzic 2012-04-12 18:19 ` [PATCH 16/19] drm: more elaborate check for resource count Ilija Hadzic 2012-04-12 18:19 ` [PATCH 17/19] drm: validate id list when creating a render node Ilija Hadzic 2012-04-12 18:19 ` [PATCH 18/19] drm: keep track of which node holds which resource Ilija Hadzic 2012-04-12 18:19 ` [PATCH 19/19] drm: hold mutex in critical sections of render-node code Ilija Hadzic 2012-04-12 18:55 ` [RFC v2] Revive the work on render-nodes branch Ville Syrjälä 2012-04-12 19:09 ` Ilija Hadzic 2012-04-20 10:20 ` Dave Airlie 2012-04-20 13:46 ` Daniel Vetter 2012-04-30 15:16 ` Ilija Hadzic 2012-04-30 19:01 ` Kristian Høgsberg
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1334254784-3200-7-git-send-email-ihadzic@research.bell-labs.com \ --to=ihadzic@research.bell-labs.com \ --cc=dri-devel@lists.freedesktop.org \ --subject='Re: [PATCH 06/19] drm: add support for render nodes' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.