[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