From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from pegase1.c-s.fr (pegase1.c-s.fr [93.17.236.30]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3rQGN36KlZzDq60 for ; Thu, 9 Jun 2016 16:57:54 +1000 (AEST) Subject: Re: [PATCH 1/2] powerpc: Send SIGBUS on unaligned copy and paste To: Chris Smart , linuxppc-dev@lists.ozlabs.org References: <20160609060120.GA26093@distroguy.com> From: Christophe Leroy Message-ID: Date: Thu, 9 Jun 2016 08:57:50 +0200 MIME-Version: 1.0 In-Reply-To: <20160609060120.GA26093@distroguy.com> Content-Type: text/plain; charset=utf-8; format=flowed List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Le 09/06/2016 à 08:01, Chris Smart a écrit : > Calling ISA 3.0 instructions copy, copy_first, paste and paste_last > generates an alignment fault when copying or pasting unaligned > data (128 byte). We catch this and send SIGBUS to the userspace > process that caused it. > > We do not emulate these because paste may contain additional metadata > when pasting to a co-processor and paste_last is the synchronisation > point for preceding copy/paste sequences. > > Thanks to Michael Neuling for his help. > > Signed-off-by: Chris Smart > --- > arch/powerpc/kernel/align.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c > index 8e7cb8e2b21a..fcdf09476eec 100644 > --- a/arch/powerpc/kernel/align.c > +++ b/arch/powerpc/kernel/align.c > @@ -875,6 +875,21 @@ int fix_alignment(struct pt_regs *regs) > return emulate_vsx(addr, reg, areg, regs, flags, nb, elsize); > } > #endif > + > + /* > + * ISA 3.0 (such as P9) copy, copy_first, paste and paste_last > alignment > + * check. > + * > + * Send a SIGBUS to the process that caused the fault. > + * > + * We do not emulate these because paste may contain additional > metadata > + * when pasting to a co-processor. Furthermore, paste_last is the > + * synchronisation point for preceding copy/paste sequences. > + */ > + if ((instruction & 0xfc0006fe) == 0x7c00060c){ Can you define corresponding instruction and mask in arch/powerpc/include/asm/ppc-opcode.h and use symbolic names here instead of raw values ? Christophe