linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@kaod.org>
To: Haren Myneni <haren@linux.ibm.com>, mpe@ellerman.id.au
Cc: npiggin@gmail.com, mikey@neuling.org,
	herbert@gondor.apana.org.au, frederic.barrat@fr.ibm.com,
	srikar@linux.vnet.ibm.com, linux-kernel@vger.kernel.org,
	hch@infradead.org, oohall@gmail.com, sukadev@linux.vnet.ibm.com,
	linuxppc-dev@lists.ozlabs.org, ajd@linux.ibm.com
Subject: Re: [PATCH v10 00/14] powerpc/vas: Page fault handling for user space NX requests
Date: Fri, 3 Apr 2020 10:19:40 +0200	[thread overview]
Message-ID: <14d46487-47ee-4ec8-5241-576368b1b119@kaod.org> (raw)
In-Reply-To: <1585810846.2275.23.camel@hbabu-laptop>

On 4/2/20 9:00 AM, Haren Myneni wrote:
> 
> On power9, Virtual Accelerator Switchboard (VAS) allows user space or
> kernel to communicate with Nest Accelerator (NX) directly using COPY/PASTE
> instructions. NX provides various functionalities such as compression,
> encryption and etc. But only compression (842 and GZIP formats) is
> supported in Linux kernel on power9.
> 
> 842 compression driver (drivers/crypto/nx/nx-842-powernv.c)
> is already included in Linux. Only GZIP support will be available from
> user space.
> 
> Applications can issue GZIP compression / decompression requests to NX with
> COPY/PASTE instructions. When NX is processing these requests, can hit
> fault on the request buffer (not in memory). It issues an interrupt and
> pastes fault CRB in fault FIFO. Expects kernel to handle this fault and
> return credits for both send and fault windows after processing.

How complex would it be to provide a QEMU PowerNV model for the NX and 
VAS units ? We can stage the different level of support. First would be 
a simple HW init. I am interested for the XIVE modeling of course.

Thanks,

C.
 
