Hi Chris, Thank you for the patch! Yet something to improve:
[auto build test ERROR on drm-intel/for-linux-next] [also build test ERROR on v4.16-rc7 next-20180329] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chris-Wilson/drm-i915-selftests-Avoid-repeatedly-harming-the-same-innocent-context/20180401-022503 base: git://anongit.freedesktop.org/drm-intel for-linux-next config: i386-randconfig-b0-04010137 (attached as .config) compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): In file included from drivers/gpu/drm/i915/intel_hangcheck.c:465:0: drivers/gpu/drm/i915/selftests/intel_hangcheck.c: In function 'igt_reset_queue': >> drivers/gpu/drm/i915/selftests/intel_hangcheck.c:988:5: error: implicit >> declaration of function 'GEM_TRACE_DUMP' >> [-Werror=implicit-function-declaration] GEM_TRACE_DUMP(); ^ cc1: all warnings being treated as errors vim +/GEM_TRACE_DUMP +988 drivers/gpu/drm/i915/selftests/intel_hangcheck.c 922 923 static int igt_reset_queue(void *arg) 924 { 925 struct drm_i915_private *i915 = arg; 926 struct intel_engine_cs *engine; 927 enum intel_engine_id id; 928 struct hang h; 929 int err; 930 931 /* Check that we replay pending requests following a hang */ 932 933 global_reset_lock(i915); 934 935 mutex_lock(&i915->drm.struct_mutex); 936 err = hang_init(&h, i915); 937 if (err) 938 goto unlock; 939 940 for_each_engine(engine, i915, id) { 941 struct i915_request *prev; 942 IGT_TIMEOUT(end_time); 943 unsigned int count; 944 945 if (!intel_engine_can_store_dword(engine)) 946 continue; 947 948 prev = hang_create_request(&h, engine); 949 if (IS_ERR(prev)) { 950 err = PTR_ERR(prev); 951 goto fini; 952 } 953 954 i915_request_get(prev); 955 __i915_request_add(prev, true); 956 957 count = 0; 958 do { 959 struct i915_request *rq; 960 unsigned int reset_count; 961 962 rq = hang_create_request(&h, engine); 963 if (IS_ERR(rq)) { 964 err = PTR_ERR(rq); 965 goto fini; 966 } 967 968 i915_request_get(rq); 969 __i915_request_add(rq, true); 970 971 /* 972 * XXX We don't handle resetting the kernel context 973 * very well. If we trigger a device reset twice in 974 * quick succession while the kernel context is 975 * executing, we may end up skipping the breadcrumb. 976 * This is really only a problem for the selftest as 977 * normally there is a large interlude between resets 978 * (hangcheck), or we focus on resetting just one 979 * engine and so avoid repeatedly resetting innocents. 980 */ 981 err = wait_for_others(i915, engine); 982 if (err) { 983 pr_err("%s(%s): Failed to idle other inactive engines after device reset\n", 984 __func__, engine->name); 985 i915_request_put(rq); 986 i915_request_put(prev); 987 > 988 GEM_TRACE_DUMP(); 989 i915_gem_set_wedged(i915); 990 goto fini; 991 } 992 993 if (!wait_for_hang(&h, prev)) { 994 struct drm_printer p = drm_info_printer(i915->drm.dev); 995 996 pr_err("%s(%s): Failed to start request %x, at %x\n", 997 __func__, engine->name, 998 prev->fence.seqno, hws_seqno(&h, prev)); 999 intel_engine_dump(engine, &p, 1000 "%s\n", engine->name); 1001 1002 i915_request_put(rq); 1003 i915_request_put(prev); 1004 1005 i915_reset(i915, 0); 1006 i915_gem_set_wedged(i915); 1007 1008 err = -EIO; 1009 goto fini; 1010 } 1011 1012 reset_count = fake_hangcheck(prev); 1013 1014 i915_reset(i915, I915_RESET_QUIET); 1015 1016 GEM_BUG_ON(test_bit(I915_RESET_HANDOFF, 1017 &i915->gpu_error.flags)); 1018 1019 if (prev->fence.error != -EIO) { 1020 pr_err("GPU reset not recorded on hanging request [fence.error=%d]!\n", 1021 prev->fence.error); 1022 i915_request_put(rq); 1023 i915_request_put(prev); 1024 err = -EINVAL; 1025 goto fini; 1026 } 1027 1028 if (rq->fence.error) { 1029 pr_err("Fence error status not zero [%d] after unrelated reset\n", 1030 rq->fence.error); 1031 i915_request_put(rq); 1032 i915_request_put(prev); 1033 err = -EINVAL; 1034 goto fini; 1035 } 1036 1037 if (i915_reset_count(&i915->gpu_error) == reset_count) { 1038 pr_err("No GPU reset recorded!\n"); 1039 i915_request_put(rq); 1040 i915_request_put(prev); 1041 err = -EINVAL; 1042 goto fini; 1043 } 1044 1045 i915_request_put(prev); 1046 prev = rq; 1047 count++; 1048 } while (time_before(jiffies, end_time)); 1049 pr_info("%s: Completed %d resets\n", engine->name, count); 1050 1051 *h.batch = MI_BATCH_BUFFER_END; 1052 i915_gem_chipset_flush(i915); 1053 1054 i915_request_put(prev); 1055 1056 err = flush_test(i915, I915_WAIT_LOCKED); 1057 if (err) 1058 break; 1059 } 1060 1061 fini: 1062 hang_fini(&h); 1063 unlock: 1064 mutex_unlock(&i915->drm.struct_mutex); 1065 global_reset_unlock(i915); 1066 1067 if (i915_terminally_wedged(&i915->gpu_error)) 1068 return -EIO; 1069 1070 return err; 1071 } 1072 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip
_______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx