Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Anshuman Gupta <anshuman.gupta@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: chris.p.wilson@intel.com, Chris Wilson <chris@chris-wilson.co.uk>,
	CQ Tang <cq.tang@intel.com>
Subject: [igt-dev] [PATCH i-g-t 1/2] i915/gem_eio: Exercise object creation while wedged
Date: Thu,  3 Mar 2022 19:36:35 +0530	[thread overview]
Message-ID: <20220303140636.26652-2-anshuman.gupta@intel.com> (raw)
In-Reply-To: <20220303140636.26652-1-anshuman.gupta@intel.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=y, Size: 6932 bytes --]

From: Chris Wilson <chris@chris-wilson.co.uk>

Make sure that we can continue to create buffers, primarily to service as
frameuffers for scanout, even while the device is wedged.

Cc: CQ Tang <cq.tang@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
---
 lib/i915/gem_memory_topology.c | 79 ++++++++++++++++++++++++++++++++++
 lib/i915/gem_memory_topology.h | 45 +++++++++++++++++++
 lib/meson.build                |  1 +
 tests/i915/gem_eio.c           | 40 +++++++++++++++++
 4 files changed, 165 insertions(+)
 create mode 100644 lib/i915/gem_memory_topology.c
 create mode 100644 lib/i915/gem_memory_topology.h

diff --git a/lib/i915/gem_memory_topology.c b/lib/i915/gem_memory_topology.c
new file mode 100644
index 000000000..6ee1cb832
--- /dev/null
+++ b/lib/i915/gem_memory_topology.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright © 2021 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "gem_memory_topology.h"
+#include "igt_aux.h"
+#include "igt_core.h"
+#include "intel_memory_region.h"
+
+static const char *
+region_repr(const struct drm_i915_gem_memory_class_instance *ci)
+{
+	switch (ci->memory_class) {
+	case I915_MEMORY_CLASS_SYSTEM:
+		return "smem";
+	case I915_MEMORY_CLASS_DEVICE:
+		return "lmem";
+	default:
+		return "unknown";
+	}
+}
+
+struct gem_memory_region *__gem_get_memory_regions(int i915)
+{
+	struct drm_i915_query_memory_regions *info;
+	struct gem_memory_region *first = NULL;
+
+	info = gem_get_query_memory_regions(i915);
+	for (int i = 0; info && i < info->num_regions; i++) {
+		struct gem_memory_region *r;
+
+		r = malloc(sizeof(*r));
+		igt_assert(r);
+
+		r->ci = info->regions[i].region;
+		r->size = info->regions[i].probed_size;
+		if (r->size == -1ull)
+			r->size = intel_get_avail_ram_mb() << 20;
+
+		asprintf(&r->name, "%s%d",
+			 region_repr(&r->ci), r->ci.memory_instance);
+
+		r->next = first;
+		first = r;
+	}
+	free(info);
+
+	return first;
+}
+
+struct gem_memory_region *__gem_next_memory_region(struct gem_memory_region *r)
+{
+	struct gem_memory_region *next = r->next;
+	free(r->name);
+	free(r);
+	return next;
+}
diff --git a/lib/i915/gem_memory_topology.h b/lib/i915/gem_memory_topology.h
new file mode 100644
index 000000000..8daec8b5b
--- /dev/null
+++ b/lib/i915/gem_memory_topology.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright © 2021 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef GEM_MEMORY_TOPOLOGY_H
+#define GEM_MEMORY_TOPOLOGY_H
+
+#include <stdint.h>
+
+#include "i915_drm.h"
+
+struct gem_memory_region {
+	struct gem_memory_region *next;
+	char *name;
+
+	struct drm_i915_gem_memory_class_instance ci;
+	uint64_t size;
+};
+
+struct gem_memory_region *__gem_get_memory_regions(int i915);
+struct gem_memory_region *
+__gem_next_memory_region(struct gem_memory_region *r);
+
+#define for_each_memory_region(r__, fd__) for (struct gem_memory_region *r__ = __gem_get_memory_regions(fd__); r__; r__ = __gem_next_memory_region(r__))
+
+#endif /* GEM_MEMORY_TOPOLOGY_H */
diff --git a/lib/meson.build b/lib/meson.build
index 3e43316d1..6b369d5bb 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -5,6 +5,7 @@ lib_sources = [
 	'i915/gem_context.c',
 	'i915/gem_create.c',
 	'i915/gem_engine_topology.c',
+	'i915/gem_memory_topology.c',
 	'i915/gem_scheduler.c',
 	'i915/gem_submission.c',
 	'i915/gem_ring.c',
diff --git a/tests/i915/gem_eio.c b/tests/i915/gem_eio.c
index 3d094433b..898636406 100644
--- a/tests/i915/gem_eio.c
+++ b/tests/i915/gem_eio.c
@@ -44,6 +44,7 @@
 
 #include "i915/gem.h"
 #include "i915/gem_create.h"
+#include "i915/gem_memory_topology.h"
 #include "i915/gem_ring.h"
 #include "igt.h"
 #include "igt_device.h"
@@ -122,6 +123,39 @@ static void test_throttle(int fd)
 	trigger_reset(fd);
 }
 
+static void test_create(int fd)
+{
+	wedge_gpu(fd);
+
+	gem_close(fd, gem_create(fd, 4096));
+
+	trigger_reset(fd);
+}
+
+static void test_create_ext(int fd)
+{
+	wedge_gpu(fd);
+
+	for_each_memory_region(r, fd) {
+		uint64_t size = 4096;
+		uint32_t handle;
+
+		igt_debug("Creating object in %s\n", r->name);
+		igt_assert_eq(__gem_create_in_memory_region_list(fd,
+								 &handle,
+								 &size,
+								 &r->ci, 1),
+			      0);
+
+		gem_read(fd, handle, size/2, &size, sizeof(size));
+		igt_assert_eq_u64(size, 0);
+
+		gem_close(fd, handle);
+	}
+
+	trigger_reset(fd);
+}
+
 static void test_context_create(int fd)
 {
 	uint32_t ctx;
@@ -997,6 +1031,12 @@ igt_main
 	igt_subtest("throttle")
 		test_throttle(fd);
 
+	igt_subtest("create")
+		test_create(fd);
+
+	igt_subtest("create-ext")
+		test_create_ext(fd);
+
 	igt_subtest("context-create")
 		test_context_create(fd);
 
-- 
2.26.2

  reply	other threads:[~2022-03-03 14:06 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-03 14:06 [igt-dev] [PATCH i-g-t 0/2] Add placement to gem_exec_stress Anshuman Gupta
2022-03-03 14:06 ` Anshuman Gupta [this message]
2022-03-05  6:30   ` [igt-dev] [PATCH i-g-t 1/2] i915/gem_eio: Exercise object creation while wedged Dixit, Ashutosh
2022-03-07  8:02     ` Zbigniew Kempczyński
2022-03-08  3:18       ` Dixit, Ashutosh
2022-03-03 14:06 ` [igt-dev] [PATCH i-g-t 2/2] i915_pm_rpm: Add placement to gem_exec_stress Anshuman Gupta
2022-03-03 16:18 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
2022-03-04  2:24 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220303140636.26652-2-anshuman.gupta@intel.com \
    --to=anshuman.gupta@intel.com \
    --cc=chris.p.wilson@intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=cq.tang@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox