From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C63E1D78765 for ; Thu, 21 Nov 2024 14:19:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 621D610E972; Thu, 21 Nov 2024 14:19:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="HSc2ZnFA"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2A7010E972 for ; Thu, 21 Nov 2024 14:19:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1732198752; x=1763734752; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mtqpbU1lGLAnNlczIbzIkdAeskOPDigg2DFZPOVjs20=; b=HSc2ZnFAqk+0/8Z71TmQpCC0ZR6Zez18HgjjVpxrbiuGGl9YecsMmeGR kX3+JUTLATkeZkCbtds76AVQ4PMuANSSU1ZF7EbBXqbOaruwmcDX75mDO 6313LrotJiO/XvbprRLzAQOj6lnXfXgcOy3cmogoVYqXfihpeThTjFW22 c8oanDsiD5TZRvpr+tjvsKgKeCradhVVTpyqFvTprE9296dymNSauLB4F J4gDvaCfcIftVsLupgOJ9Mzt1iiJleHRCBFlZ7Uyz1br8GuZO3pVHL0fW hZdtGDQJf7ljsY9SAbF50PLKGibIuKiX6YJ4r+1O+tvMPVvB1moSoauHY w==; X-CSE-ConnectionGUID: D9tJzyv2SUullfcplyWFQw== X-CSE-MsgGUID: EvUSqI2dS3G0PdZlR/qU0w== X-IronPort-AV: E=McAfee;i="6700,10204,11263"; a="32449615" X-IronPort-AV: E=Sophos;i="6.12,173,1728975600"; d="scan'208";a="32449615" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2024 06:19:12 -0800 X-CSE-ConnectionGUID: 27KGguBZSdqFm6+In5ggJw== X-CSE-MsgGUID: v3OsMHY6QWyu97lsppINiw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,173,1728975600"; d="scan'208";a="127788760" Received: from mbernato-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.98.7]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2024 06:19:09 -0800 From: Marcin Bernatowicz To: igt-dev@lists.freedesktop.org Cc: kamil.konieczny@linux.intel.com, adam.miszczak@linux.intel.com, jakub1.kolakowski@intel.com, lukasz.laguna@intel.com, michal.wajdeczko@intel.com, michal.winiarski@intel.com, narasimha.c.v@intel.com, piotr.piorkowski@intel.com, satyanarayana.k.v.p@intel.com, tomasz.lis@intel.com, Marcin Bernatowicz Subject: [PATCH v3 i-g-t 2/4] lib/xe/xe_sriov_provisioning: Refactor range handling and logging Date: Thu, 21 Nov 2024 15:18:49 +0100 Message-Id: <20241121141851.631877-3-marcin.bernatowicz@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20241121141851.631877-1-marcin.bernatowicz@linux.intel.com> References: <20241121141851.631877-1-marcin.bernatowicz@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" Introduce an append_range helper to reduce code duplication in handling provisioned PTE ranges. Limit debug logs to the first 70 entries for clarity and improved reasoning. Enhance error handling by propagating realloc failures. Signed-off-by: Marcin Bernatowicz Reviewed-by: Lukasz Laguna Cc: Adam Miszczak Cc: C V Narasimha Cc: Jakub Kolakowski Cc: K V P Satyanarayana Cc: Lukasz Laguna Cc: Michał Wajdeczko Cc: Michał Winiarski Cc: Piotr Piórkowski Cc: Tomasz Lis --- lib/xe/xe_sriov_provisioning.c | 71 ++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/lib/xe/xe_sriov_provisioning.c b/lib/xe/xe_sriov_provisioning.c index 7cde2c240..d448a53d8 100644 --- a/lib/xe/xe_sriov_provisioning.c +++ b/lib/xe/xe_sriov_provisioning.c @@ -3,7 +3,7 @@ * Copyright(c) 2024 Intel Corporation. All rights reserved. */ -#include +#include #include "igt_core.h" #include "intel_chipset.h" @@ -48,6 +48,37 @@ static uint64_t get_vfid_mask(int fd) GGTT_PTE_VFID_MASK : PRE_1250_IP_VER_GGTT_PTE_VFID_MASK; } +#define MAX_DEBUG_ENTRIES 70 + +static int append_range(struct xe_sriov_provisioned_range **ranges, + unsigned int *nr_ranges, unsigned int vf_id, + uint32_t start, uint32_t end) +{ + struct xe_sriov_provisioned_range *new_ranges; + + new_ranges = realloc(*ranges, + (*nr_ranges + 1) * sizeof(struct xe_sriov_provisioned_range)); + if (!new_ranges) { + free(*ranges); + *ranges = NULL; + *nr_ranges = 0; + return -ENOMEM; + } + + *ranges = new_ranges; + if (*nr_ranges < MAX_DEBUG_ENTRIES) + igt_debug("Found VF%u GGTT range [%#x-%#x] num_ptes=%ld\n", + vf_id, start, end, + (end - start + sizeof(xe_ggtt_pte_t)) / + sizeof(xe_ggtt_pte_t)); + (*ranges)[*nr_ranges].vf_id = vf_id; + (*ranges)[*nr_ranges].start = start; + (*ranges)[*nr_ranges].end = end; + (*nr_ranges)++; + + return 0; +} + /** * xe_sriov_find_ggtt_provisioned_pte_offsets - Find GGTT provisioned PTE offsets * @pf_fd: File descriptor for the Physical Function @@ -76,6 +107,7 @@ int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio uint32_t current_start = 0; uint32_t current_end = 0; xe_ggtt_pte_t pte; + int ret; *ranges = NULL; *nr_ranges = 0; @@ -86,18 +118,11 @@ int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio if (vf_id != current_vf_id) { if (current_vf_id != -1) { - /* End the current range */ - *ranges = realloc(*ranges, (*nr_ranges + 1) * - sizeof(struct xe_sriov_provisioned_range)); - igt_assert(*ranges); - igt_debug("Found VF%u ggtt range [%#x-%#x] num_ptes=%ld\n", - current_vf_id, current_start, current_end, - (current_end - current_start + sizeof(xe_ggtt_pte_t)) / - sizeof(xe_ggtt_pte_t)); - (*ranges)[*nr_ranges].vf_id = current_vf_id; - (*ranges)[*nr_ranges].start = current_start; - (*ranges)[*nr_ranges].end = current_end; - (*nr_ranges)++; + /* End the current range and append it */ + ret = append_range(ranges, nr_ranges, current_vf_id, + current_start, current_end); + if (ret < 0) + return ret; } /* Start a new range */ current_vf_id = vf_id; @@ -107,18 +132,16 @@ int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio } if (current_vf_id != -1) { - *ranges = realloc(*ranges, (*nr_ranges + 1) * - sizeof(struct xe_sriov_provisioned_range)); - igt_assert(*ranges); - igt_debug("Found VF%u ggtt range [%#x-%#x] num_ptes=%ld\n", - current_vf_id, current_start, current_end, - (current_end - current_start + sizeof(xe_ggtt_pte_t)) / - sizeof(xe_ggtt_pte_t)); - (*ranges)[*nr_ranges].vf_id = current_vf_id; - (*ranges)[*nr_ranges].start = current_start; - (*ranges)[*nr_ranges].end = current_end; - (*nr_ranges)++; + /* Append the last range */ + ret = append_range(ranges, nr_ranges, current_vf_id, + current_start, current_end); + if (ret < 0) + return ret; } + if (*nr_ranges > MAX_DEBUG_ENTRIES) + igt_debug("Ranges output trimmed to first %u entries out of %u\n", + MAX_DEBUG_ENTRIES, *nr_ranges); + return 0; } -- 2.31.1