OpenCloudOS-Kernel/drivers/misc
Frederic Barrat bdecf76e31 cxl: Fix coredump generation when cxl_get_fd() is used
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@linux.vnet.ibm.com>
Reviewed-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2016-11-18 23:02:17 +11:00
..
altera-stapl drivers/misc/altera-stapl/altera.c: remove extraneous KERN_INFO prefix 2015-06-25 17:00:38 -07:00
c2port misc: c2port: use kobj_to_dev() 2016-02-07 23:01:45 -08:00
cb710
cxl cxl: Fix coredump generation when cxl_get_fd() is used 2016-11-18 23:02:17 +11:00
echo
eeprom Merge branch 'i2c/for-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2016-10-07 14:12:21 -07:00
genwqe GenWQE: Fix bad page access during abort of resource allocation 2016-10-28 08:25:18 -04:00
ibmasm fs: Replace CURRENT_TIME with current_time() for inode timestamps 2016-09-27 21:06:21 -04:00
lis3lv02d misc: apds990x, bh1770glc, lis3lv02d: use to_i2c_client 2016-02-07 23:01:45 -08:00
mei mei: bus: fix received data size check in NFC fixup 2016-10-31 10:25:22 -06:00
mic mm: replace get_user_pages() write/force parameters with gup_flags 2016-10-19 08:11:43 -07:00
sgi-gru drivers/misc/sgi-gru/grumain.c: remove bogus 0x prefix from printk 2016-10-27 18:43:43 -07:00
sgi-xp mm: rename alloc_pages_exact_node() to __alloc_pages_node() 2015-09-08 15:35:28 -07:00
ti-st drivers: misc: ti-st: Use int instead of fuzzy char for callback status 2016-07-17 19:59:26 +02:00
vmw_vmci VMCI: Doorbell create and destroy fixes 2016-10-28 08:26:21 -04:00
Kconfig Merge 4.8-rc5 into char-misc-next 2016-09-05 08:04:07 +02:00
Makefile Merge 4.8-rc5 into char-misc-next 2016-09-05 08:04:07 +02:00
ad525x_dpot-i2c.c misc: ad525x_dpot: Remove unnecessary MODULE_ALIAS() 2015-09-20 19:33:29 -07:00
ad525x_dpot-spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
ad525x_dpot.c misc: ad525x_dpot: Fix the enabling of the "otpXen" attributes 2016-03-01 16:55:13 -08:00
ad525x_dpot.h
apds990x.c misc: apds990x, bh1770glc, lis3lv02d: use to_i2c_client 2016-02-07 23:01:45 -08:00
apds9802als.c
arm-charlcd.c drivers/misc: make arm-charlcd.c explicitly non-modular 2016-02-07 23:01:45 -08:00
atmel-ssc.c ASoC: atmel_ssc_dai: distinguish the different SSC 2016-03-02 23:43:11 +09:00
atmel_tclib.c misc: atmel_tclib: get and use slow clock 2015-10-06 12:33:14 +02:00
bh1770glc.c misc: apds990x, bh1770glc, lis3lv02d: use to_i2c_client 2016-02-07 23:01:45 -08:00
cs5535-mfgpt.c
ds1682.c misc: ds1682: clean up ds1682_eeprom_read() and ds1682_eeprom_write() 2015-08-05 13:53:39 -07:00
dummy-irq.c
enclosure.c
fsa9480.c
hmc6352.c
hpilo.c drivers/misc/hpilo: Changes to support new security states in iLO5 FW 2016-09-27 12:53:46 +02:00
hpilo.h
ics932s401.c
ioc4.c
isl29003.c misc: Drop owner assignment from i2c_driver 2015-08-10 08:37:35 +02:00
isl29020.c
kgdbts.c drivers/misc: make kgdbts.c slightly more explicitly non-modular 2015-09-20 19:32:35 -07:00
lattice-ecp3-config.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
lkdtm.h lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_bugs.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_core.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_heap.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_perms.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_rodata.c lkdtm: Mark lkdtm_rodata_do_nothing() notrace 2016-08-31 13:12:38 +02:00
lkdtm_usercopy.c lkdtm: adjust usercopy tests to bypass const checks 2016-09-06 12:17:30 -07:00
panel.c misc: panel, convert struct to bitmap 2016-02-11 19:24:23 -08:00
pch_phub.c misc: pch_phub: Add UART_CLK quirk for Boston platform 2016-08-31 15:45:18 +02:00
phantom.c
pti.c
qcom-coincell.c ARM: qcom: silence an uninitialized variable warning 2016-05-01 14:20:04 -07:00
spear13xx_pcie_gadget.c spear13xx_pcie_gadget: use per-attribute show and store methods 2015-10-13 22:17:40 -07:00
sram.c misc: sram: fix check of devm_ioremap*() return value 2016-04-30 14:15:56 -07:00
ti_dac7512.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
tifm_7xx1.c
tifm_core.c
tsl2550.c misc: Drop owner assignment from i2c_driver 2015-08-10 08:37:35 +02:00
vexpress-syscfg.c
vmw_balloon.c mm, page_alloc: rename __GFP_WAIT to __GFP_RECLAIM 2015-11-06 17:50:42 -08:00