Currently we see a kernel-oops reported on Power-9 while attaching a
context to an AFU, with radix-mode and sysfs attr 'prefault_mode' set
to anything other than 'none'. The backtrace of the oops is of this
form:
Unable to handle kernel paging request for data at address 0x00000080
Faulting instruction address: 0xc00800000bcf3b20
cpu 0x1: Vector: 300 (Data Access) at [c00000037f003800]
pc: c00800000bcf3b20: cxl_load_segment+0x178/0x290 [cxl]
lr: c00800000bcf39f0: cxl_load_segment+0x48/0x290 [cxl]
sp: c00000037f003a80
msr: 9000000000009033
dar: 80
dsisr: 40000000
current = 0xc00000037f280000
paca = 0xc0000003ffffe600 softe: 3 irq_happened: 0x01
pid = 3529, comm = afp_no_int
<snip>
cxl_prefault+0xfc/0x248 [cxl]
process_element_entry_psl9+0xd8/0x1a0 [cxl]
cxl_attach_dedicated_process_psl9+0x44/0x130 [cxl]
native_attach_process+0xc0/0x130 [cxl]
afu_ioctl+0x3f4/0x5e0 [cxl]
do_vfs_ioctl+0xdc/0x890
ksys_ioctl+0x68/0xf0
sys_ioctl+0x40/0xa0
system_call+0x58/0x6c
The issue is caused as on Power-8 the AFU attr 'prefault_mode' was
used to improve initial storage fault performance by prefaulting
process segments. However on Power-9 with radix mode we don't have
Storage-Segments that we can prefault. Also prefaulting process Pages
will be too costly and fine-grained.
Hence, since the prefaulting mechanism doesn't makes sense of
radix-mode, this patch updates prefault_mode_store() to not allow any
other value apart from CXL_PREFAULT_NONE when radix mode is enabled.
Fixes: f24be42aab
("cxl: Add psl9 specific code")
Cc: stable@vger.kernel.org # v4.12+
Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
249 lines
10 KiB
Plaintext
249 lines
10 KiB
Plaintext
Note: Attributes that are shared between devices are stored in the directory
|
|
pointed to by the symlink device/.
|
|
Example: The real path of the attribute /sys/class/cxl/afu0.0s/irqs_max is
|
|
/sys/class/cxl/afu0.0s/device/irqs_max, i.e. /sys/class/cxl/afu0.0/irqs_max.
|
|
|
|
|
|
Slave contexts (eg. /sys/class/cxl/afu0.0s):
|
|
|
|
What: /sys/class/cxl/<afu>/afu_err_buf
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
AFU Error Buffer contents. The contents of this file are
|
|
application specific and depends on the AFU being used.
|
|
Applications interacting with the AFU can use this attribute
|
|
to know about the current error condition and take appropriate
|
|
action like logging the event etc.
|
|
|
|
|
|
What: /sys/class/cxl/<afu>/irqs_max
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read/write
|
|
Decimal value of maximum number of interrupts that can be
|
|
requested by userspace. The default on probe is the maximum
|
|
that hardware can support (eg. 2037). Write values will limit
|
|
userspace applications to that many userspace interrupts. Must
|
|
be >= irqs_min.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/irqs_min
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Decimal value of the minimum number of interrupts that
|
|
userspace must request on a CXL_START_WORK ioctl. Userspace may
|
|
omit the num_interrupts field in the START_WORK IOCTL to get
|
|
this minimum automatically.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/mmio_size
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Decimal value of the size of the MMIO space that may be mmaped
|
|
by userspace.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/modes_supported
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
List of the modes this AFU supports. One per line.
|
|
Valid entries are: "dedicated_process" and "afu_directed"
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/mode
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read/write
|
|
The current mode the AFU is using. Will be one of the modes
|
|
given in modes_supported. Writing will change the mode
|
|
provided that no user contexts are attached.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
|
|
What: /sys/class/cxl/<afu>/prefault_mode
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read/write
|
|
Set the mode for prefaulting in segments into the segment table
|
|
when performing the START_WORK ioctl. Only applicable when
|
|
running under hashed page table mmu.
|
|
Possible values:
|
|
none: No prefaulting (default)
|
|
work_element_descriptor: Treat the work element
|
|
descriptor as an effective address and
|
|
prefault what it points to.
|
|
all: all segments process calling START_WORK maps.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/reset
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: write only
|
|
Writing 1 here will reset the AFU provided there are not
|
|
contexts active on the AFU.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/api_version
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Decimal value of the current version of the kernel/user API.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/api_version_compatible
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Decimal value of the the lowest version of the userspace API
|
|
this this kernel supports.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
|
|
AFU configuration records (eg. /sys/class/cxl/afu0.0/cr0):
|
|
|
|
An AFU may optionally export one or more PCIe like configuration records, known
|
|
as AFU configuration records, which will show up here (if present).
|
|
|
|
What: /sys/class/cxl/<afu>/cr<config num>/vendor
|
|
Date: February 2015
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Hexadecimal value of the vendor ID found in this AFU
|
|
configuration record.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/cr<config num>/device
|
|
Date: February 2015
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Hexadecimal value of the device ID found in this AFU
|
|
configuration record.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/cr<config num>/class
|
|
Date: February 2015
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Hexadecimal value of the class code found in this AFU
|
|
configuration record.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>/cr<config num>/config
|
|
Date: February 2015
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
This binary file provides raw access to the AFU configuration
|
|
record. The format is expected to match the either the standard
|
|
or extended configuration space defined by the PCIe
|
|
specification.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
|
|
|
|
Master contexts (eg. /sys/class/cxl/afu0.0m)
|
|
|
|
What: /sys/class/cxl/<afu>m/mmio_size
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Decimal value of the size of the MMIO space that may be mmaped
|
|
by userspace. This includes all slave contexts space also.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>m/pp_mmio_len
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Decimal value of the Per Process MMIO space length.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<afu>m/pp_mmio_off (not in a guest)
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Decimal value of the Per Process MMIO space offset.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
|
|
Card info (eg. /sys/class/cxl/card0)
|
|
|
|
What: /sys/class/cxl/<card>/caia_version
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Identifies the CAIA Version the card implements.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<card>/psl_revision
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Identifies the revision level of the PSL.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<card>/base_image (not in a guest)
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Identifies the revision level of the base image for devices
|
|
that support loadable PSLs. For FPGAs this field identifies
|
|
the image contained in the on-adapter flash which is loaded
|
|
during the initial program load.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<card>/image_loaded (not in a guest)
|
|
Date: September 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Will return "user" or "factory" depending on the image loaded
|
|
onto the card.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<card>/load_image_on_perst (not in a guest)
|
|
Date: December 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read/write
|
|
Valid entries are "none", "user", and "factory".
|
|
"none" means PERST will not cause image to be loaded to the
|
|
card. A power cycle is required to load the image.
|
|
"none" could be useful for debugging because the trace arrays
|
|
are preserved.
|
|
"user" and "factory" means PERST will cause either the user or
|
|
user or factory image to be loaded.
|
|
Default is to reload on PERST whichever image the card has
|
|
loaded.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<card>/reset
|
|
Date: October 2014
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: write only
|
|
Writing 1 will issue a PERST to card provided there are no
|
|
contexts active on any one of the card AFUs. This may cause
|
|
the card to reload the FPGA depending on load_image_on_perst.
|
|
Writing -1 will do a force PERST irrespective of any active
|
|
contexts on the card AFUs.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<card>/perst_reloads_same_image (not in a guest)
|
|
Date: July 2015
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read/write
|
|
Trust that when an image is reloaded via PERST, it will not
|
|
have changed.
|
|
0 = don't trust, the image may be different (default)
|
|
1 = trust that the image will not change.
|
|
Users: https://github.com/ibm-capi/libcxl
|
|
|
|
What: /sys/class/cxl/<card>/psl_timebase_synced
|
|
Date: March 2016
|
|
Contact: linuxppc-dev@lists.ozlabs.org
|
|
Description: read only
|
|
Returns 1 if the psl timebase register is synchronized
|
|
with the core timebase register, 0 otherwise.
|
|
Users: https://github.com/ibm-capi/libcxl
|