[Intel-gfx] [PATCH v2 2/2] drm/i915: Don't use BAR mappings for ring buffers with LLC
kernel test robot
lkp at intel.com
Thu Feb 16 08:47:28 UTC 2023
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@intel.com/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 at intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202302161616.UKxjGXPv-lkp@intel.com/
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
More information about the dri-devel
mailing list