Haren Myneni <ha...@linux.ibm.com> writes: > P9 DD2 NX workbook (Table 4-36) says DMA controller uses CC=5 > internally for translation fault handling. NX reserves CC=250 for > OS to notify user space when NX encounters address translation > failure on the request buffer. Not an issue in earlier releases > as NX does not get faults on kernel addresses. > > This patch defines CSB_CC_FAULT_ADDRESS(250) and updates CSB.CC with > this proper error code for user space.
I added: Fixes: c96c4436aba4 ("powerpc/vas: Update CSB and notify process for fault CRBs") > Signed-off-by: Haren Myneni <ha...@linux.ibm.com> > > Changes in V2: > - Use CSB_CC_FAULT_ADDRESS instead of CSB_CC_ADDRESS_TRANSLATION > to distinguish from other error codes. > - Add NX workbook reference in the comment. The change log goes after the --- line. > --- > Documentation/powerpc/vas-api.rst | 2 +- > arch/powerpc/include/asm/icswx.h | 4 ++++ > arch/powerpc/platforms/powernv/vas-fault.c | 2 +- > 3 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/Documentation/powerpc/vas-api.rst > b/Documentation/powerpc/vas-api.rst > index 1217c2f..788dc83 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_FAULT_ADDRESS; > 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..9bc7c58 100644 > --- a/arch/powerpc/include/asm/icswx.h > +++ b/arch/powerpc/include/asm/icswx.h > @@ -77,6 +77,10 @@ struct coprocessor_completion_block { > #define CSB_CC_CHAIN (37) > #define CSB_CC_SEQUENCE (38) > #define CSB_CC_HW (39) > +/* > + * P9 DD NX Workbook 3.2 (Table 4-36): Address translation fault I changed that to "P9 DD2 NX" which I assume is what you meant, it matches the change log. > + */ > +#define CSB_CC_FAULT_ADDRESS (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..3d21fce 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_FAULT_ADDRESS; > csb.ce = CSB_CE_TERMINATION; > csb.cs = 0; > csb.count = 0; > -- > 1.8.3.1 cheers