All of 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.