aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-08-08 09:41:17 -0400
committerDave Airlie <airlied@redhat.com>2013-08-18 20:03:49 -0400
commit3d914e8357256e7e92d1b7dd2dda9cf94e39c4e8 (patch)
tree252aea0277f6713ba7b57e7e6615f599e373186b
parent45886af246d926304d5e990da63d55d9db3216c0 (diff)
drm: hide legacy sg cleanup better from common code
I've decided that some clear markers for what's legacy dri1/non-gem code is useful. I've opted to use the drm_legacy prefix and then hide all the checks in that function for better readability in the common code. Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/drm_drv.c6
-rw-r--r--drivers/gpu/drm/drm_scatter.c10
-rw-r--r--include/drm/drmP.h2
3 files changed, 11 insertions, 7 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index dddd79988ffc..743b24d7918e 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -197,11 +197,7 @@ int drm_lastclose(struct drm_device * dev)
197 197
198 drm_agp_clear(dev); 198 drm_agp_clear(dev);
199 199
200 if (drm_core_check_feature(dev, DRIVER_SG) && dev->sg && 200 drm_legacy_sg_cleanup(dev);
201 !drm_core_check_feature(dev, DRIVER_MODESET)) {
202 drm_sg_cleanup(dev->sg);
203 dev->sg = NULL;
204 }
205 201
206 /* Clear vma list (only built for debugging) */ 202 /* Clear vma list (only built for debugging) */
207 list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) { 203 list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) {
diff --git a/drivers/gpu/drm/drm_scatter.c b/drivers/gpu/drm/drm_scatter.c
index a4a076ff1757..dd8a6480065c 100644
--- a/drivers/gpu/drm/drm_scatter.c
+++ b/drivers/gpu/drm/drm_scatter.c
@@ -46,7 +46,7 @@ static inline void *drm_vmalloc_dma(unsigned long size)
46#endif 46#endif
47} 47}
48 48
49void drm_sg_cleanup(struct drm_sg_mem * entry) 49static void drm_sg_cleanup(struct drm_sg_mem * entry)
50{ 50{
51 struct page *page; 51 struct page *page;
52 int i; 52 int i;
@@ -64,6 +64,14 @@ void drm_sg_cleanup(struct drm_sg_mem * entry)
64 kfree(entry); 64 kfree(entry);
65} 65}
66 66
67void drm_legacy_sg_cleanup(struct drm_device *dev)
68{
69 if (drm_core_check_feature(dev, DRIVER_SG) && dev->sg &&
70 !drm_core_check_feature(dev, DRIVER_MODESET)) {
71 drm_sg_cleanup(dev->sg);
72 dev->sg = NULL;
73 }
74}
67#ifdef _LP64 75#ifdef _LP64
68# define ScatterHandle(x) (unsigned int)((x >> 32) + (x & ((1L << 32) - 1))) 76# define ScatterHandle(x) (unsigned int)((x >> 32) + (x & ((1L << 32) - 1)))
69#else 77#else
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 813ca1d11728..10d9f83a9df0 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1522,7 +1522,7 @@ extern int drm_vma_info(struct seq_file *m, void *data);
1522#endif 1522#endif
1523 1523
1524 /* Scatter Gather Support (drm_scatter.h) */ 1524 /* Scatter Gather Support (drm_scatter.h) */
1525extern void drm_sg_cleanup(struct drm_sg_mem * entry); 1525extern void drm_legacy_sg_cleanup(struct drm_device *dev);
1526extern int drm_sg_alloc(struct drm_device *dev, void *data, 1526extern int drm_sg_alloc(struct drm_device *dev, void *data,
1527 struct drm_file *file_priv); 1527 struct drm_file *file_priv);
1528extern int drm_sg_free(struct drm_device *dev, void *data, 1528extern int drm_sg_free(struct drm_device *dev, void *data,