From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DBDBC44CAC1; Tue, 4 Aug 2026 10:07:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785838032; cv=none; b=Sq8/tFaIE21sJBJmPFmaEHX/rwhOk0mBwEpLP/xNvKdz0RKh9Umv/bs6PmxcyAWs7qrdipLAhqFod+3t1C5xf45k/0D9hK1CL/CONuGUbCJVINtVBiGoy7mtZhHuPXT4I5E98g5LnbsqZJK2ceCsmkE9ZILVSsWpq/3vxKmAhhk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785838032; c=relaxed/simple; bh=IrAabJ6JThWEAMHfl31ElAR7g6NxxKq89ExRaZ4kLD8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lg/mNPQkPgHIrGzS82+YTJThqM8YN1iR5h5VbpnEoAWL2in34YPv89y98SqQ0DxD28b5nyL1I0zuxgujtPYsiet2WApPrqUvDuVNTiSfGpsjqQMh23qqtjQPIxHINZBTZYVRUceYN4O/q2et/CN+yIhrtgYhoilyFiEeVS6jCgo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=n/JXzfLm; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="n/JXzfLm" 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 227EA168F; Tue, 4 Aug 2026 03:07:06 -0700 (PDT) Received: from e142021.fritz.box (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6A6223F86F; Tue, 4 Aug 2026 03:07:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1785838030; bh=IrAabJ6JThWEAMHfl31ElAR7g6NxxKq89ExRaZ4kLD8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=n/JXzfLmZ4I22qvhsUqOtJLDGmO5FFXmBmXOP3AaqxMBsDUJHtjmkmfENqEuoVhmn GmiNCZtKdQRCMOfKrhSiT02q3mzwlFcGCQOqbLPkwrqvQbe0569TiyHlirrjAkcw8N hjQ/NKayPoFNNcZhHWwGoRxZGLK7psr5QPiJ5mF0= From: Andre Przywara To: Lorenzo Pieralisi , Hanjun Guo , Sudeep Holla , Catalin Marinas , Will Deacon , "Rafael J . Wysocki" , Len Brown , James Morse , Ben Horgan , Reinette Chatre , Fenghua Yu Cc: Jonathan Cameron , Srivathsa L Rao , Ganapatrao Kulkarni , Trilok Soni , Srinivas Ramana , Niyas Sait , Lee Trager , Ritwick Sharma , Gavin Shan , linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v8 05/11] arm_mpam: propagate MSC access errors for __ris_msmon_read() Date: Tue, 4 Aug 2026 12:06:21 +0200 Message-ID: <20260804100627.3217149-6-andre.przywara@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260804100627.3217149-1-andre.przywara@arm.com> References: <20260804100627.3217149-1-andre.przywara@arm.com> Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Allow the function for RIS accesses to return an error, and propagate read and write errors from the lower level up. This function is a bit special, since it can be called via an SMP helper, so the prototype must stay as void. So propagate any errors using the "err" field in the struct passed in as the sole argument to that function. Signed-off-by: Andre Przywara Reviewed-by: Jonathan Cameron Reviewed-by: Ben Horgan Reviewed-by: Gavin Shan Tested-by: Gavin Shan # on NVIDIA Grace Hopper --- drivers/resctrl/mpam_devices.c | 36 +++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c index 9d9f0c635527..fade30f0bcee 100644 --- a/drivers/resctrl/mpam_devices.c +++ b/drivers/resctrl/mpam_devices.c @@ -1333,6 +1333,10 @@ static u64 mpam_msmon_overflow_val(enum mpam_device_features type, return overflow_val; } +/* + * This function might be called via smp_call_function_any(), so propagate + * errors inside the arg struct. + */ static void __ris_msmon_read(void *arg) { u64 now; @@ -1356,7 +1360,9 @@ static void __ris_msmon_read(void *arg) mon_sel = FIELD_PREP(MSMON_CFG_MON_SEL_MON_SEL, ctx->mon) | FIELD_PREP(MSMON_CFG_MON_SEL_RIS, ris->ris_idx); - mpam_write_monsel_reg(msc, CFG_MON_SEL, mon_sel); + m->err = mpam_write_monsel_reg(msc, CFG_MON_SEL, mon_sel); + if (m->err) + return; switch (m->type) { case mpam_feat_msmon_mbwu_31counter: @@ -1376,7 +1382,9 @@ static void __ris_msmon_read(void *arg) * Read the existing configuration to avoid re-writing the same values. * This saves waiting for 'nrdy' on subsequent reads. */ - read_msmon_ctl_flt_vals(m, &cur_ctl, &cur_flt); + m->err = read_msmon_ctl_flt_vals(m, &cur_ctl, &cur_flt); + if (m->err) + return; if (mpam_feat_msmon_mbwu_31counter == m->type) overflow = cur_ctl & MSMON_CFG_x_CTL_OFLOW_STATUS; @@ -1390,18 +1398,24 @@ static void __ris_msmon_read(void *arg) cur_ctl != (ctl_val | MSMON_CFG_x_CTL_EN); if (config_mismatch || reset_on_next_read) { - write_msmon_ctl_flt_vals(m, ctl_val, flt_val); + m->err = write_msmon_ctl_flt_vals(m, ctl_val, flt_val); + if (m->err) + return; overflow = false; } else if (overflow) { - mpam_write_monsel_reg(msc, CFG_MBWU_CTL, - cur_ctl & - ~(MSMON_CFG_x_CTL_OFLOW_STATUS | - MSMON_CFG_MBWU_CTL_OFLOW_STATUS_L)); + m->err = mpam_write_monsel_reg(msc, CFG_MBWU_CTL, + cur_ctl & + ~(MSMON_CFG_x_CTL_OFLOW_STATUS | + MSMON_CFG_MBWU_CTL_OFLOW_STATUS_L)); + if (m->err) + return; } switch (m->type) { case mpam_feat_msmon_csu: - mpam_read_monsel_reg(msc, CSU, &now32); + m->err = mpam_read_monsel_reg(msc, CSU, &now32); + if (m->err) + return; nrdy = now32 & MSMON___NRDY; now = FIELD_GET(MSMON___VALUE, now32); @@ -1423,7 +1437,9 @@ static void __ris_msmon_read(void *arg) else now = FIELD_GET(MSMON___L_VALUE, now); } else { - mpam_read_monsel_reg(msc, MBWU, &now32); + m->err = mpam_read_monsel_reg(msc, MBWU, &now32); + if (m->err) + return; nrdy = now32 & MSMON___NRDY; now = FIELD_GET(MSMON___VALUE, now32); } @@ -1792,6 +1808,8 @@ static int mpam_restore_mbwu_state(void *_ris) mwbu_arg.val = &val; __ris_msmon_read(&mwbu_arg); + if (mwbu_arg.err && mwbu_arg.err != -EBUSY) + return mwbu_arg.err; } } -- 2.43.0