![Vaibhav Jain](/assets/img/avatar_default.png)
This patch prevents resetting the cxl adapter via sysfs in presence of
one or more active cxl_context on it. This protects against an
unrecoverable error caused by PSL owning a dirty cache line even after
reset and host tries to touch the same cache line. In case a force reset
of the card is required irrespective of any active contexts, the int
value -1 can be stored in the 'reset' sysfs attribute of the card.
The patch introduces a new atomic_t member named contexts_num inside
struct cxl that holds the number of active context attached to the card
, which is checked against '0' before proceeding with the reset. To
prevent against a race condition where a context is activated just after
reset check is performed, the contexts_num is atomically set to '-1'
after reset-check to indicate that no more contexts can be activated on
the card anymore.
Before activating a context we atomically test if contexts_num is
non-negative and if so, increment its value by one. In case the value of
contexts_num is negative then it indicates that the card is about to be
reset and context activation is error-ed out at that point.
Fixes: 62fa19d4b4
("cxl: Add ability to reset the card")
Cc: stable@vger.kernel.org # v4.0+
Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
247 lines
10 KiB
Plaintext
247 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. 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
|