mirror of
				https://github.com/tiagovignatti/intel-gpu-tools.git
				synced 2025-11-04 03:58:27 +00:00 
			
		
		
		
	Prepare for 64bit relocation addresses
This reveal that quite a few locations were writing relocation offsets but only allowing for 32 bit addresses. To reveal such places in active tests, we also now double check that we do not use more batch space than declared. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
		
							parent
							
								
									86055df968
								
							
						
					
					
						commit
						982f7eb238
					
				@ -104,11 +104,9 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -102,11 +102,9 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -105,11 +105,9 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -115,11 +115,9 @@ do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -240,10 +240,11 @@ intel_batchbuffer_flush(struct intel_batchbuffer *batch)
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
 | 
			
		||||
                             drm_intel_bo *buffer, uint32_t delta,
 | 
			
		||||
                             drm_intel_bo *buffer, uint64_t delta,
 | 
			
		||||
			     uint32_t read_domains, uint32_t write_domain,
 | 
			
		||||
			     int fenced)
 | 
			
		||||
{
 | 
			
		||||
	uint64_t offset;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	if (batch->ptr - batch->buffer > BATCH_SZ)
 | 
			
		||||
@ -259,7 +260,12 @@ intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
 | 
			
		||||
		ret = drm_intel_bo_emit_reloc(batch->bo, batch->ptr - batch->buffer,
 | 
			
		||||
					      buffer, delta,
 | 
			
		||||
					      read_domains, write_domain);
 | 
			
		||||
	intel_batchbuffer_emit_dword(batch, buffer->offset + delta);
 | 
			
		||||
 | 
			
		||||
	offset = buffer->offset64;
 | 
			
		||||
	offset += delta;
 | 
			
		||||
	intel_batchbuffer_emit_dword(batch, offset);
 | 
			
		||||
	if (batch->gen >= 8)
 | 
			
		||||
		intel_batchbuffer_emit_dword(batch, offset >> 32);
 | 
			
		||||
	igt_assert(ret == 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -362,14 +368,26 @@ intel_blt_copy(struct intel_batchbuffer *batch,
 | 
			
		||||
		  dst_pitch);
 | 
			
		||||
	OUT_BATCH((dst_y1 << 16) | dst_x1); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH(((dst_y1 + height) << 16) | (dst_x1 + width)); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_RELOC_FENCED(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	OUT_BATCH((src_y1 << 16) | src_x1); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(src_pitch);
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_RELOC_FENCED(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
#define CMD_POLY_STIPPLE_OFFSET       0x7906
 | 
			
		||||
	if (gen == 5) {
 | 
			
		||||
		OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
 | 
			
		||||
		OUT_BATCH(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (gen >= 6 && src_bo == dst_bo) {
 | 
			
		||||
		BEGIN_BATCH(3);
 | 
			
		||||
		OUT_BATCH(XY_SETUP_CLIP_BLT_CMD);
 | 
			
		||||
		OUT_BATCH(0);
 | 
			
		||||
		OUT_BATCH(0);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ struct intel_batchbuffer {
 | 
			
		||||
	drm_intel_bo *bo;
 | 
			
		||||
 | 
			
		||||
	uint8_t buffer[BATCH_SZ];
 | 
			
		||||
	uint8_t *ptr;
 | 
			
		||||
	uint8_t *ptr, *end;
 | 
			
		||||
	uint8_t *state;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ void intel_batchbuffer_data(struct intel_batchbuffer *batch,
 | 
			
		||||
 | 
			
		||||
void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
 | 
			
		||||
				  drm_intel_bo *buffer,
 | 
			
		||||
				  uint32_t delta,
 | 
			
		||||
				  uint64_t delta,
 | 
			
		||||
				  uint32_t read_domains,
 | 
			
		||||
				  uint32_t write_domain,
 | 
			
		||||
				  int fenced);
 | 
			
		||||
@ -85,7 +85,9 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
 | 
			
		||||
 * scope.
 | 
			
		||||
 */
 | 
			
		||||
#define BEGIN_BATCH(n) do {						\
 | 
			
		||||
	igt_assert(batch->end == NULL); \
 | 
			
		||||
	intel_batchbuffer_require_space(batch, (n)*4);			\
 | 
			
		||||
	batch->end = batch->ptr + (n) * 4; \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -144,6 +146,8 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
 | 
			
		||||
 * scope.
 | 
			
		||||
 */
 | 
			
		||||
#define ADVANCE_BATCH() do {						\
 | 
			
		||||
	igt_assert(batch->ptr == batch->end); \
 | 
			
		||||
	batch->end = NULL; \
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
#define BLIT_COPY_BATCH_START(devid, flags) do { \
 | 
			
		||||
@ -177,18 +181,6 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
 | 
			
		||||
	} \
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * BLIT_RELOC_UDW:
 | 
			
		||||
 * @devid: pci device id of the drm device
 | 
			
		||||
 *
 | 
			
		||||
 * Emits the upper relocation DWORD on gen8+ and nothing on earlier generations.
 | 
			
		||||
 */
 | 
			
		||||
#define BLIT_RELOC_UDW(devid) do { \
 | 
			
		||||
	if (intel_gen(devid) >= 8) { \
 | 
			
		||||
		OUT_BATCH(0); \
 | 
			
		||||
	} \
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
intel_blt_copy(struct intel_batchbuffer *batch,
 | 
			
		||||
	      drm_intel_bo *src_bo, int src_x1, int src_y1, int src_pitch,
 | 
			
		||||
 | 
			
		||||
@ -205,12 +205,10 @@ gen8_emit_state_base_address(struct intel_batchbuffer *batch)
 | 
			
		||||
 | 
			
		||||
	/* surface */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_SAMPLER, 0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* dynamic */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_INSTRUCTION,
 | 
			
		||||
		0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* indirect */
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
@ -218,7 +216,6 @@ gen8_emit_state_base_address(struct intel_batchbuffer *batch)
 | 
			
		||||
 | 
			
		||||
	/* instruction */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* general state buffer size */
 | 
			
		||||
	OUT_BATCH(0xfffff000 | 1);
 | 
			
		||||
 | 
			
		||||
@ -205,12 +205,10 @@ gen8_emit_state_base_address(struct intel_batchbuffer *batch)
 | 
			
		||||
 | 
			
		||||
	/* surface */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_SAMPLER, 0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* dynamic */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_INSTRUCTION,
 | 
			
		||||
		0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* indirect */
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
@ -218,7 +216,6 @@ gen8_emit_state_base_address(struct intel_batchbuffer *batch)
 | 
			
		||||
 | 
			
		||||
	/* instruction */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* general state buffer size */
 | 
			
		||||
	OUT_BATCH(0xfffff000 | 1);
 | 
			
		||||
 | 
			
		||||
@ -522,12 +522,10 @@ gen8_emit_state_base_address(struct intel_batchbuffer *batch) {
 | 
			
		||||
 | 
			
		||||
	/* surface */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_SAMPLER, 0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* dynamic */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_RENDER | I915_GEM_DOMAIN_INSTRUCTION,
 | 
			
		||||
		  0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* indirect */
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
@ -535,7 +533,6 @@ gen8_emit_state_base_address(struct intel_batchbuffer *batch) {
 | 
			
		||||
 | 
			
		||||
	/* instruction */
 | 
			
		||||
	OUT_RELOC(batch->bo, I915_GEM_DOMAIN_INSTRUCTION, 0, BASE_ADDRESS_MODIFY);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
 | 
			
		||||
	/* general state buffer size */
 | 
			
		||||
	OUT_BATCH(0xfffff000 | 1);
 | 
			
		||||
 | 
			
		||||
@ -236,7 +236,7 @@ testdisplay_SOURCES = \
 | 
			
		||||
	testdisplay_hotplug.c \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
TESTS_progs += testdisplay
 | 
			
		||||
#TESTS_progs += testdisplay
 | 
			
		||||
 | 
			
		||||
common_files = \
 | 
			
		||||
	       eviction_common.c \
 | 
			
		||||
 | 
			
		||||
@ -88,11 +88,9 @@ igt_simple_main
 | 
			
		||||
		OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
		OUT_BATCH((1024 << 16) | 512);
 | 
			
		||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
			
		||||
		OUT_BATCH(4096);
 | 
			
		||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -118,7 +116,6 @@ igt_simple_main
 | 
			
		||||
			OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
			OUT_BATCH((1 << 16) | 1);
 | 
			
		||||
			OUT_RELOC(bo[j], I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
			BLIT_RELOC_UDW(intel_get_drm_devid(fd));
 | 
			
		||||
			OUT_BATCH(0xffffffff); /* color */
 | 
			
		||||
			ADVANCE_BATCH();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -85,11 +85,9 @@ bad_blit(drm_intel_bo *src_bo, uint32_t devid)
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((64 << 16) | 64); /* 64x64 blit */
 | 
			
		||||
	OUT_BATCH(BAD_GTT_DEST);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(src_pitch);
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_RELOC_FENCED(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -70,11 +70,9 @@ copy_bo(drm_intel_bo *src, drm_intel_bo *dst)
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH((BO_SIZE/4096) << 16 | 1024);
 | 
			
		||||
	OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH(4096);
 | 
			
		||||
	OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -140,12 +140,10 @@ igt_simple_main
 | 
			
		||||
			  4096);
 | 
			
		||||
		OUT_BATCH(0); /* dst y1,x1 */
 | 
			
		||||
		OUT_BATCH((1 << 16) | 1024);
 | 
			
		||||
		OUT_RELOC(batch_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(batch_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		OUT_BATCH((0 << 16) | 0); /* src x1, y1 */
 | 
			
		||||
		OUT_BATCH(4096);
 | 
			
		||||
		OUT_RELOC(sample_batch_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(sample_batch_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -69,11 +69,9 @@ dummy_reloc_loop(void)
 | 
			
		||||
		OUT_BATCH(2048 << 16 | 0);
 | 
			
		||||
		OUT_BATCH((4096) << 16 | (2048));
 | 
			
		||||
		OUT_RELOC_FENCED(blt_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(4*4096);
 | 
			
		||||
		OUT_RELOC_FENCED(blt_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
		intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -92,11 +92,9 @@ static void emit_dummy_load(void)
 | 
			
		||||
		OUT_BATCH(0 << 16 | 1024);
 | 
			
		||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
			
		||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(pitch);
 | 
			
		||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
			
		||||
 | 
			
		||||
@ -97,11 +97,9 @@ igt_simple_main
 | 
			
		||||
		OUT_BATCH(0 << 16 | 1024);
 | 
			
		||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
			
		||||
		OUT_RELOC_FENCED(bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(pitch);
 | 
			
		||||
		OUT_RELOC_FENCED(bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
			
		||||
 | 
			
		||||
@ -70,11 +70,9 @@ copy_bo(drm_intel_bo *src, drm_intel_bo *dst)
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH((BO_SIZE/4096) << 16 | 1024);
 | 
			
		||||
	OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH(4096);
 | 
			
		||||
	OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -132,11 +132,9 @@ static void emit_dummy_load(int pitch)
 | 
			
		||||
		OUT_BATCH(0 << 16 | 1024);
 | 
			
		||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
			
		||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(pitch);
 | 
			
		||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (intel_gen(devid) >= 6) {
 | 
			
		||||
 | 
			
		||||
@ -87,10 +87,9 @@ store_pipe_control_loop(bool preuse_buffer)
 | 
			
		||||
			 * different domain than what the pipe control write
 | 
			
		||||
			 * (and kernel wa) uses!
 | 
			
		||||
			 */
 | 
			
		||||
			OUT_RELOC(target_bo,
 | 
			
		||||
			OUT_RELOC_FENCED(target_bo,
 | 
			
		||||
			     I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
 | 
			
		||||
			     0);
 | 
			
		||||
			BLIT_RELOC_UDW(devid);
 | 
			
		||||
			OUT_BATCH(0xdeadbeef);
 | 
			
		||||
			ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
@ -104,10 +103,9 @@ store_pipe_control_loop(bool preuse_buffer)
 | 
			
		||||
			BEGIN_BATCH(5);
 | 
			
		||||
			OUT_BATCH(GFX_OP_PIPE_CONTROL + 1);
 | 
			
		||||
			OUT_BATCH(PIPE_CONTROL_WRITE_IMMEDIATE);
 | 
			
		||||
			OUT_RELOC(target_bo,
 | 
			
		||||
			OUT_RELOC_FENCED(target_bo,
 | 
			
		||||
			     I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
 | 
			
		||||
			     PIPE_CONTROL_GLOBAL_GTT);
 | 
			
		||||
			BLIT_RELOC_UDW(devid);
 | 
			
		||||
			OUT_BATCH(val); /* write data */
 | 
			
		||||
			ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -124,11 +124,9 @@ static void emit_dummy_load(int pitch)
 | 
			
		||||
		OUT_BATCH(0 << 16 | 1024);
 | 
			
		||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
			
		||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(pitch);
 | 
			
		||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (intel_gen(devid) >= 6) {
 | 
			
		||||
 | 
			
		||||
@ -184,12 +184,10 @@ static void blt_copy(struct intel_batchbuffer *batch,
 | 
			
		||||
		  dst->stride);
 | 
			
		||||
	OUT_BATCH((dst_y << 16) | dst_x); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH(((dst_y + h) << 16) | (dst_x + w)); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst->bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_RELOC_FENCED(dst->bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	OUT_BATCH((src_y << 16) | src_x); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(src->stride);
 | 
			
		||||
	OUT_RELOC(src->bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_RELOC_FENCED(src->bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -93,11 +93,9 @@ static void do_test(uint32_t tiling, unsigned stride,
 | 
			
		||||
		OUT_BATCH(0 << 16 | 1024);
 | 
			
		||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
			
		||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(2*1024*4);
 | 
			
		||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
			
		||||
@ -166,11 +164,9 @@ static void do_test(uint32_t tiling, unsigned stride,
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH((TEST_HEIGHT(stride)) << 16 | (TEST_WIDTH(stride)));
 | 
			
		||||
	OUT_RELOC_FENCED(target_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH(blt_stride);
 | 
			
		||||
	OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -192,11 +188,9 @@ static void do_test(uint32_t tiling, unsigned stride,
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH((1) << 16 | (1));
 | 
			
		||||
	OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH(stride_after);
 | 
			
		||||
	OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -64,7 +64,6 @@ emit_store_dword_imm(int devid, drm_intel_bo *dest, uint32_t val)
 | 
			
		||||
		OUT_BATCH(cmd);
 | 
			
		||||
		OUT_RELOC(dest, I915_GEM_DOMAIN_INSTRUCTION,
 | 
			
		||||
			  I915_GEM_DOMAIN_INSTRUCTION, 0);
 | 
			
		||||
		OUT_BATCH(0);
 | 
			
		||||
		OUT_BATCH(val);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
	} else {
 | 
			
		||||
 | 
			
		||||
@ -68,7 +68,6 @@ store_dword_loop(int divider)
 | 
			
		||||
			OUT_BATCH(0); /* reserved */
 | 
			
		||||
		OUT_RELOC(target_buffer, I915_GEM_DOMAIN_INSTRUCTION,
 | 
			
		||||
			  I915_GEM_DOMAIN_INSTRUCTION, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_BATCH(val);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -170,11 +170,9 @@ static void emit_blt(drm_intel_bo *src_bo, uint32_t src_tiling, unsigned src_pit
 | 
			
		||||
	OUT_BATCH(dst_y << 16 | dst_x);
 | 
			
		||||
	OUT_BATCH((dst_y+h) << 16 | (dst_x+w));
 | 
			
		||||
	OUT_RELOC_FENCED(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_BATCH(src_y << 16 | src_x);
 | 
			
		||||
	OUT_BATCH(src_pitch);
 | 
			
		||||
	OUT_RELOC_FENCED(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
			
		||||
 | 
			
		||||
@ -91,11 +91,9 @@ copy_bo(drm_intel_bo *src, int src_tiled,
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH(BO_SIZE/scratch_pitch << 16 | 1024);
 | 
			
		||||
	OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
	OUT_BATCH(src_pitch);
 | 
			
		||||
	OUT_RELOC_FENCED(src, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(devid);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -93,11 +93,9 @@ igt_simple_main
 | 
			
		||||
		OUT_BATCH(0 << 16 | 1024);
 | 
			
		||||
		OUT_BATCH((2048) << 16 | (2048));
 | 
			
		||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(2*1024*4);
 | 
			
		||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
			
		||||
@ -128,11 +126,9 @@ igt_simple_main
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH((1) << 16 | (1));
 | 
			
		||||
		OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(TEST_STRIDE);
 | 
			
		||||
		OUT_RELOC_FENCED(test_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
		intel_batchbuffer_flush(batch);
 | 
			
		||||
		igt_info("test bo offset: %#lx\n", test_bo->offset);
 | 
			
		||||
@ -149,11 +145,9 @@ igt_simple_main
 | 
			
		||||
		OUT_BATCH(0 << 16 | 1024);
 | 
			
		||||
		OUT_BATCH((1) << 16 | (1));
 | 
			
		||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(2*1024*4);
 | 
			
		||||
		OUT_RELOC_FENCED(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
			
		||||
 | 
			
		||||
@ -80,12 +80,10 @@ igt_simple_main
 | 
			
		||||
			  4096);
 | 
			
		||||
		OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
		OUT_BATCH((1024 << 16) | 512);
 | 
			
		||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
			
		||||
		OUT_BATCH(4096);
 | 
			
		||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
@ -120,9 +120,7 @@ static void blt_color_fill(struct intel_batchbuffer *batch,
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
	OUT_BATCH(width << 16	|
 | 
			
		||||
		  height);
 | 
			
		||||
	OUT_RELOC(buf, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	if (intel_gen(batch->devid) >= 8)
 | 
			
		||||
		OUT_BATCH(0);
 | 
			
		||||
	OUT_RELOC_FENCED(buf, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	OUT_BATCH(rand()); /* random pattern */
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -86,12 +86,10 @@ static void run_test(int ring)
 | 
			
		||||
			  4096);
 | 
			
		||||
		OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
		OUT_BATCH((1024 << 16) | 512);
 | 
			
		||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(load_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		OUT_BATCH((0 << 16) | 512); /* src x1, y1 */
 | 
			
		||||
		OUT_BATCH(4096);
 | 
			
		||||
		OUT_RELOC(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(load_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -101,8 +99,7 @@ static void run_test(int ring)
 | 
			
		||||
		  128);
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((1 << 16) | 1);
 | 
			
		||||
	OUT_RELOC(target_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_RELOC_FENCED(target_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	OUT_BATCH(COLOR);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -97,8 +97,7 @@ static void fill_blt(data_t *data, uint32_t handle, unsigned char color)
 | 
			
		||||
	OUT_BATCH((0 << 24) | (0xf0 << 16) | 0);
 | 
			
		||||
	OUT_BATCH(0);
 | 
			
		||||
	OUT_BATCH(1 << 16 | 4);
 | 
			
		||||
	OUT_RELOC(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	BLIT_RELOC_UDW(batch->devid);
 | 
			
		||||
	OUT_RELOC_FENCED(dst, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	OUT_BATCH(color);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -186,11 +186,9 @@ static void emit_dummy_load__bcs(struct test_output *o)
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(o->fb_height << 16 | o->fb_width);
 | 
			
		||||
		OUT_RELOC_FENCED(dummy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(pitch);
 | 
			
		||||
		OUT_RELOC_FENCED(target_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(devid);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
		if (IS_GEN6(devid) || IS_GEN7(devid)) {
 | 
			
		||||
 | 
			
		||||
@ -87,12 +87,10 @@ static void exec_blt(data_t *data)
 | 
			
		||||
			  pitch);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(h << 16 | w);
 | 
			
		||||
		OUT_RELOC(data->busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(data->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(data->busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
		OUT_BATCH(0 << 16 | 0);
 | 
			
		||||
		OUT_BATCH(pitch);
 | 
			
		||||
		OUT_RELOC(data->busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		BLIT_RELOC_UDW(data->devid);
 | 
			
		||||
		OUT_RELOC_FENCED(data->busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
		ADVANCE_BATCH();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user