[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <e97ca7dd-8ab6-4313-93cd-62e075f4b6c7@amperemail.onmicrosoft.com>
Date: Wed, 26 Jun 2024 13:14:21 -0400
From: Adam Young <admiyo@...eremail.onmicrosoft.com>
To: Sudeep Holla <sudeep.holla@....com>, admiyo@...amperecomputing.com
Cc: Jassi Brar <jassisinghbrar@...il.com>,
"Rafael J. Wysocki" <rafael@...nel.org>, Len Brown <lenb@...nel.org>,
Robert Moore <robert.moore@...el.com>, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org, Jeremy Kerr <jk@...econstruct.com.au>,
Matt Johnston <matt@...econstruct.com.au>,
"David S . Miller" <davem@...emloft.net>, Eric Dumazet
<edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>
Subject: Re: [PATCH v3 1/3] mctp pcc: Check before sending MCTP PCC response
ACK
On 6/26/24 08:27, Sudeep Holla wrote:
> On Tue, Jun 25, 2024 at 02:53:31PM -0400, admiyo@...amperecomputing.com wrote:
>> From: Adam Young <admiyo@...erecomputing.com>
>>
>> Type 4 PCC channels have an option to send back a response
>> to the platform when they are done processing the request.
>> The flag to indicate whether or not to respond is inside
>> the message body, and thus is not available to the pcc
>> mailbox. Since only one message can be processed at once per
>> channel, the value of this flag is checked during message processing
>> and passed back via the channels global structure.
>>
>> Ideally, the mailbox callback function would return a value
>> indicating whether the message requires an ACK, but that
>> would be a change to the mailbox API. That would involve
>> some change to all (about 12) of the mailbox based drivers,
>> and the majority of them would not need to know about the
>> ACK call.
>>
> Next time when you post new series, I prefer to be cc-ed in all the patches.
I was using the list of maintainers for each patch as pulled via the
Kernel scripts in git send-email for the first two versions.
I have started hard coding the list of CCers as a superset of all the
maintainers, as this patch series crosses a few boundaries.
> So far I ignored v1 and v2 thinking it has landed in my mbox my mistake and
> deleted them. But just checked the series on lore, sorry for that.
>
>> Signed-off-by: Adam Young <admiyo@...amperecomputing.com>
>> ---
>> drivers/mailbox/pcc.c | 6 +++++-
>> include/acpi/pcc.h | 1 +
>> 2 files changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c
>> index 94885e411085..5cf792700d79 100644
>> --- a/drivers/mailbox/pcc.c
>> +++ b/drivers/mailbox/pcc.c
>> @@ -280,6 +280,7 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p)
>> {
>> struct pcc_chan_info *pchan;
>> struct mbox_chan *chan = p;
>> + struct pcc_mbox_chan *pmchan;
>> u64 val;
>> int ret;
>>
>> @@ -304,6 +305,8 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p)
>> if (pcc_chan_reg_read_modify_write(&pchan->plat_irq_ack))
>> return IRQ_NONE;
>>
>> + pmchan = &pchan->chan;
>> + pmchan->ack_rx = true; //TODO default to False
> Indeed, default must be false. You need to do this conditionally at runtime
> otherwise I see no need for this patch as it doesn't change anything as it
> stands. It needs to be fixed to get this change merged.
>
> Also we should set any such flag once at the boot, IRQ handler is not
> the right place for sure.
Ringing the doorbell to signify that the message is received is optional
in the ACPI/PCC spec but was hard coded to always get set.
There is currently no way to pass the value from the rx function to here
where the code is actually triggering the response. The Mailbox receive
callback returns void. Changing that would require changing every
module that uses the mailbox code.
You can see the spec here:
https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/14_Platform_Communications_Channel/Platform_Comm_Channel.html#platform-notification-for-slave-pcc-subspaces-type-4
note in step 2 of the send process, the part that says "The platform
can request the OSPM rings the doorbell once it has completed processing
the notification command by setting the Generate Signal bit in the flags."
The change that made the response mandatory was 60c40b06fa686 and merged
in the 6.9 timeframe.
The actual check is done at run time, and you can see how it is done in
the third patch, at the end of the function mctp_pcc_client_rx_callback
+ flags = mctp_pcc_hdr.flags;
+ mctp_pcc_dev->in_chan->ack_rx = (flags & PCC_ACK_FLAG_MASK) > 0;
While we don't anticipate our backend requiring the ACK, we did encode
the possibility into the driver.
I am willing to rework this if we have a viable alternative.
>
Powered by blists - more mailing lists