.. | .. |
---|
28 | 28 | * OTHER DEALINGS IN THE SOFTWARE. |
---|
29 | 29 | */ |
---|
30 | 30 | |
---|
31 | | -#include <drm/drm_ioctl.h> |
---|
32 | | -#include <drm/drmP.h> |
---|
33 | | -#include <drm/drm_auth.h> |
---|
34 | | -#include "drm_legacy.h" |
---|
35 | | -#include "drm_internal.h" |
---|
36 | | -#include "drm_crtc_internal.h" |
---|
37 | | - |
---|
38 | | -#include <linux/pci.h> |
---|
39 | 31 | #include <linux/export.h> |
---|
40 | 32 | #include <linux/nospec.h> |
---|
| 33 | +#include <linux/pci.h> |
---|
| 34 | +#include <linux/uaccess.h> |
---|
| 35 | + |
---|
| 36 | +#include <drm/drm_agpsupport.h> |
---|
| 37 | +#include <drm/drm_auth.h> |
---|
| 38 | +#include <drm/drm_crtc.h> |
---|
| 39 | +#include <drm/drm_drv.h> |
---|
| 40 | +#include <drm/drm_file.h> |
---|
| 41 | +#include <drm/drm_ioctl.h> |
---|
| 42 | +#include <drm/drm_print.h> |
---|
| 43 | + |
---|
| 44 | +#include "drm_crtc_internal.h" |
---|
| 45 | +#include "drm_internal.h" |
---|
| 46 | +#include "drm_legacy.h" |
---|
41 | 47 | |
---|
42 | 48 | /** |
---|
43 | 49 | * DOC: getunique and setversion story |
---|
.. | .. |
---|
246 | 252 | case DRM_CAP_SYNCOBJ: |
---|
247 | 253 | req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ); |
---|
248 | 254 | return 0; |
---|
| 255 | + case DRM_CAP_SYNCOBJ_TIMELINE: |
---|
| 256 | + req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE); |
---|
| 257 | + return 0; |
---|
249 | 258 | } |
---|
250 | 259 | |
---|
251 | 260 | /* Other caps only work with KMS drivers */ |
---|
252 | 261 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) |
---|
253 | | - return -ENOTSUPP; |
---|
| 262 | + return -EOPNOTSUPP; |
---|
254 | 263 | |
---|
255 | 264 | switch (req->capability) { |
---|
256 | 265 | case DRM_CAP_DUMB_BUFFER: |
---|
.. | .. |
---|
308 | 317 | { |
---|
309 | 318 | struct drm_set_client_cap *req = data; |
---|
310 | 319 | |
---|
| 320 | + /* No render-only settable capabilities for now */ |
---|
| 321 | + |
---|
| 322 | + /* Below caps that only works with KMS drivers */ |
---|
| 323 | + if (!drm_core_check_feature(dev, DRIVER_MODESET)) |
---|
| 324 | + return -EOPNOTSUPP; |
---|
| 325 | + |
---|
311 | 326 | switch (req->capability) { |
---|
312 | 327 | case DRM_CLIENT_CAP_STEREO_3D: |
---|
313 | 328 | if (req->value > 1) |
---|
.. | .. |
---|
319 | 334 | return -EINVAL; |
---|
320 | 335 | file_priv->universal_planes = req->value; |
---|
321 | 336 | break; |
---|
322 | | - case DRM_CLIENT_CAP_SHARE_PLANES: |
---|
323 | | - break; |
---|
324 | 337 | case DRM_CLIENT_CAP_ATOMIC: |
---|
325 | 338 | if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) |
---|
326 | | - return -EINVAL; |
---|
| 339 | + return -EOPNOTSUPP; |
---|
327 | 340 | /* The modesetting DDX has a totally broken idea of atomic. */ |
---|
328 | 341 | if (current->comm[0] == 'X' && req->value == 1) { |
---|
329 | 342 | pr_info("broken atomic modeset userspace detected, disabling atomic\n"); |
---|
.. | .. |
---|
460 | 473 | */ |
---|
461 | 474 | static int drm_copy_field(char __user *buf, size_t *buf_len, const char *value) |
---|
462 | 475 | { |
---|
463 | | - int len; |
---|
| 476 | + size_t len; |
---|
| 477 | + |
---|
| 478 | + /* don't attempt to copy a NULL pointer */ |
---|
| 479 | + if (WARN_ONCE(!value, "BUG: the value to copy was not set!")) { |
---|
| 480 | + *buf_len = 0; |
---|
| 481 | + return 0; |
---|
| 482 | + } |
---|
464 | 483 | |
---|
465 | 484 | /* don't overflow userbuf */ |
---|
466 | 485 | len = strlen(value); |
---|
.. | .. |
---|
557 | 576 | .name = #ioctl \ |
---|
558 | 577 | } |
---|
559 | 578 | |
---|
| 579 | +#if IS_ENABLED(CONFIG_DRM_LEGACY) |
---|
| 580 | +#define DRM_LEGACY_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF(ioctl, _func, _flags) |
---|
| 581 | +#else |
---|
| 582 | +#define DRM_LEGACY_IOCTL_DEF(ioctl, _func, _flags) DRM_IOCTL_DEF(ioctl, drm_invalid_op, _flags) |
---|
| 583 | +#endif |
---|
| 584 | + |
---|
560 | 585 | /* Ioctl table */ |
---|
561 | 586 | static const struct drm_ioctl_desc drm_ioctls[] = { |
---|
562 | | - DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, |
---|
563 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
564 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, DRM_UNLOCKED), |
---|
565 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, DRM_UNLOCKED), |
---|
| 587 | + DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, DRM_RENDER_ALLOW), |
---|
| 588 | + DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0), |
---|
| 589 | + DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0), |
---|
566 | 590 | DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY), |
---|
567 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_legacy_getmap_ioctl, DRM_UNLOCKED), |
---|
568 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, DRM_UNLOCKED), |
---|
569 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, DRM_UNLOCKED), |
---|
570 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
571 | | - DRM_IOCTL_DEF(DRM_IOCTL_SET_CLIENT_CAP, drm_setclientcap, DRM_UNLOCKED), |
---|
572 | | - DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_UNLOCKED | DRM_MASTER), |
---|
| 591 | + |
---|
| 592 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_legacy_getmap_ioctl, 0), |
---|
| 593 | + |
---|
| 594 | + DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, 0), |
---|
| 595 | + DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, 0), |
---|
| 596 | + DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, DRM_RENDER_ALLOW), |
---|
| 597 | + DRM_IOCTL_DEF(DRM_IOCTL_SET_CLIENT_CAP, drm_setclientcap, 0), |
---|
| 598 | + DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER), |
---|
573 | 599 | |
---|
574 | 600 | DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_invalid_op, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
575 | 601 | DRM_IOCTL_DEF(DRM_IOCTL_BLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
576 | 602 | DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
577 | | - DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_AUTH|DRM_UNLOCKED|DRM_MASTER), |
---|
| 603 | + DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_MASTER), |
---|
578 | 604 | |
---|
579 | | - DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_legacy_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
580 | | - DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_legacy_rmmap_ioctl, DRM_AUTH), |
---|
| 605 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_legacy_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 606 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_legacy_rmmap_ioctl, DRM_AUTH), |
---|
581 | 607 | |
---|
582 | | - DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_legacy_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
583 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_legacy_getsareactx, DRM_AUTH), |
---|
| 608 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_legacy_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 609 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_legacy_getsareactx, DRM_AUTH), |
---|
584 | 610 | |
---|
585 | | - DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, DRM_UNLOCKED|DRM_ROOT_ONLY), |
---|
586 | | - DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, DRM_UNLOCKED|DRM_ROOT_ONLY), |
---|
| 611 | + DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, 0), |
---|
| 612 | + DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, 0), |
---|
587 | 613 | |
---|
588 | | - DRM_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_legacy_addctx, DRM_AUTH|DRM_ROOT_ONLY), |
---|
589 | | - DRM_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_legacy_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
590 | | - DRM_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
591 | | - DRM_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_legacy_getctx, DRM_AUTH), |
---|
592 | | - DRM_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_legacy_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
593 | | - DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_legacy_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
594 | | - DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_legacy_resctx, DRM_AUTH), |
---|
| 614 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_legacy_addctx, DRM_AUTH|DRM_ROOT_ONLY), |
---|
| 615 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_legacy_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 616 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 617 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_legacy_getctx, DRM_AUTH), |
---|
| 618 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_legacy_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 619 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_legacy_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 620 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_legacy_resctx, DRM_AUTH), |
---|
595 | 621 | |
---|
596 | 622 | DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
597 | 623 | DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
598 | 624 | |
---|
599 | | - DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_legacy_lock, DRM_AUTH), |
---|
600 | | - DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_legacy_unlock, DRM_AUTH), |
---|
| 625 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_LOCK, drm_legacy_lock, DRM_AUTH), |
---|
| 626 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_legacy_unlock, DRM_AUTH), |
---|
601 | 627 | |
---|
602 | 628 | DRM_IOCTL_DEF(DRM_IOCTL_FINISH, drm_noop, DRM_AUTH), |
---|
603 | 629 | |
---|
604 | | - DRM_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_legacy_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
605 | | - DRM_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_legacy_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
606 | | - DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_legacy_infobufs, DRM_AUTH), |
---|
607 | | - DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_legacy_mapbufs, DRM_AUTH), |
---|
608 | | - DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_legacy_freebufs, DRM_AUTH), |
---|
609 | | - DRM_IOCTL_DEF(DRM_IOCTL_DMA, drm_legacy_dma_ioctl, DRM_AUTH), |
---|
610 | | - |
---|
611 | | - DRM_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_legacy_irq_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 630 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_legacy_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 631 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_legacy_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 632 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_legacy_infobufs, DRM_AUTH), |
---|
| 633 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_legacy_mapbufs, DRM_AUTH), |
---|
| 634 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_legacy_freebufs, DRM_AUTH), |
---|
| 635 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_DMA, drm_legacy_dma_ioctl, DRM_AUTH), |
---|
| 636 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_legacy_irq_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
612 | 637 | |
---|
613 | 638 | #if IS_ENABLED(CONFIG_AGP) |
---|
614 | 639 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_ACQUIRE, drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
.. | .. |
---|
621 | 646 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND, drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
622 | 647 | #endif |
---|
623 | 648 | |
---|
624 | | - DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_legacy_sg_alloc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
625 | | - DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_legacy_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 649 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_legacy_sg_alloc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
| 650 | + DRM_LEGACY_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_legacy_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
626 | 651 | |
---|
627 | 652 | DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank_ioctl, DRM_UNLOCKED), |
---|
628 | 653 | |
---|
.. | .. |
---|
630 | 655 | |
---|
631 | 656 | DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), |
---|
632 | 657 | |
---|
633 | | - DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
634 | | - DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH|DRM_UNLOCKED), |
---|
635 | | - DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH|DRM_UNLOCKED), |
---|
| 658 | + DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_RENDER_ALLOW), |
---|
| 659 | + DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH), |
---|
| 660 | + DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH), |
---|
636 | 661 | |
---|
637 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, DRM_UNLOCKED), |
---|
| 662 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, 0), |
---|
638 | 663 | |
---|
639 | | - DRM_IOCTL_DEF(DRM_IOCTL_PRIME_HANDLE_TO_FD, drm_prime_handle_to_fd_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
640 | | - DRM_IOCTL_DEF(DRM_IOCTL_PRIME_FD_TO_HANDLE, drm_prime_fd_to_handle_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
| 664 | + DRM_IOCTL_DEF(DRM_IOCTL_PRIME_HANDLE_TO_FD, drm_prime_handle_to_fd_ioctl, DRM_RENDER_ALLOW), |
---|
| 665 | + DRM_IOCTL_DEF(DRM_IOCTL_PRIME_FD_TO_HANDLE, drm_prime_fd_to_handle_ioctl, DRM_RENDER_ALLOW), |
---|
641 | 666 | |
---|
642 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANERESOURCES, drm_mode_getplane_res, DRM_UNLOCKED), |
---|
643 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, DRM_UNLOCKED), |
---|
644 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER|DRM_UNLOCKED), |
---|
645 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANE, drm_mode_getplane, DRM_UNLOCKED), |
---|
646 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPLANE, drm_mode_setplane, DRM_MASTER|DRM_UNLOCKED), |
---|
647 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR, drm_mode_cursor_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
648 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, DRM_UNLOCKED), |
---|
649 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
650 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder, DRM_UNLOCKED), |
---|
651 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector, DRM_UNLOCKED), |
---|
652 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_noop, DRM_MASTER|DRM_UNLOCKED), |
---|
653 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_noop, DRM_MASTER|DRM_UNLOCKED), |
---|
654 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl, DRM_UNLOCKED), |
---|
655 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY, drm_connector_property_set_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
656 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, DRM_UNLOCKED), |
---|
657 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_UNLOCKED), |
---|
658 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb_ioctl, DRM_UNLOCKED), |
---|
659 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB2, drm_mode_addfb2, DRM_UNLOCKED), |
---|
660 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb_ioctl, DRM_UNLOCKED), |
---|
661 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
662 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
663 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
664 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
665 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
666 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, DRM_UNLOCKED), |
---|
667 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
668 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
669 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATOMIC, drm_mode_atomic_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
670 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATEPROPBLOB, drm_mode_createblob_ioctl, DRM_UNLOCKED), |
---|
671 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROYPROPBLOB, drm_mode_destroyblob_ioctl, DRM_UNLOCKED), |
---|
| 667 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANERESOURCES, drm_mode_getplane_res, 0), |
---|
| 668 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, 0), |
---|
| 669 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER), |
---|
| 670 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANE, drm_mode_getplane, 0), |
---|
| 671 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPLANE, drm_mode_setplane, DRM_MASTER), |
---|
| 672 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR, drm_mode_cursor_ioctl, DRM_MASTER), |
---|
| 673 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, 0), |
---|
| 674 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl, DRM_MASTER), |
---|
| 675 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder, 0), |
---|
| 676 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector, 0), |
---|
| 677 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_noop, DRM_MASTER), |
---|
| 678 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_noop, DRM_MASTER), |
---|
| 679 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl, 0), |
---|
| 680 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY, drm_connector_property_set_ioctl, DRM_MASTER), |
---|
| 681 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, 0), |
---|
| 682 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, 0), |
---|
| 683 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB2, drm_mode_getfb2_ioctl, 0), |
---|
| 684 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb_ioctl, 0), |
---|
| 685 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB2, drm_mode_addfb2_ioctl, 0), |
---|
| 686 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb_ioctl, 0), |
---|
| 687 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER), |
---|
| 688 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER), |
---|
| 689 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_RENDER_ALLOW), |
---|
| 690 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_RENDER_ALLOW), |
---|
| 691 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_RENDER_ALLOW), |
---|
| 692 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, 0), |
---|
| 693 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER), |
---|
| 694 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER), |
---|
| 695 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATOMIC, drm_mode_atomic_ioctl, DRM_MASTER), |
---|
| 696 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATEPROPBLOB, drm_mode_createblob_ioctl, 0), |
---|
| 697 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROYPROPBLOB, drm_mode_destroyblob_ioctl, 0), |
---|
672 | 698 | |
---|
673 | 699 | DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_CREATE, drm_syncobj_create_ioctl, |
---|
674 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
| 700 | + DRM_RENDER_ALLOW), |
---|
675 | 701 | DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_DESTROY, drm_syncobj_destroy_ioctl, |
---|
676 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
| 702 | + DRM_RENDER_ALLOW), |
---|
677 | 703 | DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, drm_syncobj_handle_to_fd_ioctl, |
---|
678 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
| 704 | + DRM_RENDER_ALLOW), |
---|
679 | 705 | DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, drm_syncobj_fd_to_handle_ioctl, |
---|
680 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
| 706 | + DRM_RENDER_ALLOW), |
---|
| 707 | + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_TRANSFER, drm_syncobj_transfer_ioctl, |
---|
| 708 | + DRM_RENDER_ALLOW), |
---|
681 | 709 | DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_WAIT, drm_syncobj_wait_ioctl, |
---|
682 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
| 710 | + DRM_RENDER_ALLOW), |
---|
| 711 | + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT, drm_syncobj_timeline_wait_ioctl, |
---|
| 712 | + DRM_RENDER_ALLOW), |
---|
683 | 713 | DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_RESET, drm_syncobj_reset_ioctl, |
---|
684 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
| 714 | + DRM_RENDER_ALLOW), |
---|
685 | 715 | DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_SIGNAL, drm_syncobj_signal_ioctl, |
---|
686 | | - DRM_UNLOCKED|DRM_RENDER_ALLOW), |
---|
687 | | - DRM_IOCTL_DEF(DRM_IOCTL_CRTC_GET_SEQUENCE, drm_crtc_get_sequence_ioctl, DRM_UNLOCKED), |
---|
688 | | - DRM_IOCTL_DEF(DRM_IOCTL_CRTC_QUEUE_SEQUENCE, drm_crtc_queue_sequence_ioctl, DRM_UNLOCKED), |
---|
689 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_LEASE, drm_mode_create_lease_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
690 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_LIST_LESSEES, drm_mode_list_lessees_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
691 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GET_LEASE, drm_mode_get_lease_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
692 | | - DRM_IOCTL_DEF(DRM_IOCTL_MODE_REVOKE_LEASE, drm_mode_revoke_lease_ioctl, DRM_MASTER|DRM_UNLOCKED), |
---|
| 716 | + DRM_RENDER_ALLOW), |
---|
| 717 | + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL, drm_syncobj_timeline_signal_ioctl, |
---|
| 718 | + DRM_RENDER_ALLOW), |
---|
| 719 | + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_QUERY, drm_syncobj_query_ioctl, |
---|
| 720 | + DRM_RENDER_ALLOW), |
---|
| 721 | + DRM_IOCTL_DEF(DRM_IOCTL_CRTC_GET_SEQUENCE, drm_crtc_get_sequence_ioctl, 0), |
---|
| 722 | + DRM_IOCTL_DEF(DRM_IOCTL_CRTC_QUEUE_SEQUENCE, drm_crtc_queue_sequence_ioctl, 0), |
---|
| 723 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_LEASE, drm_mode_create_lease_ioctl, DRM_MASTER), |
---|
| 724 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_LIST_LESSEES, drm_mode_list_lessees_ioctl, DRM_MASTER), |
---|
| 725 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GET_LEASE, drm_mode_get_lease_ioctl, DRM_MASTER), |
---|
| 726 | + DRM_IOCTL_DEF(DRM_IOCTL_MODE_REVOKE_LEASE, drm_mode_revoke_lease_ioctl, DRM_MASTER), |
---|
693 | 727 | }; |
---|
694 | 728 | |
---|
695 | 729 | #define DRM_CORE_IOCTL_COUNT ARRAY_SIZE( drm_ioctls ) |
---|
.. | .. |
---|
716 | 750 | * }; |
---|
717 | 751 | * |
---|
718 | 752 | * Please make sure that you follow all the best practices from |
---|
719 | | - * ``Documentation/ioctl/botching-up-ioctls.txt``. Note that drm_ioctl() |
---|
| 753 | + * ``Documentation/process/botching-up-ioctls.rst``. Note that drm_ioctl() |
---|
720 | 754 | * automatically zero-extends structures, hence make sure you can add more stuff |
---|
721 | 755 | * at the end, i.e. don't put a variable sized array there. |
---|
722 | 756 | * |
---|
.. | .. |
---|
757 | 791 | return retcode; |
---|
758 | 792 | |
---|
759 | 793 | /* Enforce sane locking for modern driver ioctls. */ |
---|
760 | | - if (!drm_core_check_feature(dev, DRIVER_LEGACY) || |
---|
| 794 | + if (likely(!drm_core_check_feature(dev, DRIVER_LEGACY)) || |
---|
761 | 795 | (flags & DRM_UNLOCKED)) |
---|
762 | 796 | retcode = func(dev, kdata, file_priv); |
---|
763 | 797 | else { |
---|
.. | .. |
---|
830 | 864 | out_size = 0; |
---|
831 | 865 | ksize = max(max(in_size, out_size), drv_size); |
---|
832 | 866 | |
---|
833 | | - DRM_DEBUG("pid=%d, dev=0x%lx, auth=%d, %s\n", |
---|
834 | | - task_pid_nr(current), |
---|
| 867 | + DRM_DEBUG("comm=\"%s\" pid=%d, dev=0x%lx, auth=%d, %s\n", |
---|
| 868 | + current->comm, task_pid_nr(current), |
---|
835 | 869 | (long)old_encode_dev(file_priv->minor->kdev->devt), |
---|
836 | 870 | file_priv->authenticated, ioctl->name); |
---|
837 | 871 | |
---|
.. | .. |
---|
868 | 902 | |
---|
869 | 903 | err_i1: |
---|
870 | 904 | if (!ioctl) |
---|
871 | | - DRM_DEBUG("invalid ioctl: pid=%d, dev=0x%lx, auth=%d, cmd=0x%02x, nr=0x%02x\n", |
---|
872 | | - task_pid_nr(current), |
---|
| 905 | + DRM_DEBUG("invalid ioctl: comm=\"%s\", pid=%d, dev=0x%lx, auth=%d, cmd=0x%02x, nr=0x%02x\n", |
---|
| 906 | + current->comm, task_pid_nr(current), |
---|
873 | 907 | (long)old_encode_dev(file_priv->minor->kdev->devt), |
---|
874 | 908 | file_priv->authenticated, cmd, nr); |
---|
875 | 909 | |
---|
876 | 910 | if (kdata != stack_kdata) |
---|
877 | 911 | kfree(kdata); |
---|
878 | 912 | if (retcode) |
---|
879 | | - DRM_DEBUG("pid=%d, ret = %d\n", task_pid_nr(current), retcode); |
---|
| 913 | + DRM_DEBUG("comm=\"%s\", pid=%d, ret=%d\n", current->comm, |
---|
| 914 | + task_pid_nr(current), retcode); |
---|
880 | 915 | return retcode; |
---|
881 | 916 | } |
---|
882 | 917 | EXPORT_SYMBOL(drm_ioctl); |
---|