summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2019-04-18 03:10:40 -0400
committerDave Airlie <airlied@redhat.com>2019-04-23 22:33:15 -0400
commit61ae227032e7f9278cc7d7224045e77e0dedb33e (patch)
tree037c9119c6c97c362294c24bc7d890a679c0bdd3
parent848ee53894811e8bd3aade86415e6bc0afe5cbd3 (diff)
drm: allow removal of legacy codepaths (v4.1)
If you don't want the legacy drivers, then lets get rid of all the legacy codepaths from the core module. This drop the size of drm.ko for me by about 10%. 380515 7422 4192 392129 5fbc1 ../../drm-next-build/drivers/gpu/drm/drm.ko 351736 7298 4192 363226 58ada ../../drm-next-build/drivers/gpu/drm/drm.ko v2: drop drm_lock as well, fix some DMA->DRM typos v3: avoid ifdefs in mainline code v4: rework ioctl defs v4.1: fix nouveau Kconfig Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/Makefile9
-rw-r--r--drivers/gpu/drm/drm_internal.h2
-rw-r--r--drivers/gpu/drm/drm_ioc32.c13
-rw-r--r--drivers/gpu/drm/drm_ioctl.c55
-rw-r--r--drivers/gpu/drm/drm_irq.c2
-rw-r--r--drivers/gpu/drm/drm_legacy.h53
-rw-r--r--drivers/gpu/drm/drm_vm.c2
-rw-r--r--drivers/gpu/drm/nouveau/Kconfig2
8 files changed, 105 insertions, 33 deletions
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index c9caefe02f42..f7ec57644df2 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -3,11 +3,9 @@
3# Makefile for the drm device driver. This driver provides support for the 3# Makefile for the drm device driver. This driver provides support for the
4# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. 4# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
5 5
6drm-y := drm_auth.o drm_bufs.o drm_cache.o \ 6drm-y := drm_auth.o drm_cache.o \
7 drm_context.o drm_dma.o \
8 drm_file.o drm_gem.o drm_ioctl.o drm_irq.o \ 7 drm_file.o drm_gem.o drm_ioctl.o drm_irq.o \
9 drm_lock.o drm_memory.o drm_drv.o \ 8 drm_memory.o drm_drv.o drm_pci.o \
10 drm_scatter.o drm_pci.o \
11 drm_sysfs.o drm_hashtab.o drm_mm.o \ 9 drm_sysfs.o drm_hashtab.o drm_mm.o \
12 drm_crtc.o drm_fourcc.o drm_modes.o drm_edid.o \ 10 drm_crtc.o drm_fourcc.o drm_modes.o drm_edid.o \
13 drm_encoder_slave.o \ 11 drm_encoder_slave.o \
@@ -19,8 +17,9 @@ drm-y := drm_auth.o drm_bufs.o drm_cache.o \
19 drm_plane.o drm_color_mgmt.o drm_print.o \ 17 drm_plane.o drm_color_mgmt.o drm_print.o \
20 drm_dumb_buffers.o drm_mode_config.o drm_vblank.o \ 18 drm_dumb_buffers.o drm_mode_config.o drm_vblank.o \
21 drm_syncobj.o drm_lease.o drm_writeback.o drm_client.o \ 19 drm_syncobj.o drm_lease.o drm_writeback.o drm_client.o \
22 drm_atomic_uapi.o drm_legacy_misc.o 20 drm_atomic_uapi.o
23 21
22drm-$(CONFIG_DRM_LEGACY) += drm_legacy_misc.o drm_bufs.o drm_context.o drm_dma.o drm_scatter.o drm_lock.o
24drm-$(CONFIG_DRM_LIB_RANDOM) += lib/drm_random.o 23drm-$(CONFIG_DRM_LIB_RANDOM) += lib/drm_random.o
25drm-$(CONFIG_DRM_VM) += drm_vm.o 24drm-$(CONFIG_DRM_VM) += drm_vm.o
26drm-$(CONFIG_COMPAT) += drm_ioc32.o 25drm-$(CONFIG_COMPAT) += drm_ioc32.o
diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
index d9a483a5fce0..e19ac7ca602d 100644
--- a/drivers/gpu/drm/drm_internal.h
+++ b/drivers/gpu/drm/drm_internal.h
@@ -71,8 +71,10 @@ int drm_legacy_modeset_ctl_ioctl(struct drm_device *dev, void *data,
71/* drm_irq.c */ 71/* drm_irq.c */
72 72
73/* IOCTLS */ 73/* IOCTLS */
74#if IS_ENABLED(CONFIG_DRM_LEGACY)
74int drm_legacy_irq_control(struct drm_device *dev, void *data, 75int drm_legacy_irq_control(struct drm_device *dev, void *data,
75 struct drm_file *file_priv); 76 struct drm_file *file_priv);
77#endif
76 78
77int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data, 79int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
78 struct drm_file *filp); 80 struct drm_file *filp);
diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c
index 0e3043e08c69..374b372da58a 100644
--- a/drivers/gpu/drm/drm_ioc32.c
+++ b/drivers/gpu/drm/drm_ioc32.c
@@ -156,6 +156,7 @@ static int compat_drm_setunique(struct file *file, unsigned int cmd,
156 return -EINVAL; 156 return -EINVAL;
157} 157}
158 158
159#if IS_ENABLED(CONFIG_DRM_LEGACY)
159typedef struct drm_map32 { 160typedef struct drm_map32 {
160 u32 offset; /* Requested physical address (0 for SAREA) */ 161 u32 offset; /* Requested physical address (0 for SAREA) */
161 u32 size; /* Requested physical size (bytes) */ 162 u32 size; /* Requested physical size (bytes) */
@@ -239,6 +240,7 @@ static int compat_drm_rmmap(struct file *file, unsigned int cmd,
239 map.handle = compat_ptr(handle); 240 map.handle = compat_ptr(handle);
240 return drm_ioctl_kernel(file, drm_legacy_rmmap_ioctl, &map, DRM_AUTH); 241 return drm_ioctl_kernel(file, drm_legacy_rmmap_ioctl, &map, DRM_AUTH);
241} 242}
243#endif
242 244
243typedef struct drm_client32 { 245typedef struct drm_client32 {
244 int idx; /* Which client desired? */ 246 int idx; /* Which client desired? */
@@ -301,6 +303,7 @@ static int compat_drm_getstats(struct file *file, unsigned int cmd,
301 return 0; 303 return 0;
302} 304}
303 305
306#if IS_ENABLED(CONFIG_DRM_LEGACY)
304typedef struct drm_buf_desc32 { 307typedef struct drm_buf_desc32 {
305 int count; /* Number of buffers of this size */ 308 int count; /* Number of buffers of this size */
306 int size; /* Size in bytes */ 309 int size; /* Size in bytes */
@@ -604,6 +607,7 @@ static int compat_drm_dma(struct file *file, unsigned int cmd,
604 607
605 return 0; 608 return 0;
606} 609}
610#endif
607 611
608#if IS_ENABLED(CONFIG_AGP) 612#if IS_ENABLED(CONFIG_AGP)
609typedef struct drm_agp_mode32 { 613typedef struct drm_agp_mode32 {
@@ -748,6 +752,7 @@ static int compat_drm_agp_unbind(struct file *file, unsigned int cmd,
748} 752}
749#endif /* CONFIG_AGP */ 753#endif /* CONFIG_AGP */
750 754
755#if IS_ENABLED(CONFIG_DRM_LEGACY)
751typedef struct drm_scatter_gather32 { 756typedef struct drm_scatter_gather32 {
752 u32 size; /**< In bytes -- will round to page boundary */ 757 u32 size; /**< In bytes -- will round to page boundary */
753 u32 handle; /**< Used for mapping / unmapping */ 758 u32 handle; /**< Used for mapping / unmapping */
@@ -788,7 +793,7 @@ static int compat_drm_sg_free(struct file *file, unsigned int cmd,
788 return drm_ioctl_kernel(file, drm_legacy_sg_free, &request, 793 return drm_ioctl_kernel(file, drm_legacy_sg_free, &request,
789 DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY); 794 DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY);
790} 795}
791 796#endif
792#if defined(CONFIG_X86) 797#if defined(CONFIG_X86)
793typedef struct drm_update_draw32 { 798typedef struct drm_update_draw32 {
794 drm_drawable_t handle; 799 drm_drawable_t handle;
@@ -903,10 +908,13 @@ static struct {
903#define DRM_IOCTL32_DEF(n, f) [DRM_IOCTL_NR(n##32)] = {.fn = f, .name = #n} 908#define DRM_IOCTL32_DEF(n, f) [DRM_IOCTL_NR(n##32)] = {.fn = f, .name = #n}
904 DRM_IOCTL32_DEF(DRM_IOCTL_VERSION, compat_drm_version), 909 DRM_IOCTL32_DEF(DRM_IOCTL_VERSION, compat_drm_version),
905 DRM_IOCTL32_DEF(DRM_IOCTL_GET_UNIQUE, compat_drm_getunique), 910 DRM_IOCTL32_DEF(DRM_IOCTL_GET_UNIQUE, compat_drm_getunique),
911#if IS_ENABLED(CONFIG_DRM_LEGACY)
906 DRM_IOCTL32_DEF(DRM_IOCTL_GET_MAP, compat_drm_getmap), 912 DRM_IOCTL32_DEF(DRM_IOCTL_GET_MAP, compat_drm_getmap),
913#endif
907 DRM_IOCTL32_DEF(DRM_IOCTL_GET_CLIENT, compat_drm_getclient), 914 DRM_IOCTL32_DEF(DRM_IOCTL_GET_CLIENT, compat_drm_getclient),
908 DRM_IOCTL32_DEF(DRM_IOCTL_GET_STATS, compat_drm_getstats), 915 DRM_IOCTL32_DEF(DRM_IOCTL_GET_STATS, compat_drm_getstats),
909 DRM_IOCTL32_DEF(DRM_IOCTL_SET_UNIQUE, compat_drm_setunique), 916 DRM_IOCTL32_DEF(DRM_IOCTL_SET_UNIQUE, compat_drm_setunique),
917#if IS_ENABLED(CONFIG_DRM_LEGACY)
910 DRM_IOCTL32_DEF(DRM_IOCTL_ADD_MAP, compat_drm_addmap), 918 DRM_IOCTL32_DEF(DRM_IOCTL_ADD_MAP, compat_drm_addmap),
911 DRM_IOCTL32_DEF(DRM_IOCTL_ADD_BUFS, compat_drm_addbufs), 919 DRM_IOCTL32_DEF(DRM_IOCTL_ADD_BUFS, compat_drm_addbufs),
912 DRM_IOCTL32_DEF(DRM_IOCTL_MARK_BUFS, compat_drm_markbufs), 920 DRM_IOCTL32_DEF(DRM_IOCTL_MARK_BUFS, compat_drm_markbufs),
@@ -918,6 +926,7 @@ static struct {
918 DRM_IOCTL32_DEF(DRM_IOCTL_GET_SAREA_CTX, compat_drm_getsareactx), 926 DRM_IOCTL32_DEF(DRM_IOCTL_GET_SAREA_CTX, compat_drm_getsareactx),
919 DRM_IOCTL32_DEF(DRM_IOCTL_RES_CTX, compat_drm_resctx), 927 DRM_IOCTL32_DEF(DRM_IOCTL_RES_CTX, compat_drm_resctx),
920 DRM_IOCTL32_DEF(DRM_IOCTL_DMA, compat_drm_dma), 928 DRM_IOCTL32_DEF(DRM_IOCTL_DMA, compat_drm_dma),
929#endif
921#if IS_ENABLED(CONFIG_AGP) 930#if IS_ENABLED(CONFIG_AGP)
922 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_ENABLE, compat_drm_agp_enable), 931 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_ENABLE, compat_drm_agp_enable),
923 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_INFO, compat_drm_agp_info), 932 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_INFO, compat_drm_agp_info),
@@ -926,8 +935,10 @@ static struct {
926 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_BIND, compat_drm_agp_bind), 935 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_BIND, compat_drm_agp_bind),
927 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_UNBIND, compat_drm_agp_unbind), 936 DRM_IOCTL32_DEF(DRM_IOCTL_AGP_UNBIND, compat_drm_agp_unbind),
928#endif 937#endif
938#if IS_ENABLED(CONFIG_DRM_LEGACY)
929 DRM_IOCTL32_DEF(DRM_IOCTL_SG_ALLOC, compat_drm_sg_alloc), 939 DRM_IOCTL32_DEF(DRM_IOCTL_SG_ALLOC, compat_drm_sg_alloc),
930 DRM_IOCTL32_DEF(DRM_IOCTL_SG_FREE, compat_drm_sg_free), 940 DRM_IOCTL32_DEF(DRM_IOCTL_SG_FREE, compat_drm_sg_free),
941#endif
931#if defined(CONFIG_X86) || defined(CONFIG_IA64) 942#if defined(CONFIG_X86) || defined(CONFIG_IA64)
932 DRM_IOCTL32_DEF(DRM_IOCTL_UPDATE_DRAW, compat_drm_update_draw), 943 DRM_IOCTL32_DEF(DRM_IOCTL_UPDATE_DRAW, compat_drm_update_draw),
933#endif 944#endif
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index ce8a70875bd5..5878145077d0 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -553,6 +553,12 @@ EXPORT_SYMBOL(drm_ioctl_permit);
553 .name = #ioctl \ 553 .name = #ioctl \
554 } 554 }
555 555
556#if IS_ENABLED(CONFIG_DRM_LEGACY)
557#define DRM_LEGACY_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF(ioctl, _func, _flags)
558#else
559#define DRM_LEGACY_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF(ioctl, drm_invalid_op, _flags)
560#endif
561
556/* Ioctl table */ 562/* Ioctl table */
557static const struct drm_ioctl_desc drm_ioctls[] = { 563static const struct drm_ioctl_desc drm_ioctls[] = {
558 DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, 564 DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version,
@@ -560,7 +566,9 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
560 DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, DRM_UNLOCKED), 566 DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, DRM_UNLOCKED),
561 DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, DRM_UNLOCKED), 567 DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, DRM_UNLOCKED),
562 DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY), 568 DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY),
563 DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_legacy_getmap_ioctl, DRM_UNLOCKED), 569
570 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_legacy_getmap_ioctl, DRM_UNLOCKED),
571
564 DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, DRM_UNLOCKED), 572 DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, DRM_UNLOCKED),
565 DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, DRM_UNLOCKED), 573 DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, DRM_UNLOCKED),
566 DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, DRM_UNLOCKED|DRM_RENDER_ALLOW), 574 DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, DRM_UNLOCKED|DRM_RENDER_ALLOW),
@@ -572,39 +580,38 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
572 DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 580 DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
573 DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_UNLOCKED|DRM_MASTER), 581 DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_UNLOCKED|DRM_MASTER),
574 582
575 DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_legacy_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 583 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_legacy_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
576 DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_legacy_rmmap_ioctl, DRM_AUTH), 584 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_legacy_rmmap_ioctl, DRM_AUTH),
577 585
578 DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_legacy_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 586 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_legacy_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
579 DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_legacy_getsareactx, DRM_AUTH), 587 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_legacy_getsareactx, DRM_AUTH),
580 588
581 DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, DRM_UNLOCKED|DRM_ROOT_ONLY), 589 DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, DRM_UNLOCKED|DRM_ROOT_ONLY),
582 DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, DRM_UNLOCKED|DRM_ROOT_ONLY), 590 DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, DRM_UNLOCKED|DRM_ROOT_ONLY),
583 591
584 DRM_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_legacy_addctx, DRM_AUTH|DRM_ROOT_ONLY), 592 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_legacy_addctx, DRM_AUTH|DRM_ROOT_ONLY),
585 DRM_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_legacy_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 593 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_legacy_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
586 DRM_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 594 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
587 DRM_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_legacy_getctx, DRM_AUTH), 595 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_legacy_getctx, DRM_AUTH),
588 DRM_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_legacy_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 596 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_legacy_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
589 DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_legacy_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 597 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_legacy_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
590 DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_legacy_resctx, DRM_AUTH), 598 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_legacy_resctx, DRM_AUTH),
591 599
592 DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 600 DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
593 DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 601 DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
594 602
595 DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_legacy_lock, DRM_AUTH), 603 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_LOCK, drm_legacy_lock, DRM_AUTH),
596 DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_legacy_unlock, DRM_AUTH), 604 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_legacy_unlock, DRM_AUTH),
597 605
598 DRM_IOCTL_DEF(DRM_IOCTL_FINISH, drm_noop, DRM_AUTH), 606 DRM_IOCTL_DEF(DRM_IOCTL_FINISH, drm_noop, DRM_AUTH),
599 607
600 DRM_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_legacy_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 608 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_legacy_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
601 DRM_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_legacy_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 609 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_legacy_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
602 DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_legacy_infobufs, DRM_AUTH), 610 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_legacy_infobufs, DRM_AUTH),
603 DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_legacy_mapbufs, DRM_AUTH), 611 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_legacy_mapbufs, DRM_AUTH),
604 DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_legacy_freebufs, DRM_AUTH), 612 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_legacy_freebufs, DRM_AUTH),
605 DRM_IOCTL_DEF(DRM_IOCTL_DMA, drm_legacy_dma_ioctl, DRM_AUTH), 613 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_DMA, drm_legacy_dma_ioctl, DRM_AUTH),
606 614 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_legacy_irq_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
607 DRM_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_legacy_irq_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
608 615
609#if IS_ENABLED(CONFIG_AGP) 616#if IS_ENABLED(CONFIG_AGP)
610 DRM_IOCTL_DEF(DRM_IOCTL_AGP_ACQUIRE, drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 617 DRM_IOCTL_DEF(DRM_IOCTL_AGP_ACQUIRE, drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
@@ -617,8 +624,8 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
617 DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND, drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 624 DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND, drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
618#endif 625#endif
619 626
620 DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_legacy_sg_alloc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 627 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_legacy_sg_alloc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
621 DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_legacy_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), 628 DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_legacy_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
622 629
623 DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank_ioctl, DRM_UNLOCKED), 630 DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank_ioctl, DRM_UNLOCKED),
624 631
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 9bd8908d5fd8..02f38cc9f468 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -213,6 +213,7 @@ int drm_irq_uninstall(struct drm_device *dev)
213} 213}
214EXPORT_SYMBOL(drm_irq_uninstall); 214EXPORT_SYMBOL(drm_irq_uninstall);
215 215
216#if IS_ENABLED(CONFIG_DRM_LEGACY)
216int drm_legacy_irq_control(struct drm_device *dev, void *data, 217int drm_legacy_irq_control(struct drm_device *dev, void *data,
217 struct drm_file *file_priv) 218 struct drm_file *file_priv)
218{ 219{
@@ -253,3 +254,4 @@ int drm_legacy_irq_control(struct drm_device *dev, void *data,
253 return -EINVAL; 254 return -EINVAL;
254 } 255 }
255} 256}
257#endif
diff --git a/drivers/gpu/drm/drm_legacy.h b/drivers/gpu/drm/drm_legacy.h
index d7189aa22a48..0400ed19190e 100644
--- a/drivers/gpu/drm/drm_legacy.h
+++ b/drivers/gpu/drm/drm_legacy.h
@@ -42,11 +42,19 @@ struct drm_file;
42#define DRM_KERNEL_CONTEXT 0 42#define DRM_KERNEL_CONTEXT 0
43#define DRM_RESERVED_CONTEXTS 1 43#define DRM_RESERVED_CONTEXTS 1
44 44
45#if IS_ENABLED(CONFIG_DRM_LEGACY)
45void drm_legacy_ctxbitmap_init(struct drm_device *dev); 46void drm_legacy_ctxbitmap_init(struct drm_device *dev);
46void drm_legacy_ctxbitmap_cleanup(struct drm_device *dev); 47void drm_legacy_ctxbitmap_cleanup(struct drm_device *dev);
47void drm_legacy_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
48void drm_legacy_ctxbitmap_flush(struct drm_device *dev, struct drm_file *file); 48void drm_legacy_ctxbitmap_flush(struct drm_device *dev, struct drm_file *file);
49#else
50static inline void drm_legacy_ctxbitmap_init(struct drm_device *dev) {}
51static inline void drm_legacy_ctxbitmap_cleanup(struct drm_device *dev) {}
52static inline void drm_legacy_ctxbitmap_flush(struct drm_device *dev, struct drm_file *file) {}
53#endif
49 54
55void drm_legacy_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
56
57#if IS_ENABLED(CONFIG_DRM_LEGACY)
50int drm_legacy_resctx(struct drm_device *d, void *v, struct drm_file *f); 58int drm_legacy_resctx(struct drm_device *d, void *v, struct drm_file *f);
51int drm_legacy_addctx(struct drm_device *d, void *v, struct drm_file *f); 59int drm_legacy_addctx(struct drm_device *d, void *v, struct drm_file *f);
52int drm_legacy_getctx(struct drm_device *d, void *v, struct drm_file *f); 60int drm_legacy_getctx(struct drm_device *d, void *v, struct drm_file *f);
@@ -56,6 +64,7 @@ int drm_legacy_rmctx(struct drm_device *d, void *v, struct drm_file *f);
56 64
57int drm_legacy_setsareactx(struct drm_device *d, void *v, struct drm_file *f); 65int drm_legacy_setsareactx(struct drm_device *d, void *v, struct drm_file *f);
58int drm_legacy_getsareactx(struct drm_device *d, void *v, struct drm_file *f); 66int drm_legacy_getsareactx(struct drm_device *d, void *v, struct drm_file *f);
67#endif
59 68
60/* 69/*
61 * Generic Buffer Management 70 * Generic Buffer Management
@@ -73,16 +82,20 @@ static inline void drm_legacy_remove_map_hash(struct drm_device *dev)
73 drm_ht_remove(&dev->map_hash); 82 drm_ht_remove(&dev->map_hash);
74} 83}
75 84
85
86#if IS_ENABLED(CONFIG_DRM_LEGACY)
76int drm_legacy_getmap_ioctl(struct drm_device *dev, void *data, 87int drm_legacy_getmap_ioctl(struct drm_device *dev, void *data,
77 struct drm_file *file_priv); 88 struct drm_file *file_priv);
78int drm_legacy_addmap_ioctl(struct drm_device *d, void *v, struct drm_file *f); 89int drm_legacy_addmap_ioctl(struct drm_device *d, void *v, struct drm_file *f);
79int drm_legacy_rmmap_ioctl(struct drm_device *d, void *v, struct drm_file *f); 90int drm_legacy_rmmap_ioctl(struct drm_device *d, void *v, struct drm_file *f);
91
80int drm_legacy_addbufs(struct drm_device *d, void *v, struct drm_file *f); 92int drm_legacy_addbufs(struct drm_device *d, void *v, struct drm_file *f);
81int drm_legacy_infobufs(struct drm_device *d, void *v, struct drm_file *f); 93int drm_legacy_infobufs(struct drm_device *d, void *v, struct drm_file *f);
82int drm_legacy_markbufs(struct drm_device *d, void *v, struct drm_file *f); 94int drm_legacy_markbufs(struct drm_device *d, void *v, struct drm_file *f);
83int drm_legacy_freebufs(struct drm_device *d, void *v, struct drm_file *f); 95int drm_legacy_freebufs(struct drm_device *d, void *v, struct drm_file *f);
84int drm_legacy_mapbufs(struct drm_device *d, void *v, struct drm_file *f); 96int drm_legacy_mapbufs(struct drm_device *d, void *v, struct drm_file *f);
85int drm_legacy_dma_ioctl(struct drm_device *d, void *v, struct drm_file *f); 97int drm_legacy_dma_ioctl(struct drm_device *d, void *v, struct drm_file *f);
98#endif
86 99
87int __drm_legacy_infobufs(struct drm_device *, void *, int *, 100int __drm_legacy_infobufs(struct drm_device *, void *, int *,
88 int (*)(void *, int, struct drm_buf_entry *)); 101 int (*)(void *, int, struct drm_buf_entry *));
@@ -91,11 +104,17 @@ int __drm_legacy_mapbufs(struct drm_device *, void *, int *,
91 int (*)(void *, int, unsigned long, struct drm_buf *), 104 int (*)(void *, int, unsigned long, struct drm_buf *),
92 struct drm_file *); 105 struct drm_file *);
93 106
107#if IS_ENABLED(CONFIG_DRM_LEGACY)
94void drm_legacy_master_rmmaps(struct drm_device *dev, 108void drm_legacy_master_rmmaps(struct drm_device *dev,
95 struct drm_master *master); 109 struct drm_master *master);
96void drm_legacy_rmmaps(struct drm_device *dev); 110void drm_legacy_rmmaps(struct drm_device *dev);
111#else
112static inline void drm_legacy_master_rmmaps(struct drm_device *dev,
113 struct drm_master *master) {}
114static inline void drm_legacy_rmmaps(struct drm_device *dev) {}
115#endif
97 116
98#ifdef CONFIG_DRM_VM 117#if IS_ENABLED(CONFIG_DRM_VM) && IS_ENABLED(CONFIG_DRM_LEGACY)
99void drm_legacy_vma_flush(struct drm_device *d); 118void drm_legacy_vma_flush(struct drm_device *d);
100#else 119#else
101static inline void drm_legacy_vma_flush(struct drm_device *d) 120static inline void drm_legacy_vma_flush(struct drm_device *d)
@@ -117,28 +136,58 @@ struct drm_agp_mem {
117}; 136};
118 137
119/* drm_lock.c */ 138/* drm_lock.c */
139#if IS_ENABLED(CONFIG_DRM_LEGACY)
120int drm_legacy_lock(struct drm_device *d, void *v, struct drm_file *f); 140int drm_legacy_lock(struct drm_device *d, void *v, struct drm_file *f);
121int drm_legacy_unlock(struct drm_device *d, void *v, struct drm_file *f); 141int drm_legacy_unlock(struct drm_device *d, void *v, struct drm_file *f);
122void drm_legacy_lock_release(struct drm_device *dev, struct file *filp); 142void drm_legacy_lock_release(struct drm_device *dev, struct file *filp);
143#else
144static inline void drm_legacy_lock_release(struct drm_device *dev, struct file *filp) {}
145#endif
123 146
124/* DMA support */ 147/* DMA support */
148#if IS_ENABLED(CONFIG_DRM_LEGACY)
125int drm_legacy_dma_setup(struct drm_device *dev); 149int drm_legacy_dma_setup(struct drm_device *dev);
126void drm_legacy_dma_takedown(struct drm_device *dev); 150void drm_legacy_dma_takedown(struct drm_device *dev);
151#else
152static inline int drm_legacy_dma_setup(struct drm_device *dev)
153{
154 return 0;
155}
156#endif
157
127void drm_legacy_free_buffer(struct drm_device *dev, 158void drm_legacy_free_buffer(struct drm_device *dev,
128 struct drm_buf * buf); 159 struct drm_buf * buf);
160#if IS_ENABLED(CONFIG_DRM_LEGACY)
129void drm_legacy_reclaim_buffers(struct drm_device *dev, 161void drm_legacy_reclaim_buffers(struct drm_device *dev,
130 struct drm_file *filp); 162 struct drm_file *filp);
163#else
164static inline void drm_legacy_reclaim_buffers(struct drm_device *dev,
165 struct drm_file *filp) {}
166#endif
131 167
132/* Scatter Gather Support */ 168/* Scatter Gather Support */
169#if IS_ENABLED(CONFIG_DRM_LEGACY)
133void drm_legacy_sg_cleanup(struct drm_device *dev); 170void drm_legacy_sg_cleanup(struct drm_device *dev);
134int drm_legacy_sg_alloc(struct drm_device *dev, void *data, 171int drm_legacy_sg_alloc(struct drm_device *dev, void *data,
135 struct drm_file *file_priv); 172 struct drm_file *file_priv);
136int drm_legacy_sg_free(struct drm_device *dev, void *data, 173int drm_legacy_sg_free(struct drm_device *dev, void *data,
137 struct drm_file *file_priv); 174 struct drm_file *file_priv);
175#endif
138 176
177#if IS_ENABLED(CONFIG_DRM_LEGACY)
139void drm_legacy_init_members(struct drm_device *dev); 178void drm_legacy_init_members(struct drm_device *dev);
140void drm_legacy_destroy_members(struct drm_device *dev); 179void drm_legacy_destroy_members(struct drm_device *dev);
141void drm_legacy_dev_reinit(struct drm_device *dev); 180void drm_legacy_dev_reinit(struct drm_device *dev);
181#else
182static inline void drm_legacy_init_members(struct drm_device *dev) {}
183static inline void drm_legacy_destroy_members(struct drm_device *dev) {}
184static inline void drm_legacy_dev_reinit(struct drm_device *dev) {}
185#endif
142 186
187#if IS_ENABLED(CONFIG_DRM_LEGACY)
143void drm_legacy_lock_master_cleanup(struct drm_device *dev, struct drm_master *master); 188void drm_legacy_lock_master_cleanup(struct drm_device *dev, struct drm_master *master);
189#else
190static inline void drm_legacy_lock_master_cleanup(struct drm_device *dev, struct drm_master *master) {}
191#endif
192
144#endif /* __DRM_LEGACY_H__ */ 193#endif /* __DRM_LEGACY_H__ */
diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c
index 8987501f53b2..10cf83d569e1 100644
--- a/drivers/gpu/drm/drm_vm.c
+++ b/drivers/gpu/drm/drm_vm.c
@@ -646,6 +646,7 @@ int drm_legacy_mmap(struct file *filp, struct vm_area_struct *vma)
646} 646}
647EXPORT_SYMBOL(drm_legacy_mmap); 647EXPORT_SYMBOL(drm_legacy_mmap);
648 648
649#if IS_ENABLED(CONFIG_DRM_LEGACY)
649void drm_legacy_vma_flush(struct drm_device *dev) 650void drm_legacy_vma_flush(struct drm_device *dev)
650{ 651{
651 struct drm_vma_entry *vma, *vma_temp; 652 struct drm_vma_entry *vma, *vma_temp;
@@ -656,3 +657,4 @@ void drm_legacy_vma_flush(struct drm_device *dev)
656 kfree(vma); 657 kfree(vma);
657 } 658 }
658} 659}
660#endif
diff --git a/drivers/gpu/drm/nouveau/Kconfig b/drivers/gpu/drm/nouveau/Kconfig
index db28012dbf54..553c7da5e8e0 100644
--- a/drivers/gpu/drm/nouveau/Kconfig
+++ b/drivers/gpu/drm/nouveau/Kconfig
@@ -23,7 +23,7 @@ config DRM_NOUVEAU
23config NOUVEAU_LEGACY_CTX_SUPPORT 23config NOUVEAU_LEGACY_CTX_SUPPORT
24 bool "Nouveau legacy context support" 24 bool "Nouveau legacy context support"
25 depends on DRM_NOUVEAU 25 depends on DRM_NOUVEAU
26 select DRM_VM 26 select DRM_LEGACY
27 default y 27 default y
28 help 28 help
29 There was a version of the nouveau DDX that relied on legacy 29 There was a version of the nouveau DDX that relied on legacy