[RESEND PATCH] cxl: Fix coredump generation when cxl_get_fd() is used

Matthew R. Ochs mrochs at linux.vnet.ibm.com
Tue Nov 15 03:27:25 AEDT 2016


> On Nov 14, 2016, at 2:58 AM, Frederic Barrat <fbarrat at linux.vnet.ibm.com> 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 <fbarrat at linux.vnet.ibm.com>

Reviewed-by: Matthew R. Ochs <mrochs at linux.vnet.ibm.com>



More information about the Linuxppc-dev mailing list