From: Nicholas Piggin <npiggin@gmail.com>
To: Haren Myneni <haren@linux.ibm.com>,
herbert@gondor.apana.org.au, linux-crypto@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, mpe@ellerman.id.au
Subject: Re: [PATCH v4 12/16] powerpc/pseries/vas: Setup IRQ and fault handling
Date: Sat, 05 Jun 2021 10:43:19 +1000 [thread overview]
Message-ID: <1622853468.3f8ohl3pt0.astroid@bobo.none> (raw)
In-Reply-To: <ab831a47cae65c67e1fae41acd9dcb8f3c55ac76.camel@linux.ibm.com>
Excerpts from Haren Myneni's message of June 4, 2021 11:19 am:
> On Thu, 2021-06-03 at 15:48 +1000, Nicholas Piggin wrote:
>> Excerpts from Haren Myneni's message of May 21, 2021 7:39 pm:
>> > NX generates an interrupt when sees a fault on the user space
>> > buffer and the hypervisor forwards that interrupt to OS. Then
>> > the kernel handles the interrupt by issuing H_GET_NX_FAULT hcall
>> > to retrieve the fault CRB information.
>> >
>> > This patch also adds changes to setup and free IRQ per each
>> > window and also handles the fault by updating the CSB.
>> >
>> > Signed-off-by: Haren Myneni <haren@linux.ibm.com>
>> > ---
>> > arch/powerpc/platforms/pseries/vas.c | 111
>> > +++++++++++++++++++++++++++
>> > 1 file changed, 111 insertions(+)
>> >
>> > diff --git a/arch/powerpc/platforms/pseries/vas.c
>> > b/arch/powerpc/platforms/pseries/vas.c
>> > index ef0c455f6e93..31dc17573f50 100644
>> > --- a/arch/powerpc/platforms/pseries/vas.c
>> > +++ b/arch/powerpc/platforms/pseries/vas.c
>> > @@ -224,6 +224,62 @@ int plpar_vas_query_capabilities(const u64
>> > hcall, u8 query_type,
>> > }
>> > EXPORT_SYMBOL_GPL(plpar_vas_query_capabilities);
>> >
>> > +/*
>> > + * HCALL to get fault CRB from pHyp.
>> > + */
>> > +static int plpar_get_nx_fault(u32 winid, u64 buffer)
>> > +{
>> > + int64_t rc;
>> > +
>> > + rc = plpar_hcall_norets(H_GET_NX_FAULT, winid, buffer);
>> > +
>> > + switch (rc) {
>> > + case H_SUCCESS:
>> > + return 0;
>> > + case H_PARAMETER:
>> > + pr_err("HCALL(%x): Invalid window ID %u\n",
>> > H_GET_NX_FAULT,
>> > + winid);
>> > + return -EINVAL;
>> > + case H_STATE:
>> > + pr_err("HCALL(%x): No outstanding faults for window ID
>> > %u\n",
>> > + H_GET_NX_FAULT, winid);
>> > + return -EINVAL;
>> > + case H_PRIVILEGE:
>> > + pr_err("HCALL(%x): Window(%u): Invalid fault buffer
>> > 0x%llx\n",
>> > + H_GET_NX_FAULT, winid, buffer);
>> > + return -EACCES;
>> > + default:
>> > + pr_err("HCALL(%x): Unexpected error %lld for
>> > window(%u)\n",
>> > + H_GET_NX_FAULT, rc, winid);
>> > + return -EIO;
>> > + }
>> > +}
>>
>> Out of curiosity, you get one of these errors and it just drops the
>> interrupt on the floor. Then what happens, I assume everything
>> stops. Should it put some error in the csb, or signal the process or
>> something? Or is there nothing very sane that can be done?
>
> The user space polls on CSB with timout interval. If the kernel or NX
> does not return, the request will be timeout.
Okay, if there is no sane way it can respond to the different error
cases that's not necessarily unreasonable to just print something in the
kernel log. Hopefully the kernel log would be useful to the
administrator / developer / etc, but that's pretty rarely the case for
Linux errors as it is.
> The hypervisor returns the credit after H_GET_NX_FAULT HCALL is
> successful. Also one credit is assigned for each window. So in this
> case, the error is coming from the hypervisor and the application can
> not issue another request on the same window.
>
>>
>> > +
>> > +/*
>> > + * Handle the fault interrupt.
>> > + * When the fault interrupt is received for each window, query
>> > pHyp to get
>> > + * the fault CRB on the specific fault. Then process the CRB by
>> > updating
>> > + * CSB or send signal if the user space CSB is invalid.
>> > + * Note: pHyp forwards an interrupt for each fault request. So one
>> > fault
>> > + * CRB to process for each H_GET_NX_FAULT HCALL.
>> > + */
>> > +irqreturn_t pseries_vas_fault_thread_fn(int irq, void *data)
>> > +{
>> > + struct vas_window *txwin = data;
>> > + struct coprocessor_request_block crb;
>> > + struct vas_user_win_ref *tsk_ref;
>> > + int rc;
>> > +
>> > + rc = plpar_get_nx_fault(txwin->winid, (u64)virt_to_phys(&crb));
>> > + if (!rc) {
>> > + tsk_ref = &txwin->task_ref;
>> > + vas_dump_crb(&crb);
>>
>> This (and existing powernv vas code) is printk()ing a lot of lines
>> per
>> fault. This should be pretty normal operation I think? It should
>> avoid
>> filling the kernel logs, if so. Particularly if it can be triggered
>> by
>> userspace.
>>
>> I know it's existing code, so could be fixed separately from the
>> series.
>
> printk messages are only if HCALL returns failure or kernel issue (ex:
> not valid window and etc on powerNV). These errors should not be
> depending on the iser space requests. So generally we should not get
> these errors.
Ah I was looking at dump_crb but that's using pr_devel so that's
probably okay.
Thanks,
Nick
next prev parent reply other threads:[~2021-06-05 0:43 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-21 9:25 [PATCH v4 00/16] Enable VAS and NX-GZIP support on powerVM Haren Myneni
2021-05-21 9:28 ` [PATCH v4 01/16] powerpc/vas: Move VAS API to book3s common platform Haren Myneni
2021-06-03 3:32 ` Nicholas Piggin
2021-06-03 20:23 ` Haren Myneni
2021-05-21 9:29 ` [PATCH v4 02/16] powerpc/powernv/vas: Rename register/unregister functions Haren Myneni
2021-05-21 9:30 ` [PATCH v4 03/16] powerpc/vas: Add platform specific user window operations Haren Myneni
2021-06-03 4:05 ` Nicholas Piggin
2021-06-03 20:25 ` Haren Myneni
2021-05-21 9:31 ` [PATCH v4 04/16] powerpc/vas: Create take/drop pid and mm references Haren Myneni
2021-06-03 4:21 ` Nicholas Piggin
2021-06-04 4:08 ` Haren Myneni
2021-06-05 0:31 ` Nicholas Piggin
2021-06-05 3:03 ` Nicholas Piggin
2021-05-21 9:32 ` [PATCH v4 05/16] powerpc/vas: Move update_csb/dump_crb to common book3s platform Haren Myneni
2021-06-03 4:26 ` Nicholas Piggin
2021-05-21 9:33 ` [PATCH v4 06/16] powerpc/vas: Define and use common vas_window struct Haren Myneni
2021-06-03 4:38 ` Nicholas Piggin
2021-06-04 4:35 ` Haren Myneni
2021-06-04 11:52 ` Michael Ellerman
2021-06-04 21:19 ` Haren Myneni
2021-05-21 9:34 ` [PATCH v4 07/16] powerpc/pseries/vas: Define VAS/NXGZIP HCALLs and structs Haren Myneni
2021-06-03 4:47 ` Nicholas Piggin
2021-06-04 1:30 ` Haren Myneni
2021-06-05 0:37 ` Nicholas Piggin
2021-05-21 9:34 ` [PATCH v4 08/16] powerpc/vas: Define QoS credit flag to allocate window Haren Myneni
2021-05-21 9:35 ` [PATCH v4 09/16] powerpc/pseries/vas: Add HCALL wrappers for VAS handling Haren Myneni
2021-06-04 11:52 ` Michael Ellerman
2021-06-04 21:53 ` Haren Myneni
2021-05-21 9:38 ` [PATCH v4 10/16] powerpc/pseries/vas: Implement getting capabilities from hypervisor Haren Myneni
2021-05-21 9:39 ` [PATCH v4 11/16] powerpc/pseries/vas: Integrate API with open/close windows Haren Myneni
2021-05-21 9:39 ` [PATCH v4 12/16] powerpc/pseries/vas: Setup IRQ and fault handling Haren Myneni
2021-06-03 5:48 ` Nicholas Piggin
2021-06-04 1:19 ` Haren Myneni
2021-06-05 0:43 ` Nicholas Piggin [this message]
2021-05-21 9:40 ` [PATCH v4 13/16] crypto/nx: Rename nx-842-pseries file name to nx-common-pseries Haren Myneni
2021-05-21 9:41 ` [PATCH v4 14/16] crypto/nx: Register and unregister VAS interface Haren Myneni
2021-06-03 4:59 ` Nicholas Piggin
2021-05-21 9:41 ` [PATCH v4 15/16] crypto/nx: Get NX capabilities for GZIP coprocessor type Haren Myneni
2021-05-21 9:42 ` [PATCH v4 16/16] crypto/nx: Add sysfs interface to export NX capabilities Haren Myneni
2021-06-03 4:57 ` Nicholas Piggin
2021-06-04 1:02 ` Haren Myneni
2021-06-04 11:52 ` Michael Ellerman
2021-06-04 17:23 ` Haren Myneni
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=1622853468.3f8ohl3pt0.astroid@bobo.none \
--to=npiggin@gmail.com \
--cc=haren@linux.ibm.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
/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;
as well as URLs for NNTP newsgroup(s).