From: kisekinopureya Subject: [PATCH 2/4] unstub intel_slicemask_from_xehp_dssmask To: tech@openbsd.org Date: Thu, 10 Sep 2026 22:13:50 +0300 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 }