From: Ben Horgan <ben.horgan@arm.com>
To: Andre Przywara <andre.przywara@arm.com>,
Lorenzo Pieralisi <lpieralisi@kernel.org>,
Hanjun Guo <guohanjun@huawei.com>,
Sudeep Holla <sudeep.holla@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Len Brown <lenb@kernel.org>, James Morse <james.morse@arm.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Fenghua Yu <fenghuay@nvidia.com>
Cc: Jonathan Cameron <jic23@kernel.org>,
Srivathsa L Rao <srivathsa.rao@oss.qualcomm.com>,
Ganapatrao Kulkarni <ganapatrao.kulkarni@oss.qualcomm.com>,
Trilok Soni <tsoni@quicinc.com>,
Srinivas Ramana <sramana@qti.qualcomm.com>,
Niyas Sait <niyas.sait@arm.com>,
linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 07/16] arm_mpam: __ris_msmon_read(): get rid of nrdy special handling
Date: Thu, 23 Jul 2026 11:20:24 +0100 [thread overview]
Message-ID: <e2db0e66-1d88-4501-a3cd-b805193fe5a9@arm.com> (raw)
In-Reply-To: <e23ce4fe-6d6d-45e2-ab8e-5ec3a52af0e0@arm.com>
Hi Andre,
On 7/23/26 10:45, Andre Przywara wrote:
> Hi Ben,
>
> On 7/20/26 18:09, Ben Horgan wrote:
>> Hi Andre,
>>
>> On 7/20/26 16:58, Andre Przywara wrote:
>>> Hi Ben,
>>>
>>> thanks for having a look!
>>>
>>> On 7/15/26 15:39, Ben Horgan wrote:
>>>> Hi Andre,
>>>>
>>>> On 7/10/26 15:45, Andre Przywara wrote:
>>>>> Although so far MSC accesses couldn't fail, there is one special
>>>>> condition that would create an error: when the MBWU counter wouldn't be
>>>>> able to read a stable value, we were setting bit 63 to mark this value
>>>>> as unstable, and return this as an error later.
>>>>> Now since the functions can return a proper error value, we can get rid of
>>>>> this kludge and use the return value directly.
>>>>>
>>>>> Remove the "nrdy" error flag variable, and assign -EBUSY to "ret" to handle
>>>>> this case.
>>>>
>>>> I don't think we want this patch. The h/w can still return (as much as it ever could) and so we
>>>> still need to handle it even if we are no longer augmenting its meaning in software to also
>>>> indicate
>>>> an unstable 64 bit value.
>>>
>>> Mmh, not sure I understand your concern: to me it looks like nrdy is some kind of error flag, that
>>> we used in absence of a proper error return value. Now we have "int ret;", so can use that directly?
>>> But to me it looks like nothing really changes, or did I miss something?
>>>
>>> I have no really strong opinion of this patch, it was more an pportunity to consolidate the crude
>>> error handling in this function. I am happy to drop it, if you like, maybe we can revisit this
>>> later.
>>
>> What I was trying to say is that mpam_msc_read_mbwu_l() could previously return a value with bit 63,
>> MSMON__L_NRDY set in two cases, one set by s/w and one set by h/w. Either when it reads that
>> directly from the hardware or when it is set in the function to indicate an unstable value. The h/w
>> case is the same for 31 bit counters too except in that case the h/w sets bit 31, MSMON_NRDY. Using
>> 'ret' to directly return -EBUSY for the s/w case where a stable value is not reached for 44 or 63
>> bit counters doesn't mean that the h/w case won't happen.
>
> I am not sure I see the problem, the idea of this patch was to use the opportunity of having now a
> proper return value, and to not hide that "nrdy" is actually an error flag. If I read the code
> correctly, then at the moment we flag the error early (using nrdy), but then continue with
> (potentially bogus?) "now" calculations, only to discard them towards the end of the function, to
> return an error when nrdy was set. So my idea was to just handle the error case early and return.
> Or do you mean I was just missing one case where NRDY was set?
I think the problem comes in patch 4 actually. Where you remove the checking for L_NRDY, which can
still be read from h/w. Both long and 31 bit counters would need to be considered for this kind of
cleanup.
>
> In any case, to not jeopardise the whole series over this rather opportunistic patch, I will just
> drop any changes to nrdy handling. This makes the remaining patches easier to understand, I guess,
> since they are now more or less schematic "if (err) return err;" changes.
>
> I think we can clean this up later if needed, in a follow up patch.
Sure.
Thanks,
Ben
>
> Thanks,
> Andre
>
>>>>>
>>>>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>>>>> ---
>>>>> drivers/resctrl/mpam_devices.c | 38 +++++++++++++++-------------------
>>>>> 1 file changed, 17 insertions(+), 21 deletions(-)
>>>>>
>>>>> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
>>>>> index 84a8715464be..530ac0fe97b5 100644
>>>>> --- a/drivers/resctrl/mpam_devices.c
>>>>> +++ b/drivers/resctrl/mpam_devices.c
>>>>> @@ -1306,7 +1306,6 @@ static void __ris_msmon_read(void *arg)
>>>>> u64 now;
>>>>> int ret;
>>>>> u32 now32;
>>>>> - bool nrdy = false;
>>>>> bool config_mismatch;
>>>>> bool overflow = false;
>>>>> struct mon_read *m = arg;
>>>>> @@ -1371,14 +1370,18 @@ static void __ris_msmon_read(void *arg)
>>>>> switch (m->type) {
>>>>> case mpam_feat_msmon_csu:
>>>>> ret = mpam_read_monsel_reg(msc, CSU, &now32);
>>>>> + if (!ret) {
>>>>> + if ((now32 & MSMON___NRDY))
>>>>> + ret = -EBUSY;
>>>>> +
>>>>> + if (mpam_has_quirk(IGNORE_CSU_NRDY, msc) &&
>>>>> + m->waited_timeout)
>>>>> + ret = 0;
>>>>> + }
>>>>> if (ret)
>>>>> goto out_unlock;
>>>>> - nrdy = now32 & MSMON___NRDY;
>>>>> - now = FIELD_GET(MSMON___VALUE, now32);
>>>>> -
>>>>> - if (mpam_has_quirk(IGNORE_CSU_NRDY, msc) && m->waited_timeout)
>>>>> - nrdy = false;
>>>>> + now = FIELD_GET(MSMON___VALUE, now32);
>>>>> break;
>>>>> case mpam_feat_msmon_mbwu_31counter:
>>>>> case mpam_feat_msmon_mbwu_44counter:
>>>>> @@ -1394,9 +1397,11 @@ static void __ris_msmon_read(void *arg)
>>>>> now = FIELD_GET(MSMON___L_VALUE, now);
>>>>> } else {
>>>>> ret = mpam_read_monsel_reg(msc, MBWU, &now32);
>>>>> + if (!ret && (now32 & MSMON___NRDY))
>>>>> + ret = -EBUSY;
>>>>> if (ret)
>>>>> goto out_unlock;
>>>>> - nrdy = now32 & MSMON___NRDY;
>>>>> +
>>>>> now = FIELD_GET(MSMON___VALUE, now32);
>>>>> }
>>>>> @@ -1404,9 +1409,6 @@ static void __ris_msmon_read(void *arg)
>>>>> m->type != mpam_feat_msmon_mbwu_63counter)
>>>>> now *= 64;
>>>>> - if (nrdy)
>>>>> - break;
>>>>> -
>>>>> mbwu_state = &ris->mbwu_state[ctx->mon];
>>>>> if (overflow)
>>>>> @@ -1419,22 +1421,16 @@ static void __ris_msmon_read(void *arg)
>>>>> now += mbwu_state->correction;
>>>>> break;
>>>>> default:
>>>>> - m->err = -EINVAL;
>>>>> + ret = -EINVAL;
>>>>> }
>>>>> - mpam_mon_sel_unlock(msc);
>>>>> -
>>>>> - if (nrdy)
>>>>> - m->err = -EBUSY;
>>>>> -
>>>>> - if (!m->err)
>>>>> - *m->val += now;
>>>>> -
>>>>> - return;
>>>>> out_unlock:
>>>>> mpam_mon_sel_unlock(msc);
>>>>> - m->err = ret;
>>>>> + if (ret)
>>>>> + m->err = ret;
>>>>> + else
>>>>> + *m->val += now;
>>>>> }
>>>>> static int _msmon_read(struct mpam_component *comp, struct mon_read *arg)
>>>>
>>>
>>
>
next prev parent reply other threads:[~2026-07-23 10:20 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 14:45 [PATCH v3 00/16] arm_mpam: Add MPAM-Fb firmware support Andre Przywara
2026-07-10 14:45 ` [PATCH v3 01/16] arm_mpam: let low level MSC read accessors return an error Andre Przywara
2026-07-10 18:11 ` Jonathan Cameron
2026-07-10 21:40 ` Andre Przywara
2026-07-15 16:01 ` Ben Horgan
2026-07-22 15:51 ` Andre Przywara
2026-07-10 14:45 ` [PATCH v3 02/16] arm_mpam: propagate MSC read errors for wrapper functions Andre Przywara
2026-07-10 18:21 ` Jonathan Cameron
2026-07-20 15:58 ` Andre Przywara
2026-07-10 14:45 ` [PATCH v3 03/16] arm_mpam: propagate MSC read errors for hw_probe functions Andre Przywara
2026-07-10 18:31 ` Jonathan Cameron
2026-07-10 14:45 ` [PATCH v3 04/16] arm_mpam: propagate MSC read errors for mpam_msc_read_mbwu_l() Andre Przywara
2026-07-10 18:40 ` Jonathan Cameron
2026-07-15 13:35 ` Ben Horgan
2026-07-10 14:45 ` [PATCH v3 05/16] arm_mpam: propagate MSC read errors for msmon helpers Andre Przywara
2026-07-10 18:44 ` Jonathan Cameron
2026-07-10 14:45 ` [PATCH v3 06/16] arm_mpam: propagate MSC read errors for __ris_msmon_read() Andre Przywara
2026-07-10 18:48 ` Jonathan Cameron
2026-07-15 19:52 ` Lee Trager
2026-07-16 8:42 ` Ben Horgan
2026-07-10 14:45 ` [PATCH v3 07/16] arm_mpam: __ris_msmon_read(): get rid of nrdy special handling Andre Przywara
2026-07-10 18:56 ` Jonathan Cameron
2026-07-20 15:57 ` Andre Przywara
2026-07-15 13:39 ` Ben Horgan
2026-07-20 15:58 ` Andre Przywara
2026-07-20 16:09 ` Ben Horgan
2026-07-23 9:45 ` Andre Przywara
2026-07-23 10:20 ` Ben Horgan [this message]
2026-07-10 14:45 ` [PATCH v3 08/16] arm_mpam: propagate MSC read errors for state saving functions Andre Przywara
2026-07-10 19:00 ` Jonathan Cameron
2026-07-20 15:57 ` Andre Przywara
2026-07-10 14:45 ` [PATCH v3 09/16] arm_mpam: let low level MSC write accessors return an error Andre Przywara
2026-07-10 19:02 ` Jonathan Cameron
2026-07-10 14:45 ` [PATCH v3 10/16] arm_mpam: propagate MSC write errors for ESR and part_sel wrappers Andre Przywara
2026-07-10 14:45 ` [PATCH v3 11/16] arm_mpam: propagate MSC write errors for hardware probe functions Andre Przywara
2026-07-10 19:04 ` Jonathan Cameron
2026-07-10 14:45 ` [PATCH v3 12/16] arm_mpam: propagate MSC write errors for remaining MSC write users Andre Przywara
2026-07-10 19:10 ` Jonathan Cameron
2026-07-10 14:45 ` [PATCH v3 13/16] arm_mpam: prepare mon_sel locking for MPAM-Fb Andre Przywara
2026-07-10 19:14 ` Jonathan Cameron
2026-07-21 15:22 ` Andre Przywara
2026-07-22 15:53 ` Andre Przywara
2026-07-15 15:16 ` Ben Horgan
2026-07-23 13:29 ` Andre Przywara
2026-07-10 14:45 ` [PATCH v3 14/16] arm_mpam: add MPAM-Fb MSC firmware access support Andre Przywara
2026-07-10 19:58 ` Jonathan Cameron
2026-07-22 16:28 ` Andre Przywara
2026-07-14 12:27 ` Niyas Sait
2026-07-23 12:32 ` Andre Przywara
2026-07-15 16:17 ` Ben Horgan
2026-07-22 16:57 ` Andre Przywara
2026-07-23 14:22 ` Ben Horgan
2026-07-10 14:45 ` [PATCH v3 15/16] arm_mpam: prevent MPAM-Fb accesses inside IRQ handler Andre Przywara
2026-07-15 16:08 ` Ben Horgan
2026-07-10 14:45 ` [PATCH v3 16/16] arm_mpam: detect and enable MPAM-Fb PCC support Andre Przywara
2026-07-10 20:10 ` Jonathan Cameron
2026-07-21 13:47 ` Andre Przywara
2026-07-14 12:32 ` Niyas Sait
2026-07-21 14:54 ` Andre Przywara
2026-07-15 16:08 ` Lee Trager
[not found] ` <52dc486f-2ef2-4c57-b3fb-fb4c240a9198@trager.us_quarantine>
2026-07-21 14:51 ` Andre Przywara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e2db0e66-1d88-4501-a3cd-b805193fe5a9@arm.com \
--to=ben.horgan@arm.com \
--cc=andre.przywara@arm.com \
--cc=catalin.marinas@arm.com \
--cc=fenghuay@nvidia.com \
--cc=ganapatrao.kulkarni@oss.qualcomm.com \
--cc=guohanjun@huawei.com \
--cc=james.morse@arm.com \
--cc=jic23@kernel.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=niyas.sait@arm.com \
--cc=rafael@kernel.org \
--cc=reinette.chatre@intel.com \
--cc=sramana@qti.qualcomm.com \
--cc=srivathsa.rao@oss.qualcomm.com \
--cc=sudeep.holla@kernel.org \
--cc=tsoni@quicinc.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox