aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_drv.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-11 08:46:53 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-11 08:46:53 -0400
commit336879b1da97fffc097f77c6d6f818660f2826f0 (patch)
tree4ddb4d1c5d2b67fb096c72e41d2a03b01a605041 /drivers/gpu/drm/drm_drv.c
parent3d3cbd84300e7be1e53083cac0f6f9c12978ecb4 (diff)
parentfdcaa1dbb7c6ed419b10fb8cdb5001ab0a00538f (diff)
Merge remote-tracking branch 'airlied/drm-next' into topic/vblank-rework
Dave asked me to do the backmerge before sending him the revised pull request, so here we go. Nothing fancy in the conflicts, just a few things changed right next to each another. Conflicts: drivers/gpu/drm/drm_irq.c Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
-rw-r--r--drivers/gpu/drm/drm_drv.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index db03e16ca817..970613c5a1eb 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -133,7 +133,6 @@ EXPORT_SYMBOL(drm_master_get);
133static void drm_master_destroy(struct kref *kref) 133static void drm_master_destroy(struct kref *kref)
134{ 134{
135 struct drm_master *master = container_of(kref, struct drm_master, refcount); 135 struct drm_master *master = container_of(kref, struct drm_master, refcount);
136 struct drm_magic_entry *pt, *next;
137 struct drm_device *dev = master->minor->dev; 136 struct drm_device *dev = master->minor->dev;
138 struct drm_map_list *r_list, *list_temp; 137 struct drm_map_list *r_list, *list_temp;
139 138
@@ -143,7 +142,7 @@ static void drm_master_destroy(struct kref *kref)
143 142
144 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) { 143 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) {
145 if (r_list->master == master) { 144 if (r_list->master == master) {
146 drm_rmmap_locked(dev, r_list->map); 145 drm_legacy_rmmap_locked(dev, r_list->map);
147 r_list = NULL; 146 r_list = NULL;
148 } 147 }
149 } 148 }
@@ -154,12 +153,6 @@ static void drm_master_destroy(struct kref *kref)
154 master->unique_len = 0; 153 master->unique_len = 0;
155 } 154 }
156 155
157 list_for_each_entry_safe(pt, next, &master->magicfree, head) {
158 list_del(&pt->head);
159 drm_ht_remove_item(&master->magiclist, &pt->hash_item);
160 kfree(pt);
161 }
162
163 drm_ht_remove(&master->magiclist); 156 drm_ht_remove(&master->magiclist);
164 157
165 mutex_unlock(&dev->struct_mutex); 158 mutex_unlock(&dev->struct_mutex);
@@ -179,7 +172,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
179 int ret = 0; 172 int ret = 0;
180 173
181 mutex_lock(&dev->master_mutex); 174 mutex_lock(&dev->master_mutex);
182 if (drm_is_master(file_priv)) 175 if (file_priv->is_master)
183 goto out_unlock; 176 goto out_unlock;
184 177
185 if (file_priv->minor->master) { 178 if (file_priv->minor->master) {
@@ -193,10 +186,13 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
193 } 186 }
194 187
195 file_priv->minor->master = drm_master_get(file_priv->master); 188 file_priv->minor->master = drm_master_get(file_priv->master);
189 file_priv->is_master = 1;
196 if (dev->driver->master_set) { 190 if (dev->driver->master_set) {
197 ret = dev->driver->master_set(dev, file_priv, false); 191 ret = dev->driver->master_set(dev, file_priv, false);
198 if (unlikely(ret != 0)) 192 if (unlikely(ret != 0)) {
193 file_priv->is_master = 0;
199 drm_master_put(&file_priv->minor->master); 194 drm_master_put(&file_priv->minor->master);
195 }
200 } 196 }
201 197
202out_unlock: 198out_unlock:
@@ -210,7 +206,7 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
210 int ret = -EINVAL; 206 int ret = -EINVAL;
211 207
212 mutex_lock(&dev->master_mutex); 208 mutex_lock(&dev->master_mutex);
213 if (!drm_is_master(file_priv)) 209 if (!file_priv->is_master)
214 goto out_unlock; 210 goto out_unlock;
215 211
216 if (!file_priv->minor->master) 212 if (!file_priv->minor->master)
@@ -220,6 +216,7 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
220 if (dev->driver->master_drop) 216 if (dev->driver->master_drop)
221 dev->driver->master_drop(dev, file_priv, false); 217 dev->driver->master_drop(dev, file_priv, false);
222 drm_master_put(&file_priv->minor->master); 218 drm_master_put(&file_priv->minor->master);
219 file_priv->is_master = 0;
223 220
224out_unlock: 221out_unlock:
225 mutex_unlock(&dev->master_mutex); 222 mutex_unlock(&dev->master_mutex);
@@ -775,7 +772,7 @@ void drm_dev_unregister(struct drm_device *dev)
775 drm_vblank_cleanup(dev); 772 drm_vblank_cleanup(dev);
776 773
777 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) 774 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head)
778 drm_rmmap(dev, r_list->map); 775 drm_legacy_rmmap(dev, r_list->map);
779 776
780 drm_minor_unregister(dev, DRM_MINOR_LEGACY); 777 drm_minor_unregister(dev, DRM_MINOR_LEGACY);
781 drm_minor_unregister(dev, DRM_MINOR_RENDER); 778 drm_minor_unregister(dev, DRM_MINOR_RENDER);