[PATCH 1/2] powerpc/vas: Report proper error for address translation failure
Michael Ellerman
mpe at ellerman.id.au
Thu Jul 9 21:22:10 AEST 2020
Haren Myneni <haren at linux.ibm.com> writes:
> DMA controller uses CC=5 internally for translation fault handling. So
> OS should be using CC=250 and should report this error to the user space
> when NX encounters address translation failure on the request buffer.
That doesn't really explain *why* the OS must use CC=250.
Is it documented somewhere that 5 is for hardware use, and 250 is for
software?
> This patch defines CSB_CC_ADDRESS_TRANSLATION(250) and updates
> CSB.CC with this proper error code for user space.
We still have:
#define CSB_CC_TRANSLATION (5)
And it's very unclear where one or the other should be used.
Can one or the other get a name that makes the distinction clear.
cheers
> diff --git a/Documentation/powerpc/vas-api.rst b/Documentation/powerpc/vas-api.rst
> index 1217c2f..78627cc 100644
> --- a/Documentation/powerpc/vas-api.rst
> +++ b/Documentation/powerpc/vas-api.rst
> @@ -213,7 +213,7 @@ request buffers are not in memory. The operating system handles the fault by
> updating CSB with the following data:
>
> csb.flags = CSB_V;
> - csb.cc = CSB_CC_TRANSLATION;
> + csb.cc = CSB_CC_ADDRESS_TRANSLATION;
> csb.ce = CSB_CE_TERMINATION;
> csb.address = fault_address;
>
> diff --git a/arch/powerpc/include/asm/icswx.h b/arch/powerpc/include/asm/icswx.h
> index 965b1f3..b1c9a57 100644
> --- a/arch/powerpc/include/asm/icswx.h
> +++ b/arch/powerpc/include/asm/icswx.h
> @@ -77,6 +77,8 @@ struct coprocessor_completion_block {
> #define CSB_CC_CHAIN (37)
> #define CSB_CC_SEQUENCE (38)
> #define CSB_CC_HW (39)
> +/* User space address traslation failure */
> +#define CSB_CC_ADDRESS_TRANSLATION (250)
>
> #define CSB_SIZE (0x10)
> #define CSB_ALIGN CSB_SIZE
> diff --git a/arch/powerpc/platforms/powernv/vas-fault.c b/arch/powerpc/platforms/powernv/vas-fault.c
> index 266a6ca..33e89d4 100644
> --- a/arch/powerpc/platforms/powernv/vas-fault.c
> +++ b/arch/powerpc/platforms/powernv/vas-fault.c
> @@ -79,7 +79,7 @@ static void update_csb(struct vas_window *window,
> csb_addr = (void __user *)be64_to_cpu(crb->csb_addr);
>
> memset(&csb, 0, sizeof(csb));
> - csb.cc = CSB_CC_TRANSLATION;
> + csb.cc = CSB_CC_ADDRESS_TRANSLATION;
> csb.ce = CSB_CE_TERMINATION;
> csb.cs = 0;
> csb.count = 0;
> --
> 1.8.3.1
More information about the Linuxppc-dev
mailing list