> 
> This patch series adds IRQ and fault window setup, and NX fault handling:
> - Alloc IRQ and trigger port address, and configure IRQ per VAS instance.
> - Set port# for each window to generate an interrupt when noticed fault.
> - Set fault window and FIFO on which NX paste fault CRB.
> - Setup IRQ thread fault handler per VAS instance.
> - When receiving an interrupt, Read CRBs from fault FIFO and update
>   coprocessor_status_block (CSB) in the corresponding CRB with translation
>   failure (CSB_CC_TRANSLATION). After issuing NX requests, process polls
>   on CSB address. When it sees translation error, can touch the request
>   buffer to bring the page in to memory and reissue NX request.
> - If copy_to_user fails on user space CSB address, OS sends SEGV signal.
> 
> Tested these patches with NX-GZIP enable patches and posted them as separate
> patch series.
> 
> Patch 1: Define alloc IRQ per chip which is needed to alloc IRQ per VAS
>            instance.
> Patch 2: Define nx_fault_stamp on which NX writes fault status for the fault
>          CRB
> Patch 3: Alloc and setup IRQ and trigger port address for each VAS instance
> Patches 4 & 5: Setup fault window and register NX per each VAS instance. This
>          window is used for NX to paste fault CRB in FIFO.
> Patch 6: Reference to pid and mm so that pid is not used until window closed.
>          Needed for multi thread application where child can open a window
>          and can be used by parent it later.
> Patch 7: Setup threaded IRQ handler per VAS
> Patch 8: Process CRBs from fault FIFO and notify tasks by updating CSB or
>          through signals.
> Patches 9 & 11: Return credits for send and fault windows after handling
>         faults.
> Patches 10 & 12: Dump FIFO / CRB data and messages for error conditions
> Patch 13: Fix closing send window after all credits are returned. This issue
>          happens only for user space requests. No page faults on kernel
>          request buffer.
> Patch 14: For each process / thread, use mm_context->vas_windows counter to
> 	 clear foreign address mapping and disable it.
> 
> Changelog:
> 
> V2:
>   - Use threaded IRQ instead of own kernel thread handler
>   - Use pswid instead of user space CSB address to find valid CRB
>   - Removed unused macros and other changes as suggested by Christoph Hellwig
> 
> V3:
>   - Rebased to 5.5-rc2
>   - Use struct pid * instead of pid_t for vas_window tgid
>   - Code cleanup as suggested by Christoph Hellwig
> 
> V4:
>   - Define xive alloc and get IRQ info based on chip ID and use these
>    functions for IRQ setup per VAS instance. It eliminates skiboot
>     dependency as suggested by Oliver.
> 
> V5:
>   - Do not update CSB if the process is exiting (patch8)
> 
> V6:
>   - Add interrupt handler instead of default one and return IRQ_HANDLED
>     if the fault handling thread is already in progress. (Patch7)
>   - Use platform send window ID and CCW[0] bit to find valid CRB in
>     fault FIFO (Patch7).
>   - Return fault address to user space in BE and other changes as
>     suggested by Michael Neuling. (patch8)
>   - Rebased to 5.6-rc4
> 
> V7:
>   - Fixed sparse warnings (patches 4, 9 and 10)
> 
> V8:
>   - Moved mm_context_remove_copro() before mmdrop() (patch6)
>   - Moved barrier before csb.flags store and add WARN_ON_ONCE() checks (patch8)
> 
> V9:
>   - Rebased to 5.6
>   - Changes based on Cedric's comments
>         - Removed "Define xive_native_alloc_get_irq_info()" patch and used
>           irq_get_handler_data() (patch3)
>   - Changes based on comments from Nicholas Piggin
>         - Moved "Taking PID reference" patch before setting VAS fault handler
>           patch
>         - Removed mutex_lock/unlock (patch7)
>         - Other cleanup changes
> 
> V10:
>   - Include patch to enable and disable CP_ABORT execution using
>     mm_context->vas_windows counter.
>   - Remove 'if (txwin)' line which is covered with 'else' before (patch6) 
> 
> Haren Myneni (14):
>   powerpc/xive: Define xive_native_alloc_irq_on_chip()
>   powerpc/vas: Define nx_fault_stamp in coprocessor_request_block
>   powerpc/vas: Alloc and setup IRQ and trigger port address
>   powerpc/vas: Setup fault window per VAS instance
>   powerpc/vas: Register NX with fault window ID and IRQ port value
>   powerpc/vas: Take reference to PID and mm for user space windows
>   powerpc/vas: Setup thread IRQ handler per VAS instance
>   powerpc/vas: Update CSB and notify process for fault CRBs
>   powerpc/vas: Return credits after handling fault
>   powerpc/vas: Print CRB and FIFO values
>   powerpc/vas: Do not use default credits for receive window
>   powerpc/vas: Display process stuck message
>   powerpc/vas: Free send window in VAS instance after credits returned
>   powerpc: Use mm_context vas_windows counter to issue CP_ABORT
> 
>  arch/powerpc/include/asm/book3s/64/mmu.h    |   3 +
>  arch/powerpc/include/asm/icswx.h            |  20 +-
>  arch/powerpc/include/asm/mmu_context.h      |  22 ++
>  arch/powerpc/include/asm/processor.h        |   1 -
>  arch/powerpc/include/asm/xive.h             |   9 +-
>  arch/powerpc/kernel/process.c               |   8 +-
>  arch/powerpc/platforms/powernv/Makefile     |   2 +-
>  arch/powerpc/platforms/powernv/vas-debug.c  |   2 +-
>  arch/powerpc/platforms/powernv/vas-fault.c  | 382 ++++++++++++++++++++++++++++
>  arch/powerpc/platforms/powernv/vas-window.c | 202 ++++++++++++++-
>  arch/powerpc/platforms/powernv/vas.c        |  85 ++++++-
>  arch/powerpc/platforms/powernv/vas.h        |  57 ++++-
>  arch/powerpc/sysdev/xive/native.c           |   6 +-
>  13 files changed, 767 insertions(+), 32 deletions(-)
>  create mode 100644 arch/powerpc/platforms/powernv/vas-fault.c
> 


      parent reply	other threads:[~2020-04-03 11:59 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-02  7:00 [PATCH v10 00/14] powerpc/vas: Page fault handling for user space NX requests Haren Myneni
2020-04-02  7:09 ` [PATCH v10 01/14] powerpc/xive: Define xive_native_alloc_irq_on_chip() Haren Myneni
2020-04-02  7:09 ` [PATCH v10 02/14] powerpc/vas: Define nx_fault_stamp in coprocessor_request_block Haren Myneni
2020-04-02  7:10 ` [PATCH v10 03/14] powerpc/vas: Alloc and setup IRQ and trigger port address Haren Myneni
2020-04-02  8:08   ` Cédric Le Goater
2020-04-02  7:11 ` [PATCH v10 04/14] powerpc/vas: Setup fault window per VAS instance Haren Myneni
2020-04-02  7:11 ` [PATCH v10 05/14] powerpc/vas: Register NX with fault window ID and IRQ port value Haren Myneni
2020-04-02  7:13 ` [PATCH v10 06/14] powerpc/vas: Take reference to PID and mm for user space windows Haren Myneni
2020-04-02  7:13 ` [PATCH v10 07/14] powerpc/vas: Setup thread IRQ handler per VAS instance Haren Myneni
2020-04-02  7:14 ` [PATCH v10 08/14] powerpc/vas: Update CSB and notify process for fault CRBs Haren Myneni
2020-04-02  7:15 ` [PATCH v10 09/14] powerpc/vas: Return credits after handling fault Haren Myneni
2020-04-02  7:16 ` [PATCH v10 10/14] powerpc/vas: Print CRB and FIFO values Haren Myneni
2020-04-02  7:17 ` [PATCH v10 11/14] powerpc/vas: Do not use default credits for receive window Haren Myneni
2020-04-02  7:18 ` [PATCH v10 12/14] powerpc/vas: Display process stuck message Haren Myneni
2020-04-02  7:19 ` [PATCH v10 13/14] powerpc/vas: Free send window in VAS instance after credits returned Haren Myneni
2020-04-02  7:20 ` [PATCH v10 14/14] powerpc: Use mm_context vas_windows counter to issue CP_ABORT Haren Myneni
2020-04-11 10:28   ` Michael Ellerman
2020-04-14  7:54   ` Haren Myneni
2020-04-03  8:19 ` Cédric Le Goater [this message]

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=14d46487-47ee-4ec8-5241-576368b1b119@kaod.org \
    --to=clg@kaod.org \
    --cc=ajd@linux.ibm.com \
    --cc=frederic.barrat@fr.ibm.com \
    --cc=haren@linux.ibm.com \
    --cc=hch@infradead.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mikey@neuling.org \
    --cc=mpe@ellerman.id.au \
    --cc=npiggin@gmail.com \
    --cc=oohall@gmail.com \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=sukadev@linux.vnet.ibm.com \
    /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).