From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B59EA319871 for ; Mon, 19 Jan 2026 11:57:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768823876; cv=none; b=kUl7/AY+WrUbYhz8xunfUdWNweHHCYnEhguaKirVGbjVogMXgKZUBIzz+d8b7a0MAF8MssiFmwXOsHgibQR331tGvcfkon0BVzcZR+IGBIeTThOMoaCMlnA/imFcRPdex3puVu4cy5CvT6hJbIyNYLekyLCalUcjFOvz8ak6bTM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768823876; c=relaxed/simple; bh=ulblgWSOXF2tXA6mcL0yllRppHmqyzbHPQK0iYUeQZY=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=GkIuYCK7gNEo+qNI0ZjbHaP5jUZawfU3qgDiUyESDIHeRf2VTevFPqgoJwv01wjGPfNwXOCPg9WPBfhHqudVoqYL6+N9CJkk1VxO+B9897srm6ufl1pEBd/ItACuozz+VXYg1VJQOaphoUkIgtmiJIvVUgvjJXJ8/zrM4LM7Mqg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=CWEKlQPP; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=C3QJAR8s; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="CWEKlQPP"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="C3QJAR8s" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1768823873; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+9IZpZgGUVeogte82A4ejnIOQXjpIY+s125+5iF6akQ=; b=CWEKlQPPMNXO3vJLXCOc6pGq1Nid1nyuix338NXlcwkaUTnj+c4mYpci9pdXZziD5c7vKT kgLvNdixZpw5ovxERTr9xR7Q+qbbPFD4HzxJDm0HyN6QbraKZH6OZTGCs0t0dJzdi5FYyB QQ/EqGTu1kRNng5Ag8PiZDIarVvOLxs= Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-572-1PunJSFpPC2uQAmKZpiDCA-1; Mon, 19 Jan 2026 06:57:52 -0500 X-MC-Unique: 1PunJSFpPC2uQAmKZpiDCA-1 X-Mimecast-MFC-AGG-ID: 1PunJSFpPC2uQAmKZpiDCA_1768823872 Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-b609c0f6522so7790041a12.3 for ; Mon, 19 Jan 2026 03:57:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1768823871; x=1769428671; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=+9IZpZgGUVeogte82A4ejnIOQXjpIY+s125+5iF6akQ=; b=C3QJAR8sUEI3Ir01Avd7W6+j8snZy6BwikSzpeivyVmSzoZOdOnmSQmR0Kb82+qqy0 bD/etv4MWaFELLP4ATm6ChA5TsBDa5zYJMXqILMCONEuuXxPqTit18+B/4tIfAjVgZI6 a4CA7KkC68O4hD0rEyYbBIumtpDLyXSaSQtW01RpMLMWwWdUkl/oP/mnTaENe3zRZGqO MCm7+5So1OGwEO2AKgvfwViHnTRm8iyz3sdoYsuxttQvpjADydN8N0pApLxJkEWFAZ8J rMVVZc8C3M0mKugMqOre/zBaPdwwqms0B2EMxw3G+KJ+r4b4BWgx+B18YPJy7HkOVHJi 7CzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768823871; x=1769428671; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+9IZpZgGUVeogte82A4ejnIOQXjpIY+s125+5iF6akQ=; b=fe+MmraHBEJoLfA3evSHC5oVB+xUniT3+4jppUj4sWS4e+NCJBEDPnYOzi3PV+M5g6 JIoUoUwYj0uAcOg7VB2ZDjY0LN7/4E6boU4bmhR7CUqAnK/WG8rwZuRUWbx+9HgDU1Ju BHNum2I+Vd1F3l3xeB6vpS1+zgP1PpG9Wyd7SvrRN4zpcD9nOBVvZCNDxjM/RXLwzza7 z6gD3LDQWWDqz/8Tas26LHlVnNgbtR/7iuP+53a4mMur4/NfoeZnE5vZbKuD53JgSp/t GavPNODI58U2+hce1FuhDj0uIgTQlS7O/o/DyHkkj7anPOJgw+UAT6+sVkngOSjXjFRw shOg== X-Forwarded-Encrypted: i=1; AJvYcCXsPCdY7EMxm9/pEfuJygymJPzGLp3h6I85rwjJgaClneXNRvkAP0yGbOxrvGh6JKiuhPj441Xt/h3gh5Y=@vger.kernel.org X-Gm-Message-State: AOJu0YzGnQkgCjdxCxwNe2NANMA4kln+sbFQPRj88OeGCwZ9nGuhuzeA /JAhqkZ3fMsNBjxdMY/soI1A8NPJiqLa9rnBwpFMZidiOI+IFSM6WJD7jK84De7/t6sqrla6pl6 bgndvdYcOOG7nngrst8b2NPeki5ob/RKHcZnKwfxehH9tdQQbROutJi+OQqmmX5sfUw== X-Gm-Gg: AY/fxX5enx+ePjf7Nl+0iZ7TXCuNRNAkMSAStXYazGa3zepufF1RiO/2Mjx98xs6prQ oxUuFdlP17EcP9cwk8fHfxexkLPJV8OFwX+E2yayi8v46KF4IPxKOgCDaC2+iU5Br6AVXvwIyo1 i5N6RITUIMD29RGxPEmC7KyurmnJBwDS+W96so3NCj6zdp1kphj7XJUtB8TlT+TtwmBK9bzaY4w Iiof8fUI/89Lx1WdzdSnmjLy65cyXAcLngDUuM0/91Awaxr8EbKvMgrWrie4UVTHW21IFaiIRo6 sy9ZBgJ2vPweQgvfNXJGzlo7Tt9ilACB4ply/ZA+epXsUIPEQeCCIMkwntacWLhFtJ9Bx64V28h F9kwFeEEdDfI= X-Received: by 2002:a05:6a00:6b92:10b0:81f:a860:d665 with SMTP id d2e1a72fcca58-81fa860d831mr6529804b3a.66.1768823871547; Mon, 19 Jan 2026 03:57:51 -0800 (PST) X-Received: by 2002:a05:6a00:6b92:10b0:81f:a860:d665 with SMTP id d2e1a72fcca58-81fa860d831mr6529784b3a.66.1768823871172; Mon, 19 Jan 2026 03:57:51 -0800 (PST) Received: from [10.72.112.128] ([209.132.188.88]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81fa12b51d9sm9100204b3a.65.2026.01.19.03.57.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 19 Jan 2026 03:57:50 -0800 (PST) Message-ID: <5e20890a-f1f0-4a54-894b-a0e170a8a5f8@redhat.com> Date: Mon, 19 Jan 2026 19:57:38 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 30/47] arm_mpam: resctrl: Pre-allocate free running monitors To: Ben Horgan Cc: amitsinght@marvell.com, baisheng.gao@unisoc.com, baolin.wang@linux.alibaba.com, carl@os.amperecomputing.com, dave.martin@arm.com, david@kernel.org, dfustini@baylibre.com, fenghuay@nvidia.com, james.morse@arm.com, jonathan.cameron@huawei.com, kobak@nvidia.com, lcherian@marvell.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, peternewman@google.com, punit.agrawal@oss.qualcomm.com, quic_jiles@quicinc.com, reinette.chatre@intel.com, rohit.mathew@arm.com, scott@os.amperecomputing.com, sdonthineni@nvidia.com, tan.shaopeng@fujitsu.com, xhao@linux.alibaba.com, catalin.marinas@arm.com, will@kernel.org, corbet@lwn.net, maz@kernel.org, oupton@kernel.org, joey.gouly@arm.com, suzuki.poulose@arm.com, kvmarm@lists.linux.dev References: <20260112165914.4086692-1-ben.horgan@arm.com> <20260112165914.4086692-31-ben.horgan@arm.com> Content-Language: en-US From: Gavin Shan In-Reply-To: <20260112165914.4086692-31-ben.horgan@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Ben, On 1/13/26 12:58 AM, Ben Horgan wrote: > From: James Morse > > When there are enough monitors, the resctrl mbm local and total files can > be exposed. These need all the monitors that resctrl may use to be > allocated up front. > > Add helpers to do this. > > If a different candidate class is discovered, the old array should be > free'd and the allocated monitors returned to the driver. > > Signed-off-by: James Morse > Signed-off-by: Ben Horgan > --- > Changes since v2: > Code flow tidying (Jonathan) > --- > drivers/resctrl/mpam_internal.h | 8 +++- > drivers/resctrl/mpam_resctrl.c | 81 ++++++++++++++++++++++++++++++++- > 2 files changed, 86 insertions(+), 3 deletions(-) > > diff --git a/drivers/resctrl/mpam_internal.h b/drivers/resctrl/mpam_internal.h > index 1c5492008fe8..89f9d374ded0 100644 > --- a/drivers/resctrl/mpam_internal.h > +++ b/drivers/resctrl/mpam_internal.h > @@ -360,7 +360,13 @@ struct mpam_resctrl_res { > struct mpam_resctrl_mon { > struct mpam_class *class; > > - /* per-class data that resctrl needs will live here */ > + /* > + * Array of allocated MBWU monitors, indexed by (closid, rmid). > + * When ABMC is not in use, this array directly maps (closid, rmid) > + * to the allocated monitor. Otherwise this array is sparse, and > + * un-assigned (closid, rmid) are -1. > + */ > + int *mbwu_idx_to_mon; > }; > > static inline int mpam_alloc_csu_mon(struct mpam_class *class) > diff --git a/drivers/resctrl/mpam_resctrl.c b/drivers/resctrl/mpam_resctrl.c > index 14a8dcaf1366..3af12ad77fba 100644 > --- a/drivers/resctrl/mpam_resctrl.c > +++ b/drivers/resctrl/mpam_resctrl.c > @@ -572,10 +572,58 @@ static void mpam_resctrl_pick_mba(void) > } > } > > +static void __free_mbwu_mon(struct mpam_class *class, int *array, > + u16 num_mbwu_mon) > +{ > + for (int i = 0; i < num_mbwu_mon; i++) { > + if (array[i] < 0) > + continue; > + > + mpam_free_mbwu_mon(class, array[i]); > + array[i] = ~0; > + } > +} > + > +static int __alloc_mbwu_mon(struct mpam_class *class, int *array, > + u16 num_mbwu_mon) > +{ > + for (int i = 0; i < num_mbwu_mon; i++) { > + int mbwu_mon = mpam_alloc_mbwu_mon(class); > + > + if (mbwu_mon < 0) { > + __free_mbwu_mon(class, array, num_mbwu_mon); > + return mbwu_mon; > + } > + array[i] = mbwu_mon; > + } > + > + return 0; > +} > + > +static int *__alloc_mbwu_array(struct mpam_class *class, u16 num_mbwu_mon) > +{ > + int err; > + size_t array_size = num_mbwu_mon * sizeof(int); > + int *array __free(kfree) = kmalloc(array_size, GFP_KERNEL); > + A warning reported by checkpatch.pl as below. WARNING: Missing a blank line after declarations #84: FILE: drivers/resctrl/mpam_resctrl.c:607: + size_t array_size = num_mbwu_mon * sizeof(int); + int *array __free(kfree) = kmalloc(array_size, GFP_KERNEL); > + if (!array) > + return ERR_PTR(-ENOMEM); > + > + memset(array, -1, array_size); > + > + err = __alloc_mbwu_mon(class, array, num_mbwu_mon); > + if (err) > + return ERR_PTR(err); > + return_ptr(array); > +} > + > static void counter_update_class(enum resctrl_event_id evt_id, > struct mpam_class *class) > { > - struct mpam_class *existing_class = mpam_resctrl_counters[evt_id].class; > + struct mpam_resctrl_mon *mon = &mpam_resctrl_counters[evt_id]; > + struct mpam_class *existing_class = mon->class; > + u16 num_mbwu_mon = class->props.num_mbwu_mon; > + int *new_array, *existing_array = mon->mbwu_idx_to_mon; > > if (existing_class) { > if (class->level == 3) { > @@ -590,8 +638,37 @@ static void counter_update_class(enum resctrl_event_id evt_id, > } > } > > - mpam_resctrl_counters[evt_id].class = class; > + pr_debug("Updating event %u to use class %u\n", evt_id, class->level); > + > + /* Might not need all the monitors */ > + num_mbwu_mon = __mpam_monitors_free_running(num_mbwu_mon); > + > + if ((evt_id != QOS_L3_OCCUP_EVENT_ID) && num_mbwu_mon) { > + /* > + * This is the pre-allocated free-running monitors path. It always > + * allocates one monitor per PARTID * PMG. > + */ > + WARN_ON_ONCE(num_mbwu_mon != resctrl_arch_system_num_rmid_idx()); > + > + new_array = __alloc_mbwu_array(class, num_mbwu_mon); > + if (IS_ERR(new_array)) { > + pr_debug("Failed to allocate MBWU array\n"); > + return; > + } > + mon->mbwu_idx_to_mon = new_array; > + > + if (existing_array) { > + pr_debug("Releasing previous class %u's monitors\n", > + existing_class->level); > + __free_mbwu_mon(existing_class, existing_array, num_mbwu_mon); > + kfree(existing_array); > + } > + } else if (evt_id != QOS_L3_OCCUP_EVENT_ID) { > + pr_debug("Not pre-allocating free-running counters\n"); > + } > + > exposed_mon_capable = true; > + mon->class = class; > } > > static void mpam_resctrl_pick_counters(void) Thanks, Gavin