diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-09-11 08:46:53 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-09-11 08:46:53 -0400 |
commit | 336879b1da97fffc097f77c6d6f818660f2826f0 (patch) | |
tree | 4ddb4d1c5d2b67fb096c72e41d2a03b01a605041 /drivers/gpu/drm/drm_drv.c | |
parent | 3d3cbd84300e7be1e53083cac0f6f9c12978ecb4 (diff) | |
parent | fdcaa1dbb7c6ed419b10fb8cdb5001ab0a00538f (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.c | 21 |
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); | |||
133 | static void drm_master_destroy(struct kref *kref) | 133 | static 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 | ||
202 | out_unlock: | 198 | out_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 | ||
224 | out_unlock: | 221 | out_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); |