Hi, Thank you for the patch! Yet something to improve: [auto build test ERROR on drm-tip/drm-tip] url: https://github.com/intel-lab-lkp/linux/commits/John-C-Harrison-Intel-com/drm-i915-Don-t-use-stolen-memory-for-ring-buffers-with-LLC/20230216-082552 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip patch link: https://lore.kernel.org/r/20230216002248.1851966-3-John.C.Harrison%40Intel.com patch subject: [Intel-gfx] [PATCH v2 2/2] drm/i915: Don't use BAR mappings for ring buffers with LLC config: i386-randconfig-a005-20230213 (https://download.01.org/0day-ci/archive/20230216/202302161616.UKxjGXPv-lkp@xxxxxxxxx/config) compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/fa748ad303922e4138a246d4db247dfa96e45651 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review John-C-Harrison-Intel-com/drm-i915-Don-t-use-stolen-memory-for-ring-buffers-with-LLC/20230216-082552 git checkout fa748ad303922e4138a246d4db247dfa96e45651 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Link: https://lore.kernel.org/oe-kbuild-all/202302161616.UKxjGXPv-lkp@xxxxxxxxx/ All errors (new ones prefixed by >>): >> drivers/gpu/drm/i915/gt/intel_ring.c:103:2: error: expected expression else ^ >> drivers/gpu/drm/i915/gt/intel_ring.c:111:1: error: function definition is not allowed here { ^ drivers/gpu/drm/i915/gt/intel_ring.c:146:1: error: function definition is not allowed here { ^ drivers/gpu/drm/i915/gt/intel_ring.c:184:1: error: function definition is not allowed here { ^ drivers/gpu/drm/i915/gt/intel_ring.c:195:1: error: function definition is not allowed here { ^ drivers/gpu/drm/i915/gt/intel_ring.c:230:1: error: function definition is not allowed here { ^ drivers/gpu/drm/i915/gt/intel_ring.c:312:1: error: function definition is not allowed here { ^ >> drivers/gpu/drm/i915/gt/intel_ring.c:336:7: error: expected '}' #endif ^ drivers/gpu/drm/i915/gt/intel_ring.c:94:1: note: to match this '{' { ^ 8 errors generated. vim +103 drivers/gpu/drm/i915/gt/intel_ring.c 2871ea85c119e6 Chris Wilson 2019-10-24 92 2871ea85c119e6 Chris Wilson 2019-10-24 93 void intel_ring_unpin(struct intel_ring *ring) 2871ea85c119e6 Chris Wilson 2019-10-24 94 { 2871ea85c119e6 Chris Wilson 2019-10-24 95 struct i915_vma *vma = ring->vma; 2871ea85c119e6 Chris Wilson 2019-10-24 96 2871ea85c119e6 Chris Wilson 2019-10-24 97 if (!atomic_dec_and_test(&ring->pin_count)) 2871ea85c119e6 Chris Wilson 2019-10-24 98 return; 2871ea85c119e6 Chris Wilson 2019-10-24 99 2871ea85c119e6 Chris Wilson 2019-10-24 100 i915_vma_unset_ggtt_write(vma); fa748ad303922e Daniele Ceraolo Spurio 2023-02-15 101 if (i915_vma_is_map_and_fenceable(vma) && !HAS_LLC(vma->vm->i915)) { 2871ea85c119e6 Chris Wilson 2019-10-24 102 i915_vma_unpin_iomap(vma); 2871ea85c119e6 Chris Wilson 2019-10-24 @103 else 2871ea85c119e6 Chris Wilson 2019-10-24 104 i915_gem_object_unpin_map(vma->obj); 2871ea85c119e6 Chris Wilson 2019-10-24 105 2871ea85c119e6 Chris Wilson 2019-10-24 106 i915_vma_make_purgeable(vma); a266bf42006004 Chris Wilson 2019-11-18 107 i915_vma_unpin(vma); 2871ea85c119e6 Chris Wilson 2019-10-24 108 } 2871ea85c119e6 Chris Wilson 2019-10-24 109 2871ea85c119e6 Chris Wilson 2019-10-24 110 static struct i915_vma *create_ring_vma(struct i915_ggtt *ggtt, int size) 2871ea85c119e6 Chris Wilson 2019-10-24 @111 { 2871ea85c119e6 Chris Wilson 2019-10-24 112 struct i915_address_space *vm = &ggtt->vm; 2871ea85c119e6 Chris Wilson 2019-10-24 113 struct drm_i915_private *i915 = vm->i915; 2871ea85c119e6 Chris Wilson 2019-10-24 114 struct drm_i915_gem_object *obj; 2871ea85c119e6 Chris Wilson 2019-10-24 115 struct i915_vma *vma; 2871ea85c119e6 Chris Wilson 2019-10-24 116 0d8ee5ba8db46c Thomas Hellström 2021-09-22 117 obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_VOLATILE | 0d8ee5ba8db46c Thomas Hellström 2021-09-22 118 I915_BO_ALLOC_PM_VOLATILE); bb5623500723f7 John Harrison 2023-02-15 119 if (IS_ERR(obj) && i915_ggtt_has_aperture(ggtt) && !HAS_LLC(i915)) 2871ea85c119e6 Chris Wilson 2019-10-24 120 obj = i915_gem_object_create_stolen(i915, size); 2871ea85c119e6 Chris Wilson 2019-10-24 121 if (IS_ERR(obj)) 2871ea85c119e6 Chris Wilson 2019-10-24 122 obj = i915_gem_object_create_internal(i915, size); 2871ea85c119e6 Chris Wilson 2019-10-24 123 if (IS_ERR(obj)) 2871ea85c119e6 Chris Wilson 2019-10-24 124 return ERR_CAST(obj); 2871ea85c119e6 Chris Wilson 2019-10-24 125 2871ea85c119e6 Chris Wilson 2019-10-24 126 /* 2871ea85c119e6 Chris Wilson 2019-10-24 127 * Mark ring buffers as read-only from GPU side (so no stray overwrites) 2871ea85c119e6 Chris Wilson 2019-10-24 128 * if supported by the platform's GGTT. 2871ea85c119e6 Chris Wilson 2019-10-24 129 */ 2871ea85c119e6 Chris Wilson 2019-10-24 130 if (vm->has_read_only) 2871ea85c119e6 Chris Wilson 2019-10-24 131 i915_gem_object_set_readonly(obj); 2871ea85c119e6 Chris Wilson 2019-10-24 132 2871ea85c119e6 Chris Wilson 2019-10-24 133 vma = i915_vma_instance(obj, vm, NULL); 2871ea85c119e6 Chris Wilson 2019-10-24 134 if (IS_ERR(vma)) 2871ea85c119e6 Chris Wilson 2019-10-24 135 goto err; 2871ea85c119e6 Chris Wilson 2019-10-24 136 2871ea85c119e6 Chris Wilson 2019-10-24 137 return vma; 2871ea85c119e6 Chris Wilson 2019-10-24 138 2871ea85c119e6 Chris Wilson 2019-10-24 139 err: 2871ea85c119e6 Chris Wilson 2019-10-24 140 i915_gem_object_put(obj); 2871ea85c119e6 Chris Wilson 2019-10-24 141 return vma; 2871ea85c119e6 Chris Wilson 2019-10-24 142 } 2871ea85c119e6 Chris Wilson 2019-10-24 143 2871ea85c119e6 Chris Wilson 2019-10-24 144 struct intel_ring * 2871ea85c119e6 Chris Wilson 2019-10-24 145 intel_engine_create_ring(struct intel_engine_cs *engine, int size) 2871ea85c119e6 Chris Wilson 2019-10-24 146 { 2871ea85c119e6 Chris Wilson 2019-10-24 147 struct drm_i915_private *i915 = engine->i915; 2871ea85c119e6 Chris Wilson 2019-10-24 148 struct intel_ring *ring; 2871ea85c119e6 Chris Wilson 2019-10-24 149 struct i915_vma *vma; 2871ea85c119e6 Chris Wilson 2019-10-24 150 2871ea85c119e6 Chris Wilson 2019-10-24 151 GEM_BUG_ON(!is_power_of_2(size)); 2871ea85c119e6 Chris Wilson 2019-10-24 152 GEM_BUG_ON(RING_CTL_SIZE(size) & ~RING_NR_PAGES); 2871ea85c119e6 Chris Wilson 2019-10-24 153 2871ea85c119e6 Chris Wilson 2019-10-24 154 ring = kzalloc(sizeof(*ring), GFP_KERNEL); 2871ea85c119e6 Chris Wilson 2019-10-24 155 if (!ring) 2871ea85c119e6 Chris Wilson 2019-10-24 156 return ERR_PTR(-ENOMEM); 2871ea85c119e6 Chris Wilson 2019-10-24 157 2871ea85c119e6 Chris Wilson 2019-10-24 158 kref_init(&ring->ref); 2871ea85c119e6 Chris Wilson 2019-10-24 159 ring->size = size; 5ba32c7be81e53 Chris Wilson 2020-02-07 160 ring->wrap = BITS_PER_TYPE(ring->size) - ilog2(size); 2871ea85c119e6 Chris Wilson 2019-10-24 161 2871ea85c119e6 Chris Wilson 2019-10-24 162 /* 2871ea85c119e6 Chris Wilson 2019-10-24 163 * Workaround an erratum on the i830 which causes a hang if 2871ea85c119e6 Chris Wilson 2019-10-24 164 * the TAIL pointer points to within the last 2 cachelines 2871ea85c119e6 Chris Wilson 2019-10-24 165 * of the buffer. 2871ea85c119e6 Chris Wilson 2019-10-24 166 */ 2871ea85c119e6 Chris Wilson 2019-10-24 167 ring->effective_size = size; 2871ea85c119e6 Chris Wilson 2019-10-24 168 if (IS_I830(i915) || IS_I845G(i915)) 2871ea85c119e6 Chris Wilson 2019-10-24 169 ring->effective_size -= 2 * CACHELINE_BYTES; 2871ea85c119e6 Chris Wilson 2019-10-24 170 2871ea85c119e6 Chris Wilson 2019-10-24 171 intel_ring_update_space(ring); 2871ea85c119e6 Chris Wilson 2019-10-24 172 2871ea85c119e6 Chris Wilson 2019-10-24 173 vma = create_ring_vma(engine->gt->ggtt, size); 2871ea85c119e6 Chris Wilson 2019-10-24 174 if (IS_ERR(vma)) { 2871ea85c119e6 Chris Wilson 2019-10-24 175 kfree(ring); 2871ea85c119e6 Chris Wilson 2019-10-24 176 return ERR_CAST(vma); 2871ea85c119e6 Chris Wilson 2019-10-24 177 } 2871ea85c119e6 Chris Wilson 2019-10-24 178 ring->vma = vma; 2871ea85c119e6 Chris Wilson 2019-10-24 179 2871ea85c119e6 Chris Wilson 2019-10-24 180 return ring; 2871ea85c119e6 Chris Wilson 2019-10-24 181 } 2871ea85c119e6 Chris Wilson 2019-10-24 182 2871ea85c119e6 Chris Wilson 2019-10-24 183 void intel_ring_free(struct kref *ref) 2871ea85c119e6 Chris Wilson 2019-10-24 184 { 2871ea85c119e6 Chris Wilson 2019-10-24 185 struct intel_ring *ring = container_of(ref, typeof(*ring), ref); 2871ea85c119e6 Chris Wilson 2019-10-24 186 2871ea85c119e6 Chris Wilson 2019-10-24 187 i915_vma_put(ring->vma); 2871ea85c119e6 Chris Wilson 2019-10-24 188 kfree(ring); 2871ea85c119e6 Chris Wilson 2019-10-24 189 } 2871ea85c119e6 Chris Wilson 2019-10-24 190 2871ea85c119e6 Chris Wilson 2019-10-24 191 static noinline int 2871ea85c119e6 Chris Wilson 2019-10-24 192 wait_for_space(struct intel_ring *ring, 2871ea85c119e6 Chris Wilson 2019-10-24 193 struct intel_timeline *tl, 2871ea85c119e6 Chris Wilson 2019-10-24 194 unsigned int bytes) 2871ea85c119e6 Chris Wilson 2019-10-24 @195 { 2871ea85c119e6 Chris Wilson 2019-10-24 196 struct i915_request *target; 2871ea85c119e6 Chris Wilson 2019-10-24 197 long timeout; 2871ea85c119e6 Chris Wilson 2019-10-24 198 2871ea85c119e6 Chris Wilson 2019-10-24 199 if (intel_ring_update_space(ring) >= bytes) 2871ea85c119e6 Chris Wilson 2019-10-24 200 return 0; 2871ea85c119e6 Chris Wilson 2019-10-24 201 2871ea85c119e6 Chris Wilson 2019-10-24 202 GEM_BUG_ON(list_empty(&tl->requests)); 2871ea85c119e6 Chris Wilson 2019-10-24 203 list_for_each_entry(target, &tl->requests, link) { 2871ea85c119e6 Chris Wilson 2019-10-24 204 if (target->ring != ring) 2871ea85c119e6 Chris Wilson 2019-10-24 205 continue; 2871ea85c119e6 Chris Wilson 2019-10-24 206 2871ea85c119e6 Chris Wilson 2019-10-24 207 /* Would completion of this request free enough space? */ 2871ea85c119e6 Chris Wilson 2019-10-24 208 if (bytes <= __intel_ring_space(target->postfix, 2871ea85c119e6 Chris Wilson 2019-10-24 209 ring->emit, ring->size)) 2871ea85c119e6 Chris Wilson 2019-10-24 210 break; 2871ea85c119e6 Chris Wilson 2019-10-24 211 } 2871ea85c119e6 Chris Wilson 2019-10-24 212 2871ea85c119e6 Chris Wilson 2019-10-24 213 if (GEM_WARN_ON(&target->link == &tl->requests)) 2871ea85c119e6 Chris Wilson 2019-10-24 214 return -ENOSPC; 2871ea85c119e6 Chris Wilson 2019-10-24 215 2871ea85c119e6 Chris Wilson 2019-10-24 216 timeout = i915_request_wait(target, 2871ea85c119e6 Chris Wilson 2019-10-24 217 I915_WAIT_INTERRUPTIBLE, 2871ea85c119e6 Chris Wilson 2019-10-24 218 MAX_SCHEDULE_TIMEOUT); 2871ea85c119e6 Chris Wilson 2019-10-24 219 if (timeout < 0) 2871ea85c119e6 Chris Wilson 2019-10-24 220 return timeout; 2871ea85c119e6 Chris Wilson 2019-10-24 221 2871ea85c119e6 Chris Wilson 2019-10-24 222 i915_request_retire_upto(target); 2871ea85c119e6 Chris Wilson 2019-10-24 223 2871ea85c119e6 Chris Wilson 2019-10-24 224 intel_ring_update_space(ring); 2871ea85c119e6 Chris Wilson 2019-10-24 225 GEM_BUG_ON(ring->space < bytes); 2871ea85c119e6 Chris Wilson 2019-10-24 226 return 0; 2871ea85c119e6 Chris Wilson 2019-10-24 227 } 2871ea85c119e6 Chris Wilson 2019-10-24 228 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests