• Home
  • Raw
  • Download

Lines Matching refs:i915

61 static void create_shared_gtt(int i915, unsigned int flags)  in create_shared_gtt()  argument
66 .handle = gem_create(i915, 4096), in create_shared_gtt()
74 gem_write(i915, obj.handle, 0, &bbe, sizeof(bbe)); in create_shared_gtt()
75 gem_execbuf(i915, &execbuf); in create_shared_gtt()
76 gem_sync(i915, obj.handle); in create_shared_gtt()
78 child = flags & DETACHED ? gem_context_create(i915) : 0; in create_shared_gtt()
81 child = gem_context_clone(i915, in create_shared_gtt()
85 gem_execbuf(i915, &execbuf); in create_shared_gtt()
88 gem_context_destroy(i915, parent); in create_shared_gtt()
89 gem_execbuf(i915, &execbuf); in create_shared_gtt()
92 gem_context_destroy(i915, parent); in create_shared_gtt()
96 igt_assert_eq(__gem_execbuf(i915, &execbuf), -ENOENT); in create_shared_gtt()
97 igt_assert_eq(__gem_context_clone(i915, in create_shared_gtt()
102 gem_context_destroy(i915, child); in create_shared_gtt()
104 gem_sync(i915, obj.handle); in create_shared_gtt()
105 gem_close(i915, obj.handle); in create_shared_gtt()
108 static void disjoint_timelines(int i915) in disjoint_timelines() argument
114 igt_require(gem_has_execlists(i915)); in disjoint_timelines()
121 child = gem_context_clone(i915, 0, I915_CONTEXT_CLONE_VM, 0); in disjoint_timelines()
122 plug = igt_cork_plug(&cork, i915); in disjoint_timelines()
124 spin[0] = __igt_spin_new(i915, .ctx = 0, .dependency = plug); in disjoint_timelines()
125 spin[1] = __igt_spin_new(i915, .ctx = child); in disjoint_timelines()
129 gem_sync(i915, spin[1]->handle); in disjoint_timelines()
133 igt_spin_free(i915, spin[1]); in disjoint_timelines()
134 igt_spin_free(i915, spin[0]); in disjoint_timelines()
137 static void exhaust_shared_gtt(int i915, unsigned int flags) in exhaust_shared_gtt() argument
140 i915 = gem_reopen_driver(i915); in exhaust_shared_gtt()
145 .handle = gem_create(i915, 4096) in exhaust_shared_gtt()
155 gem_write(i915, obj.handle, 0, &bbe, sizeof(bbe)); in exhaust_shared_gtt()
160 err = __gem_context_clone(i915, in exhaust_shared_gtt()
168 err = __gem_execbuf(i915, &execbuf); in exhaust_shared_gtt()
175 gem_sync(i915, obj.handle); in exhaust_shared_gtt()
180 close(i915); in exhaust_shared_gtt()
184 static void exec_shared_gtt(int i915, unsigned int ring) in exec_shared_gtt() argument
186 const int gen = intel_gen(intel_get_drm_devid(i915)); in exec_shared_gtt()
199 gem_require_ring(i915, ring); in exec_shared_gtt()
200 igt_require(gem_can_store_dword(i915, ring)); in exec_shared_gtt()
203 scratch = gem_create(i915, 16384); in exec_shared_gtt()
204 gem_write(i915, scratch, 0, &bbe, sizeof(bbe)); in exec_shared_gtt()
206 gem_execbuf(i915, &execbuf); in exec_shared_gtt()
207 gem_close(i915, scratch); in exec_shared_gtt()
210 scratch = gem_create(i915, 4096); in exec_shared_gtt()
211 s = gem_mmap__wc(i915, scratch, 0, 4096, PROT_WRITE); in exec_shared_gtt()
213 gem_set_domain(i915, scratch, I915_GEM_DOMAIN_WC, I915_GEM_DOMAIN_WC); in exec_shared_gtt()
219 gem_execbuf(i915, &execbuf); in exec_shared_gtt()
224 batch = gem_create(i915, 4096); in exec_shared_gtt()
240 gem_write(i915, batch, 0, cs, sizeof(cs)); in exec_shared_gtt()
244 execbuf.rsvd1 = gem_context_clone(i915, 0, I915_CONTEXT_CLONE_VM, 0); in exec_shared_gtt()
247 gem_execbuf(i915, &execbuf); in exec_shared_gtt()
254 gem_execbuf(i915, &execbuf); in exec_shared_gtt()
256 gem_context_destroy(i915, execbuf.rsvd1); in exec_shared_gtt()
258 gem_sync(i915, batch); /* write hazard lies */ in exec_shared_gtt()
259 gem_close(i915, batch); in exec_shared_gtt()
270 gem_close(i915, scratch); in exec_shared_gtt()
273 static int nop_sync(int i915, uint32_t ctx, unsigned int ring, int64_t timeout) in nop_sync() argument
277 .handle = gem_create(i915, 4096), in nop_sync()
287 gem_write(i915, obj.handle, 0, &bbe, sizeof(bbe)); in nop_sync()
288 gem_execbuf(i915, &execbuf); in nop_sync()
289 err = gem_wait(i915, obj.handle, &timeout); in nop_sync()
290 gem_close(i915, obj.handle); in nop_sync()
295 static bool has_single_timeline(int i915) in has_single_timeline() argument
299 __gem_context_clone(i915, 0, 0, in has_single_timeline()
303 gem_context_destroy(i915, ctx); in has_single_timeline()
308 static void single_timeline(int i915) in single_timeline() argument
312 .handle = gem_create(i915, 4096), in single_timeline()
325 igt_require(has_single_timeline(i915)); in single_timeline()
327 gem_write(i915, obj.handle, 0, &bbe, sizeof(bbe)); in single_timeline()
328 gem_execbuf(i915, &execbuf); in single_timeline()
329 gem_sync(i915, obj.handle); in single_timeline()
339 gem_context_clone(i915, 0, 0, in single_timeline()
343 for_each_engine(i915, engine) { in single_timeline()
344 gem_execbuf_wr(i915, &execbuf); in single_timeline()
353 gem_sync(i915, obj.handle); in single_timeline()
354 gem_close(i915, obj.handle); in single_timeline()
362 static void exec_single_timeline(int i915, unsigned int engine) in exec_single_timeline() argument
368 igt_require(gem_ring_has_physical_engine(i915, engine)); in exec_single_timeline()
369 igt_require(has_single_timeline(i915)); in exec_single_timeline()
377 for_each_physical_engine(i915, other) { in exec_single_timeline()
382 spin = __igt_spin_new(i915, .ctx = ctx, .engine = other); in exec_single_timeline()
390 gem_execbuf(i915, &execbuf); in exec_single_timeline()
394 igt_assert_eq(nop_sync(i915, ctx, engine, NSEC_PER_SEC), 0); in exec_single_timeline()
395 igt_spin_free(i915, spin); in exec_single_timeline()
402 ctx = gem_context_clone(i915, 0, 0, in exec_single_timeline()
405 for_each_physical_engine(i915, other) { in exec_single_timeline()
410 spin = __igt_spin_new(i915, .ctx = ctx, .engine = other); in exec_single_timeline()
418 gem_execbuf(i915, &execbuf); in exec_single_timeline()
422 igt_assert_eq(nop_sync(i915, ctx, engine, NSEC_PER_SEC), -ETIME); in exec_single_timeline()
423 igt_spin_free(i915, spin); in exec_single_timeline()
426 static void store_dword(int i915, uint32_t ctx, unsigned ring, in store_dword() argument
430 const int gen = intel_gen(intel_get_drm_devid(i915)); in store_dword()
448 obj[2].handle = gem_create(i915, 4096); in store_dword()
475 gem_write(i915, obj[2].handle, 0, batch, sizeof(batch)); in store_dword()
476 gem_execbuf(i915, &execbuf); in store_dword()
477 gem_close(i915, obj[2].handle); in store_dword()
480 static uint32_t create_highest_priority(int i915) in create_highest_priority() argument
482 uint32_t ctx = gem_context_create(i915); in create_highest_priority()
489 __gem_context_set_priority(i915, ctx, MAX_PRIO); in create_highest_priority()
494 static void unplug_show_queue(int i915, struct igt_cork *c, unsigned int engine) in unplug_show_queue() argument
500 .ctx = create_highest_priority(i915), in unplug_show_queue()
503 spin[n] = __igt_spin_factory(i915, &opts); in unplug_show_queue()
504 gem_context_destroy(i915, opts.ctx); in unplug_show_queue()
508 igt_debugfs_dump(i915, "i915_engine_info"); in unplug_show_queue()
511 igt_spin_free(i915, spin[n]); in unplug_show_queue()
514 static uint32_t store_timestamp(int i915, in store_timestamp() argument
519 const bool r64b = intel_gen(intel_get_drm_devid(i915)) >= 8; in store_timestamp()
521 .handle = gem_create(i915, 4096), in store_timestamp()
544 igt_require(intel_gen(intel_get_drm_devid(i915)) >= 7); in store_timestamp()
546 gem_write(i915, obj.handle, 0, batch, sizeof(batch)); in store_timestamp()
549 gem_execbuf(i915, &execbuf); in store_timestamp()
554 static void independent(int i915, unsigned ring, unsigned flags) in independent() argument
579 if (intel_gen(intel_get_drm_devid(i915)) >= 11) in independent()
591 .ctx = create_highest_priority(i915), in independent()
594 spin[n] = __igt_spin_factory(i915, &opts); in independent()
595 gem_context_destroy(i915, opts.ctx); in independent()
599 uint32_t ctx = gem_queue_create(i915); in independent()
600 gem_context_set_priority(i915, ctx, priorities[i]); in independent()
601 handle[i] = store_timestamp(i915, ctx, ring, mmio_base, TIMESTAMP); in independent()
602 gem_context_destroy(i915, ctx); in independent()
606 igt_spin_free(i915, spin[n]); in independent()
611 ptr = gem_mmap__gtt(i915, handle[i], 4096, PROT_READ); in independent()
612 gem_set_domain(i915, handle[i], /* no write hazard lies! */ in independent()
614 gem_close(i915, handle[i]); in independent()
626 static void reorder(int i915, unsigned ring, unsigned flags) in reorder() argument
635 ctx[LO] = gem_queue_create(i915); in reorder()
636 gem_context_set_priority(i915, ctx[LO], MIN_PRIO); in reorder()
638 ctx[HI] = gem_queue_create(i915); in reorder()
639 gem_context_set_priority(i915, ctx[HI], flags & EQUAL ? MIN_PRIO : 0); in reorder()
641 scratch = gem_create(i915, 4096); in reorder()
642 plug = igt_cork_plug(&cork, i915); in reorder()
647 store_dword(i915, ctx[LO], ring, scratch, 0, ctx[LO], plug, 0); in reorder()
648 store_dword(i915, ctx[HI], ring, scratch, 0, ctx[HI], plug, 0); in reorder()
650 unplug_show_queue(i915, &cork, ring); in reorder()
651 gem_close(i915, plug); in reorder()
653 gem_context_destroy(i915, ctx[LO]); in reorder()
654 gem_context_destroy(i915, ctx[HI]); in reorder()
656 ptr = gem_mmap__gtt(i915, scratch, 4096, PROT_READ); in reorder()
657 gem_set_domain(i915, scratch, /* no write hazard lies! */ in reorder()
659 gem_close(i915, scratch); in reorder()
668 static void promotion(int i915, unsigned ring) in promotion() argument
676 ctx[LO] = gem_queue_create(i915); in promotion()
677 gem_context_set_priority(i915, ctx[LO], MIN_PRIO); in promotion()
679 ctx[HI] = gem_queue_create(i915); in promotion()
680 gem_context_set_priority(i915, ctx[HI], 0); in promotion()
682 ctx[NOISE] = gem_queue_create(i915); in promotion()
683 gem_context_set_priority(i915, ctx[NOISE], MIN_PRIO/2); in promotion()
685 result = gem_create(i915, 4096); in promotion()
686 dep = gem_create(i915, 4096); in promotion()
688 plug = igt_cork_plug(&cork, i915); in promotion()
695 store_dword(i915, ctx[NOISE], ring, result, 0, ctx[NOISE], plug, 0); in promotion()
696 store_dword(i915, ctx[LO], ring, result, 0, ctx[LO], plug, 0); in promotion()
699 store_dword(i915, ctx[LO], ring, dep, 0, ctx[LO], 0, I915_GEM_DOMAIN_INSTRUCTION); in promotion()
700 store_dword(i915, ctx[HI], ring, dep, 0, ctx[HI], 0, 0); in promotion()
702 store_dword(i915, ctx[HI], ring, result, 0, ctx[HI], 0, 0); in promotion()
704 unplug_show_queue(i915, &cork, ring); in promotion()
705 gem_close(i915, plug); in promotion()
707 gem_context_destroy(i915, ctx[NOISE]); in promotion()
708 gem_context_destroy(i915, ctx[LO]); in promotion()
709 gem_context_destroy(i915, ctx[HI]); in promotion()
711 ptr = gem_mmap__gtt(i915, dep, 4096, PROT_READ); in promotion()
712 gem_set_domain(i915, dep, /* no write hazard lies! */ in promotion()
714 gem_close(i915, dep); in promotion()
719 ptr = gem_mmap__gtt(i915, result, 4096, PROT_READ); in promotion()
720 gem_set_domain(i915, result, /* no write hazard lies! */ in promotion()
722 gem_close(i915, result); in promotion()
728 static void smoketest(int i915, unsigned ring, unsigned timeout) in smoketest() argument
738 for_each_physical_engine(i915, engine) in smoketest()
742 scratch = gem_create(i915, 4096); in smoketest()
749 ctx = gem_queue_create(i915); in smoketest()
754 gem_context_set_priority(i915, ctx, prio); in smoketest()
757 store_dword(i915, ctx, engine, scratch, in smoketest()
761 store_dword(i915, ctx, engine, scratch, in smoketest()
765 gem_context_destroy(i915, ctx); in smoketest()
769 ptr = gem_mmap__gtt(i915, scratch, 4096, PROT_READ); in smoketest()
770 gem_set_domain(i915, scratch, /* no write hazard lies! */ in smoketest()
772 gem_close(i915, scratch); in smoketest()
790 int i915 = -1; variable
793 i915 = drm_open_driver(DRIVER_INTEL);
794 igt_require_gem(i915);
799 igt_require(gem_contexts_has_shared_gtt(i915));
800 igt_fork_hang_detector(i915);
804 create_shared_gtt(i915, 0);
807 create_shared_gtt(i915, DETACHED);
810 disjoint_timelines(i915);
813 single_timeline(i915);
816 exhaust_shared_gtt(i915, 0);
819 exhaust_shared_gtt(i915, EXHAUST_LRC);
823 exec_shared_gtt(i915, e->exec_id | e->flags);
826 exec_single_timeline(i915,
838 gem_require_ring(i915, e->exec_id | e->flags);
839 igt_require(gem_can_store_dword(i915, e->exec_id | e->flags));
840 igt_require(gem_scheduler_enabled(i915));
841 igt_require(gem_scheduler_has_ctx_priority(i915));
845 independent(i915, e->exec_id | e->flags, 0);
848 reorder(i915, e->exec_id | e->flags, EQUAL);
851 reorder(i915, e->exec_id | e->flags, 0);
854 promotion(i915, e->exec_id | e->flags);
857 smoketest(i915, e->exec_id | e->flags, 5);
862 igt_require(gem_scheduler_enabled(i915));
863 igt_require(gem_scheduler_has_ctx_priority(i915));
864 smoketest(i915, -1, 30);