Index | Thread | Search

From:
kisekinopureya <kisekinopureya@disroot.org>
Subject:
[PATCH 2/4] unstub intel_slicemask_from_xehp_dssmask
To:
tech@openbsd.org
Date:
Thu, 10 Sep 2026 22:13:50 +0300

Download raw body.

Thread
sys/dev/pci/drm/i915/gt/intel_sseu.c | 30 ++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/sys/dev/pci/drm/i915/gt/intel_sseu.c b/sys/dev/pci/drm/i915/gt/intel_sseu.c
index 9b53e6a61f4..21c964a9f89 100644
--- a/sys/dev/pci/drm/i915/gt/intel_sseu.c
+++ b/sys/dev/pci/drm/i915/gt/intel_sseu.c
@@ -871,13 +871,10 @@ void intel_sseu_print_ss_info(const char *type,
u16 intel_slicemask_from_xehp_dssmask(intel_sseu_ss_mask_t dss_mask,
				      int dss_per_slice)
{
-	STUB();
-	return 0;
-#ifdef notyet
	intel_sseu_ss_mask_t per_slice_mask = {};
	unsigned long slice_mask = 0;
	int i;
-
+#ifdef __linux__
	WARN_ON(DIV_ROUND_UP(XEHP_BITMAP_BITS(dss_mask), dss_per_slice) >
		8 * sizeof(slice_mask));

@@ -889,7 +886,32 @@ u16 intel_slicemask_from_xehp_dssmask(intel_sseu_ss_mask_t dss_mask,
		bitmap_shift_right(dss_mask.xehp, dss_mask.xehp, dss_per_slice,
				   XEHP_BITMAP_BITS(dss_mask));
	}
+#else
+    int bit, total_bits;
+
+    total_bits = XEHP_BITMAP_BITS(dss_mask);
+
+    WARN_ON(DIV_ROUND_UP(total_bits, dss_per_slice) > 8 * sizeof(slice_mask));
+
+    memset(&per_slice_mask, 0, sizeof(per_slice_mask));
+    for (bit = 0; bit < dss_per_slice && bit < total_bits; bit++)
+        per_slice_mask.xehp[bit / 32] |= (1U << (bit % 32));
+
+    for (i = 0; i < total_bits; i += dss_per_slice) {
+        int j, has_dss = 0;
+
+        for (j = 0; j < dss_per_slice && (i + j) < total_bits; j++) {
+            int idx = (i + j) / 32;
+            int pos = (i + j) % 32;
+            if (dss_mask.xehp[idx] & (1U << pos)) {
+                has_dss = 1;
+                break;
+            }
+        }

+        if (has_dss)
+            slice_mask |= (1UL << (i / dss_per_slice));
+    }
	return slice_mask;
#endif
}