From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ozlabs.org (ozlabs.org [103.22.144.67]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3tN60q1BZbzDvfJ for ; Tue, 22 Nov 2016 11:34:19 +1100 (AEDT) In-Reply-To: <20161114085854.19667-1-fbarrat@linux.vnet.ibm.com> To: Frederic Barrat , imunsie@au1.ibm.com, linuxppc-dev@lists.ozlabs.org From: Michael Ellerman Subject: Re: [RESEND] cxl: Fix coredump generation when cxl_get_fd() is used Message-Id: <3tN60p45Shz9s5g@ozlabs.org> Date: Tue, 22 Nov 2016 11:34:18 +1100 (AEDT) List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , On Mon, 2016-11-14 at 08:58:54 UTC, Frederic Barrat wrote: > If a process dumps core while owning a cxl file descriptor obtained > from an AFU driver (e.g. cxlflash) through the cxl_get_fd() API, the > following error occurs: > > [ 868.027591] Unable to handle kernel paging request for data at address ... > [ 868.027778] Faulting instruction address: 0xc00000000035edb0 > cpu 0x8c: Vector: 300 (Data Access) at [c000003c688275e0] > pc: c00000000035edb0: elf_core_dump+0xd60/0x1300 > lr: c00000000035ed80: elf_core_dump+0xd30/0x1300 > sp: c000003c68827860 > msr: 9000000100009033 > dar: c > dsisr: 40000000 > current = 0xc000003c68780000 > paca = 0xc000000001b73200 softe: 0 irq_happened: 0x01 > pid = 46725, comm = hxesurelock > enter ? for help > [c000003c68827a60] c00000000036948c do_coredump+0xcec/0x11e0 > [c000003c68827c20] c0000000000ce9e0 get_signal+0x540/0x7b0 > [c000003c68827d10] c000000000017354 do_signal+0x54/0x2b0 > [c000003c68827e00] c00000000001777c do_notify_resume+0xbc/0xd0 > [c000003c68827e30] c000000000009838 ret_from_except_lite+0x64/0x68 > --- Exception: 300 (Data Access) at 00003fff98ad2918 > > The root cause is that the address_space structure for the file > doesn't define a 'host' member. > > When cxl allocates a file descriptor, it's using the anonymous inode > to back the file, but allocates a private address_space for each > context. The private address_space allows to track memory allocation > for each context. cxl doesn't define the 'host' member of the address > space, i.e. the inode. We don't want to define it as the anonymous > inode, since there's no longer a 1-to-1 relation between address_space > and inode. > > To fix it, instead of using the anonymous inode, we introduce a simple > pseudo filesystem so that cxl can allocate its own inodes. So we now > have one inode for each file and address_space. The pseudo filesystem > is only mounted on the first allocation of a file descriptor by > cxl_get_fd(). > > Tested with cxlflash. > > Signed-off-by: Frederic Barrat > Reviewed-by: Matthew R. Ochs Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/bdecf76e319a29735d828575f4a926 cheers