tree: https://chromium.googlesource.com/chromiumos/third_party/kernel chromeos-5.15 head: 642d76bcaf8d0918daf38d6bc51bd8d3366f423c commit: d0f54fc5d9c6aa63d0fcd0f5ce9614b578c36675 [35/61] FROMGIT: drm/msm: Small submit cleanup config: mips-randconfig-m031-20221004 compiler: mipsel-linux-gcc (GCC) 12.1.0
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <[email protected]> | Reported-by: Dan Carpenter <[email protected]> smatch warnings: drivers/gpu/drm/msm/msm_gem_submit.c:963 msm_ioctl_gem_submit() warn: variable dereferenced before check 'submit' (see line 784) vim +/submit +963 drivers/gpu/drm/msm/msm_gem_submit.c 7198e6b03155f6 Rob Clark 2013-07-19 723 int msm_ioctl_gem_submit(struct drm_device *dev, void *data, 7198e6b03155f6 Rob Clark 2013-07-19 724 struct drm_file *file) 7198e6b03155f6 Rob Clark 2013-07-19 725 { 7198e6b03155f6 Rob Clark 2013-07-19 726 struct msm_drm_private *priv = dev->dev_private; 7198e6b03155f6 Rob Clark 2013-07-19 727 struct drm_msm_gem_submit *args = data; 7198e6b03155f6 Rob Clark 2013-07-19 728 struct msm_file_private *ctx = file->driver_priv; e3e24ee51ed2c4 Rob Clark 2021-07-27 729 struct msm_gem_submit *submit = NULL; No need for this initializer. Plus submit is normally error pointer or valid so it's potentially confusing. c01a958eca6e7f Rob Clark 2016-02-03 730 struct msm_gpu *gpu = priv->gpu; f7de15450e906e Jordan Crouse 2017-10-20 731 struct msm_gpu_submitqueue *queue; f97decac5f4c2d Jordan Crouse 2017-10-20 732 struct msm_ringbuffer *ring; ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 733 struct msm_submit_post_dep *post_deps = NULL; ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 734 struct drm_syncobj **syncobjs_to_reset = NULL; 4cd0945901a6dd Rob Clark 2016-06-16 735 int out_fence_fd = -1; 92ec0767710797 Daniel Vetter 2019-11-20 736 bool has_ww_ticket = false; 7198e6b03155f6 Rob Clark 2013-07-19 737 unsigned i; d0f54fc5d9c6aa Rob Clark 2022-08-02 738 int ret; 375f9a63a66bae Rob Clark 2021-07-27 739 c01a958eca6e7f Rob Clark 2016-02-03 740 if (!gpu) c01a958eca6e7f Rob Clark 2016-02-03 741 return -ENXIO; c01a958eca6e7f Rob Clark 2016-02-03 742 ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 743 if (args->pad) ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 744 return -EINVAL; ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 745 923e59a26bbe58 Rob Clark 2022-05-02 746 if (unlikely(!ctx->aspace) && !capable(CAP_SYS_RAWIO)) { 923e59a26bbe58 Rob Clark 2022-05-02 747 DRM_ERROR_RATELIMITED("IOMMU support or CAP_SYS_RAWIO required!\n"); 923e59a26bbe58 Rob Clark 2022-05-02 748 return -EPERM; 923e59a26bbe58 Rob Clark 2022-05-02 749 } 923e59a26bbe58 Rob Clark 2022-05-02 750 7198e6b03155f6 Rob Clark 2013-07-19 751 /* for now, we just have 3d pipe.. eventually this would need to 7198e6b03155f6 Rob Clark 2013-07-19 752 * be more clever to dispatch to appropriate gpu module: 7198e6b03155f6 Rob Clark 2013-07-19 753 */ d9c181e22a0599 Rob Clark 2016-04-23 754 if (MSM_PIPE_ID(args->flags) != MSM_PIPE_3D0) d9c181e22a0599 Rob Clark 2016-04-23 755 return -EINVAL; d9c181e22a0599 Rob Clark 2016-04-23 756 d9c181e22a0599 Rob Clark 2016-04-23 757 if (MSM_PIPE_FLAGS(args->flags) & ~MSM_SUBMIT_FLAGS) 7198e6b03155f6 Rob Clark 2013-07-19 758 return -EINVAL; 7198e6b03155f6 Rob Clark 2013-07-19 759 6a8bd08d0465b2 Rob Clark 2017-12-13 760 if (args->flags & MSM_SUBMIT_SUDO) { 6a8bd08d0465b2 Rob Clark 2017-12-13 761 if (!IS_ENABLED(CONFIG_DRM_MSM_GPU_SUDO) || 6a8bd08d0465b2 Rob Clark 2017-12-13 762 !capable(CAP_SYS_RAWIO)) 6a8bd08d0465b2 Rob Clark 2017-12-13 763 return -EINVAL; 6a8bd08d0465b2 Rob Clark 2017-12-13 764 } 6a8bd08d0465b2 Rob Clark 2017-12-13 765 f7de15450e906e Jordan Crouse 2017-10-20 766 queue = msm_submitqueue_get(ctx, args->queueid); f7de15450e906e Jordan Crouse 2017-10-20 767 if (!queue) f7de15450e906e Jordan Crouse 2017-10-20 768 return -ENOENT; f7de15450e906e Jordan Crouse 2017-10-20 769 fc40e5e10c3bcc Rob Clark 2021-07-27 770 ring = gpu->rb[queue->ring_nr]; f97decac5f4c2d Jordan Crouse 2017-10-20 771 1d8a5ca436ee4a Rob Clark 2021-07-27 772 if (args->flags & MSM_SUBMIT_FENCE_FD_OUT) { 1d8a5ca436ee4a Rob Clark 2021-07-27 773 out_fence_fd = get_unused_fd_flags(O_CLOEXEC); 1d8a5ca436ee4a Rob Clark 2021-07-27 774 if (out_fence_fd < 0) { 1d8a5ca436ee4a Rob Clark 2021-07-27 775 ret = out_fence_fd; b96a36da805161 Rob Clark 2022-08-02 776 return ret; 1d8a5ca436ee4a Rob Clark 2021-07-27 777 } 1d8a5ca436ee4a Rob Clark 2021-07-27 778 } 1d8a5ca436ee4a Rob Clark 2021-07-27 779 b96a36da805161 Rob Clark 2022-08-02 780 submit = submit_create(dev, gpu, queue, args->nr_bos, args->nr_cmds); b96a36da805161 Rob Clark 2022-08-02 781 if (IS_ERR(submit)) b96a36da805161 Rob Clark 2022-08-02 782 return PTR_ERR(submit); b96a36da805161 Rob Clark 2022-08-02 783 d0f54fc5d9c6aa Rob Clark 2022-08-02 @784 trace_msm_gpu_submit(pid_nr(submit->pid), ring->id, submit->ident, d0f54fc5d9c6aa Rob Clark 2022-08-02 785 args->nr_bos, args->nr_cmds); d0f54fc5d9c6aa Rob Clark 2022-08-02 786 b96a36da805161 Rob Clark 2022-08-02 787 ret = mutex_lock_interruptible(&queue->lock); b96a36da805161 Rob Clark 2022-08-02 788 if (ret) b96a36da805161 Rob Clark 2022-08-02 789 goto out_post_unlock; 1d8a5ca436ee4a Rob Clark 2021-07-27 790 1d8a5ca436ee4a Rob Clark 2021-07-27 791 if (args->flags & MSM_SUBMIT_SUDO) 1d8a5ca436ee4a Rob Clark 2021-07-27 792 submit->in_rb = true; 1d8a5ca436ee4a Rob Clark 2021-07-27 793 48f243c95bdb17 Rob Clark 2017-02-25 794 if (args->flags & MSM_SUBMIT_FENCE_FD_IN) { 2189463dba3eac Robert Foss 2018-11-05 795 struct dma_fence *in_fence; 2189463dba3eac Robert Foss 2018-11-05 796 48f243c95bdb17 Rob Clark 2017-02-25 797 in_fence = sync_file_get_fence(args->fence_fd); 48f243c95bdb17 Rob Clark 2017-02-25 798 1d8a5ca436ee4a Rob Clark 2021-07-27 799 if (!in_fence) { 1d8a5ca436ee4a Rob Clark 2021-07-27 800 ret = -EINVAL; 1d8a5ca436ee4a Rob Clark 2021-07-27 801 goto out_unlock; 1d8a5ca436ee4a Rob Clark 2021-07-27 802 } 2189463dba3eac Robert Foss 2018-11-05 803 dbf874ccc405e4 Daniel Vetter 2021-08-05 804 ret = drm_sched_job_add_dependency(&submit->base, in_fence); 48f243c95bdb17 Rob Clark 2017-02-25 805 if (ret) 1d8a5ca436ee4a Rob Clark 2021-07-27 806 goto out_unlock; 48f243c95bdb17 Rob Clark 2017-02-25 807 } 48f243c95bdb17 Rob Clark 2017-02-25 808 ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 809 if (args->flags & MSM_SUBMIT_SYNCOBJ_IN) { 1d8a5ca436ee4a Rob Clark 2021-07-27 810 syncobjs_to_reset = msm_parse_deps(submit, file, ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 811 args->in_syncobjs, ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 812 args->nr_in_syncobjs, ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 813 args->syncobj_stride, ring); 1d8a5ca436ee4a Rob Clark 2021-07-27 814 if (IS_ERR(syncobjs_to_reset)) { 1d8a5ca436ee4a Rob Clark 2021-07-27 815 ret = PTR_ERR(syncobjs_to_reset); 1d8a5ca436ee4a Rob Clark 2021-07-27 816 goto out_unlock; 1d8a5ca436ee4a Rob Clark 2021-07-27 817 } ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 818 } ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 819 ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 820 if (args->flags & MSM_SUBMIT_SYNCOBJ_OUT) { ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 821 post_deps = msm_parse_post_deps(dev, file, ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 822 args->out_syncobjs, ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 823 args->nr_out_syncobjs, ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 824 args->syncobj_stride); ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 825 if (IS_ERR(post_deps)) { ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 826 ret = PTR_ERR(post_deps); 4cd0945901a6dd Rob Clark 2016-06-16 827 goto out_unlock; 4cd0945901a6dd Rob Clark 2016-06-16 828 } 4cd0945901a6dd Rob Clark 2016-06-16 829 } 4cd0945901a6dd Rob Clark 2016-06-16 830 7198e6b03155f6 Rob Clark 2013-07-19 831 ret = submit_lookup_objects(submit, args, file); 7198e6b03155f6 Rob Clark 2013-07-19 832 if (ret) 1d8a5ca436ee4a Rob Clark 2021-07-27 833 goto out; 7198e6b03155f6 Rob Clark 2013-07-19 834 20224d715a8822 Rob Clark 2020-10-23 835 ret = submit_lookup_cmds(submit, args, file); 20224d715a8822 Rob Clark 2020-10-23 836 if (ret) 1d8a5ca436ee4a Rob Clark 2021-07-27 837 goto out; 20224d715a8822 Rob Clark 2020-10-23 838 92ec0767710797 Daniel Vetter 2019-11-20 839 /* copy_*_user while holding a ww ticket upsets lockdep */ 92ec0767710797 Daniel Vetter 2019-11-20 840 ww_acquire_init(&submit->ticket, &reservation_ww_class); 92ec0767710797 Daniel Vetter 2019-11-20 841 has_ww_ticket = true; 340faef2418989 Rob Clark 2016-03-14 842 ret = submit_lock_objects(submit); 340faef2418989 Rob Clark 2016-03-14 843 if (ret) 340faef2418989 Rob Clark 2016-03-14 844 goto out; 340faef2418989 Rob Clark 2016-03-14 845 ad5149c4f65f7c Rob Clark 2017-09-12 846 ret = submit_fence_sync(submit, !!(args->flags & MSM_SUBMIT_NO_IMPLICIT)); b6295f9a38fc3f Rob Clark 2016-03-15 847 if (ret) b6295f9a38fc3f Rob Clark 2016-03-15 848 goto out; b6295f9a38fc3f Rob Clark 2016-03-15 849 340faef2418989 Rob Clark 2016-03-14 850 ret = submit_pin_objects(submit); 7198e6b03155f6 Rob Clark 2013-07-19 851 if (ret) 7198e6b03155f6 Rob Clark 2013-07-19 852 goto out; 7198e6b03155f6 Rob Clark 2013-07-19 853 7198e6b03155f6 Rob Clark 2013-07-19 854 for (i = 0; i < args->nr_cmds; i++) { 7198e6b03155f6 Rob Clark 2013-07-19 855 struct msm_gem_object *msm_obj; 78babc1633c4b0 Rob Clark 2016-11-11 856 uint64_t iova; 7198e6b03155f6 Rob Clark 2013-07-19 857 20224d715a8822 Rob Clark 2020-10-23 858 ret = submit_bo(submit, submit->cmd[i].idx, 7198e6b03155f6 Rob Clark 2013-07-19 859 &msm_obj, &iova, NULL); 7198e6b03155f6 Rob Clark 2013-07-19 860 if (ret) 7198e6b03155f6 Rob Clark 2013-07-19 861 goto out; 7198e6b03155f6 Rob Clark 2013-07-19 862 20224d715a8822 Rob Clark 2020-10-23 863 if (!submit->cmd[i].size || 20224d715a8822 Rob Clark 2020-10-23 864 ((submit->cmd[i].size + submit->cmd[i].offset) > 20224d715a8822 Rob Clark 2020-10-23 865 msm_obj->base.size / 4)) { 20224d715a8822 Rob Clark 2020-10-23 866 DRM_ERROR("invalid cmdstream size: %u\n", submit->cmd[i].size * 4); 7198e6b03155f6 Rob Clark 2013-07-19 867 ret = -EINVAL; 7198e6b03155f6 Rob Clark 2013-07-19 868 goto out; 7198e6b03155f6 Rob Clark 2013-07-19 869 } 7198e6b03155f6 Rob Clark 2013-07-19 870 20224d715a8822 Rob Clark 2020-10-23 871 submit->cmd[i].iova = iova + (submit->cmd[i].offset * 4); 7198e6b03155f6 Rob Clark 2013-07-19 872 7198e6b03155f6 Rob Clark 2013-07-19 873 if (submit->valid) 7198e6b03155f6 Rob Clark 2013-07-19 874 continue; 7198e6b03155f6 Rob Clark 2013-07-19 875 20224d715a8822 Rob Clark 2020-10-23 876 ret = submit_reloc(submit, msm_obj, submit->cmd[i].offset * 4, 20224d715a8822 Rob Clark 2020-10-23 877 submit->cmd[i].nr_relocs, submit->cmd[i].relocs); 7198e6b03155f6 Rob Clark 2013-07-19 878 if (ret) 7198e6b03155f6 Rob Clark 2013-07-19 879 goto out; 7198e6b03155f6 Rob Clark 2013-07-19 880 } 7198e6b03155f6 Rob Clark 2013-07-19 881 7198e6b03155f6 Rob Clark 2013-07-19 882 submit->nr_cmds = i; 7198e6b03155f6 Rob Clark 2013-07-19 883 2b992c60523d6d Rob Clark 2022-02-24 884 /* 2b992c60523d6d Rob Clark 2022-02-24 885 * If using userspace provided seqno fence, validate that the id 2b992c60523d6d Rob Clark 2022-02-24 886 * is available before arming sched job. Since access to fence_idr 2b992c60523d6d Rob Clark 2022-02-24 887 * is serialized on the queue lock, the slot should be still avail 2b992c60523d6d Rob Clark 2022-02-24 888 * after the job is armed 2b992c60523d6d Rob Clark 2022-02-24 889 */ 2b992c60523d6d Rob Clark 2022-02-24 890 if ((args->flags & MSM_SUBMIT_FENCE_SN_IN) && 2b992c60523d6d Rob Clark 2022-02-24 891 idr_find(&queue->fence_idr, args->fence)) { 2b992c60523d6d Rob Clark 2022-02-24 892 ret = -EINVAL; 2b992c60523d6d Rob Clark 2022-02-24 893 goto out; 2b992c60523d6d Rob Clark 2022-02-24 894 } 2b992c60523d6d Rob Clark 2022-02-24 895 b2ee9cf52393a0 Daniel Vetter 2021-08-26 896 drm_sched_job_arm(&submit->base); b2ee9cf52393a0 Daniel Vetter 2021-08-26 897 1d8a5ca436ee4a Rob Clark 2021-07-27 898 submit->user_fence = dma_fence_get(&submit->base.s_fence->finished); f44d32c79fd591 Rob Clark 2016-06-16 899 2b992c60523d6d Rob Clark 2022-02-24 900 if (args->flags & MSM_SUBMIT_FENCE_SN_IN) { a61acbbe9cf873 Rob Clark 2021-07-27 901 /* 2b992c60523d6d Rob Clark 2022-02-24 902 * Userspace has assigned the seqno fence that it wants 2b992c60523d6d Rob Clark 2022-02-24 903 * us to use. It is an error to pick a fence sequence 2b992c60523d6d Rob Clark 2022-02-24 904 * number that is not available. 2b992c60523d6d Rob Clark 2022-02-24 905 */ 2b992c60523d6d Rob Clark 2022-02-24 906 submit->fence_id = args->fence; 2b992c60523d6d Rob Clark 2022-02-24 907 ret = idr_alloc_u32(&queue->fence_idr, submit->user_fence, 2b992c60523d6d Rob Clark 2022-02-24 908 &submit->fence_id, submit->fence_id, 2b992c60523d6d Rob Clark 2022-02-24 909 GFP_KERNEL); 2b992c60523d6d Rob Clark 2022-02-24 910 /* 2b992c60523d6d Rob Clark 2022-02-24 911 * We've already validated that the fence_id slot is valid, 2b992c60523d6d Rob Clark 2022-02-24 912 * so if idr_alloc_u32 failed, it is a kernel bug 2b992c60523d6d Rob Clark 2022-02-24 913 */ 2b992c60523d6d Rob Clark 2022-02-24 914 WARN_ON(ret); 2b992c60523d6d Rob Clark 2022-02-24 915 } else { 2b992c60523d6d Rob Clark 2022-02-24 916 /* 2b992c60523d6d Rob Clark 2022-02-24 917 * Allocate an id which can be used by WAIT_FENCE ioctl to map 2b992c60523d6d Rob Clark 2022-02-24 918 * back to the underlying fence. a61acbbe9cf873 Rob Clark 2021-07-27 919 */ a61acbbe9cf873 Rob Clark 2021-07-27 920 submit->fence_id = idr_alloc_cyclic(&queue->fence_idr, 2b992c60523d6d Rob Clark 2022-02-24 921 submit->user_fence, 1, 2b992c60523d6d Rob Clark 2022-02-24 922 INT_MAX, GFP_KERNEL); 2b992c60523d6d Rob Clark 2022-02-24 923 } a61acbbe9cf873 Rob Clark 2021-07-27 924 if (submit->fence_id < 0) { 68aa6f13dc43fc Rob Clark 2022-06-24 925 ret = submit->fence_id; a61acbbe9cf873 Rob Clark 2021-07-27 926 submit->fence_id = 0; f44d32c79fd591 Rob Clark 2016-06-16 927 } f44d32c79fd591 Rob Clark 2016-06-16 928 b2ee9cf52393a0 Daniel Vetter 2021-08-26 929 if (ret == 0 && args->flags & MSM_SUBMIT_FENCE_FD_OUT) { 1d8a5ca436ee4a Rob Clark 2021-07-27 930 struct sync_file *sync_file = sync_file_create(submit->user_fence); 4cd0945901a6dd Rob Clark 2016-06-16 931 if (!sync_file) { 4cd0945901a6dd Rob Clark 2016-06-16 932 ret = -ENOMEM; b2ee9cf52393a0 Daniel Vetter 2021-08-26 933 } else { 7039d3f89b2f3f Rob Clark 2021-07-27 934 fd_install(out_fence_fd, sync_file->file); 7039d3f89b2f3f Rob Clark 2021-07-27 935 args->fence_fd = out_fence_fd; 4cd0945901a6dd Rob Clark 2016-06-16 936 } b2ee9cf52393a0 Daniel Vetter 2021-08-26 937 } 4cd0945901a6dd Rob Clark 2016-06-16 938 be40596bb5cf20 Rob Clark 2021-07-27 939 submit_attach_object_fences(submit); 7198e6b03155f6 Rob Clark 2013-07-19 940 1d8a5ca436ee4a Rob Clark 2021-07-27 941 /* The scheduler owns a ref now: */ 1d8a5ca436ee4a Rob Clark 2021-07-27 942 msm_gem_submit_get(submit); 7198e6b03155f6 Rob Clark 2013-07-19 943 ede0df9a69c327 Daniel Vetter 2021-08-05 944 drm_sched_entity_push_job(&submit->base); 7198e6b03155f6 Rob Clark 2013-07-19 945 a61acbbe9cf873 Rob Clark 2021-07-27 946 args->fence = submit->fence_id; 805c90e0e91975 Rob Clark 2021-11-11 947 queue->last_fence = submit->fence_id; 4cd0945901a6dd Rob Clark 2016-06-16 948 ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 949 msm_reset_syncobjs(syncobjs_to_reset, args->nr_in_syncobjs); ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 950 msm_process_post_deps(post_deps, args->nr_out_syncobjs, 1d8a5ca436ee4a Rob Clark 2021-07-27 951 submit->user_fence); ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 952 ab723b7a992a19 Bas Nieuwenhuizen 2020-01-24 953 7198e6b03155f6 Rob Clark 2013-07-19 954 out: be40596bb5cf20 Rob Clark 2021-07-27 955 submit_cleanup(submit, !!ret); 92ec0767710797 Daniel Vetter 2019-11-20 956 if (has_ww_ticket) 92ec0767710797 Daniel Vetter 2019-11-20 957 ww_acquire_fini(&submit->ticket); b5b4c264df4d27 Rob Clark 2016-05-17 958 out_unlock: 4cd0945901a6dd Rob Clark 2016-06-16 959 if (ret && (out_fence_fd >= 0)) 4cd0945901a6dd Rob Clark 2016-06-16 960 put_unused_fd(out_fence_fd); e3e24ee51ed2c4 Rob Clark 2021-07-27 961 mutex_unlock(&queue->lock); b96a36da805161 Rob Clark 2022-08-02 962 out_post_unlock: e3e24ee51ed2c4 Rob Clark 2021-07-27 @963 if (submit) ^^^^^^ No need for this check. regards, dan carpenter _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
