[PATCH V2 00/13] powerpc/vas: Page fault handling for user space NX requests

Christophe Leroy christophe.leroy at c-s.fr
Mon Dec 9 16:37:09 AEDT 2019


Hi,

What do you mean by NX ?
Up to now, NX has been standing for No-eXecute. That's a bit in segment 
registers on book3s/32 to forbid executing code.

Therefore, some of your text is really misleading. If NX means something 
else for you, your text must be unambiguous.

Christophe

Le 09/12/2019 à 04:18, Haren Myneni a écrit :
> 
> Applications will send 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.
> 
> This patch series adds IRQ and fault window setup, and NX fault handling:
> - Read IRQ# from "interrupts" property 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 support and will be posting this series
> soon.
> 
> Patch 2: Define nx_fault_stamp on which NX writes fault status for the fault
>           CRB
> Patch 3: Read interrupts and port properties per VAS instance
> Patch 4: Setup fault window per each VAS instance. This window is used for
>           NX to paste fault CRB in FIFO.
> Patches 5 & 6: Setup threaded IRQ per VAS and register NX with fault window
> 	 ID and port number for each send window so that NX paste fault CRB
> 	 in this window.
> Patch 7: 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 later.
> Patches 8 and 9: Process CRBs from fault FIFO and notify tasks by
>           updating CSB or through signals.
> Patches 10 and 11: Return credits for send and fault windows after handling
>          faults.
> 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.
> 
> Changelog:
> V2:
>    - Use threaded IRQ instead of own kernel thread handler
>    - Use pswid insted of user space CSB address to find valid CRB
>    - Removed unused macros and other changes as suggested by Christoph Hellwig
> 
> Haren Myneni (13):
>    powerpc/vas: Describe vas-port and interrupts properties
>    powerpc/vas: Define nx_fault_stamp in coprocessor_request_block
>    powerpc/vas: Read interrupts and vas-port device tree properties
>    powerpc/vas: Setup fault window per VAS instance
>    powerpc/vas: Setup thread IRQ handler 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: Update CSB and notify process for fault CRBs
>    powerpc/vas: Print CRB and FIFO values
>    powerpc/vas: Do not use default credits for receive window
>    powerpc/VAS: Return credits after handling fault
>    powerpc/vas: Display process stuck message
>    powerpc/vas: Free send window in VAS instance after credits returned
> 
>   .../devicetree/bindings/powerpc/ibm,vas.txt        |   5 +
>   arch/powerpc/include/asm/icswx.h                   |  18 +-
>   arch/powerpc/platforms/powernv/Makefile            |   2 +-
>   arch/powerpc/platforms/powernv/vas-debug.c         |   2 +-
>   arch/powerpc/platforms/powernv/vas-fault.c         | 337 +++++++++++++++++++++
>   arch/powerpc/platforms/powernv/vas-window.c        | 173 ++++++++++-
>   arch/powerpc/platforms/powernv/vas.c               |  77 ++++-
>   arch/powerpc/platforms/powernv/vas.h               |  38 ++-
>   8 files changed, 627 insertions(+), 25 deletions(-)
>   create mode 100644 arch/powerpc/platforms/powernv/vas-fault.c
> 


More information about the Linuxppc-dev mailing list