Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp4628209pxb; Tue, 31 Aug 2021 09:28:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwHdsrwSjInfwJQGx/DIUsYUEwaHo0JDR5bLy9mvpL6Frr9IVYfEuwo0FFkp77AH9/1fg+Y X-Received: by 2002:a17:906:3157:: with SMTP id e23mr32313385eje.29.1630427303144; Tue, 31 Aug 2021 09:28:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630427303; cv=none; d=google.com; s=arc-20160816; b=kdGCWdLLKUfnP1FCzRJTGEfi8VxiRqmDtOtY8shiYnZ/JJtL3HEJC6z6MdNv2WiI5e onBGtkT+QzvDz3wXoA4RX99NeY4Txzyu0dOkrU2cKefPZAZvkvq79VDuqIqW6GKd6fTl UhKDdcMfVMTmhrZHIYuLCUOt/4jm2uCZolgwhqYldcmoOzu+63dKHCNQ5HA6cbz6vNAT d8+NBEqmRMaDsqzCNFyh+tqGKTwBdRpU3iL+owco7E76hHP4jluxQutDZ4yc829m5LTj m+YbTacIs3xrSh8u3Rawu+E09zwycTIvP3WXeV0TQprLPN2vuP03CRdJZQhtMD2DHJAp SuPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=zotjyXLlcdms7gTjQNtg68mhWk0ZwEFI++HLCJ2jDto=; b=VlboQdnHmUK7wHeLhKHsHurXDPgGOxp7OnNOM+pm6CYca+e0CzFbRhLzHXAsleutCR BQBrBAu5JTb/EQm6y+arYMK3m5g7IFtpJ4go29UUqaRCIuqlsDj4VKmb35O9g+HSc4pB FCJqvzZ71EkyevzKZ6CtyofORP7L9/hzFSsCZ+WHIWf8DzBjZuw8QeMnTHDMOsEJjELG JWNUjDEXf0ZtZhiC0sXsLwM9TybY/6+Ltrn4OfGYhKNtStVNEViy063////Sg4+RpAni btPg7lc67XgLN3XJkqwXeGWShvwxuxI2YhGWLXJqxwluBEwAdr9stwGZODI3qaVDTywE 0HKg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m4si2305630edi.38.2021.08.31.09.27.58; Tue, 31 Aug 2021 09:28:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240015AbhHaQZJ (ORCPT + 99 others); Tue, 31 Aug 2021 12:25:09 -0400 Received: from foss.arm.com ([217.140.110.172]:56386 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239964AbhHaQZI (ORCPT ); Tue, 31 Aug 2021 12:25:08 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 359606D; Tue, 31 Aug 2021 09:24:13 -0700 (PDT) Received: from [192.168.0.14] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 118043F766; Tue, 31 Aug 2021 09:24:10 -0700 (PDT) Subject: Re: [PATCH v1 05/20] x86/resctrl: Create mba_sc configuration in the rdt_domain To: Jamie Iles Cc: x86@kernel.org, linux-kernel@vger.kernel.org, Fenghua Yu , Reinette Chatre , Thomas Gleixner , Ingo Molnar , Borislav Petkov , H Peter Anvin , Babu Moger , shameerali.kolothum.thodi@huawei.com, D Scott Phillips OS , lcherian@marvell.com, bobo.shaobowang@huawei.com References: <20210729223610.29373-1-james.morse@arm.com> <20210729223610.29373-6-james.morse@arm.com> From: James Morse Message-ID: <10e2bb45-30a8-a7ce-7005-f12b594b991d@arm.com> Date: Tue, 31 Aug 2021 17:24:09 +0100 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jamie, On 11/08/2021 17:32, Jamie Iles wrote: > On Thu, Jul 29, 2021 at 10:35:55PM +0000, James Morse wrote: >> To support resctrl's MBA software controller, the architecture must provide >> a second configuration array to hold the mbps_val from user-space. >> >> This complicates the interface between the architecture code. >> >> Make the filesystem parts of resctrl create an array for the mba_sc >> values when the struct resctrl_schema is created. The software controller >> can be changed to use this, allowing the architecture code to only >> consider the values configured in hardware. >> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> index cf0db0b7a5d0..185f9bb992d1 100644 >> --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> @@ -2030,6 +2030,60 @@ static int mkdir_mondata_all(struct kernfs_node *parent_kn, >> struct rdtgroup *prgrp, >> struct kernfs_node **mon_data_kn); >> >> +static int mba_sc_domain_allocate(struct rdt_resource *res, >> + struct rdt_domain *d) >> +{ >> + u32 num_closid = closid_free_map_len; >> + int cpu = cpumask_any(&d->cpu_mask); >> + int i; >> + >> + d->mba_sc = kcalloc_node(num_closid, sizeof(*d->mba_sc), >> + GFP_KERNEL, cpu_to_node(cpu)); >> + if (!d->mba_sc) >> + return -ENOMEM; > > If a CPU was hotplugged before resctrl is mounted then isn't it possible > for this to already be allocated? I might be misunderstanding the flows > here though... Yeah, its tortuous. All this is behind an is_mba_sc(r), check, which can only return true while the filesystem is mounted. cpus_read_lock() is what ensures the mount-time setup doesn't race with the hotplug callbacks. >> + for (i = 0; i < num_closid; i++) >> + d->mba_sc[i].mbps_val = MBA_MAX_MBPS; >> + >> + return 0; >> +} >> + >> +static int mba_sc_allocate(struct rdt_resource *r) >> +{ >> + struct rdt_domain *d; >> + int ret; >> + >> + lockdep_assert_cpus_held(); >> + >> + if (!is_mba_sc(r)) >> + return 0; >> + >> + list_for_each_entry(d, &r->domains, list) { >> + ret = mba_sc_domain_allocate(r, d); >> + if (ret) >> + break; >> + } >> + >> + return ret; >> +} >> @@ -3287,6 +3353,9 @@ static int domain_setup_mon_state(struct rdt_resource *r, struct rdt_domain *d) >> } >> } >> >> + if (is_mba_sc(r)) >> + mba_sc_domain_allocate(r, d); > > This looks to be missing an error check. Fixed, thanks. James