History

cxl: Implement an ioctl to fetch afu card-id, offset-id and mode

Given a file descriptor on an afu device, libcxl currently uses the major/minor number obtained from fstat on the fd to construct path to the afu's sysfs directory. However it is possible that rather than using one of the device in /dev/cxl, a kernel driver creates its own device which export generic cxl interface to the userspace. This causes problems with libcxl as it tries to use a wrong major/minor number to construct the sysfs path and fail. So this patch introduces a new ioctl called CXL_IOCTL_GET_AFU_ID on the afu file descriptor to fetch the cxl_afu_id struct that holds the card/offset-id and mode information. These info is then used by libcxl to construct the correct path to the afu sysfs directory. Testing: - Build against pseries be/le configs - Testing with corresponding libcxl changes to verify that it constructs right sysfs path to the afu.

Vaibhav Jain committed 11 years ago

Commit 27d4dc71 parent 989898b3 files · +44 −2Browse files

Showing the changes to include/uapi (1 of 3 files). Show all

Unified · Split

include/uapi/misc/cxl.h+22−0
@@ -32,10 +32,32 @@ struct cxl_ioctl_start_work { · 31 unmodified lines
32#define CXL_START_WORK_ALL (CXL_START_WORK_AMR |\32#define CXL_START_WORK_ALL (CXL_START_WORK_AMR |\
33 CXL_START_WORK_NUM_IRQS)33 CXL_START_WORK_NUM_IRQS)
34 34
35
36/* Possible modes that an afu can be in */
37#define CXL_MODE_DEDICATED 0x1
38#define CXL_MODE_DIRECTED 0x2
39
40/* possible flags for the cxl_afu_id flags field */
41#define CXL_AFUID_FLAG_SLAVE 0x1 /* In directed-mode afu is in slave mode */
42
43struct cxl_afu_id {
44 __u64 flags; /* One of CXL_AFUID_FLAG_X */
45 __u32 card_id;
46 __u32 afu_offset;
47 __u32 afu_mode; /* one of the CXL_MODE_X */
48 __u32 reserved1;
49 __u64 reserved2;
50 __u64 reserved3;
51 __u64 reserved4;
52 __u64 reserved5;
53 __u64 reserved6;
54};
55
35/* ioctl numbers */56/* ioctl numbers */
36#define CXL_MAGIC 0xCA57#define CXL_MAGIC 0xCA
37#define CXL_IOCTL_START_WORK _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work)58#define CXL_IOCTL_START_WORK _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work)
38#define CXL_IOCTL_GET_PROCESS_ELEMENT _IOR(CXL_MAGIC, 0x01, __u32)59#define CXL_IOCTL_GET_PROCESS_ELEMENT _IOR(CXL_MAGIC, 0x01, __u32)
60#define CXL_IOCTL_GET_AFU_ID _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id)
39 61
40#define CXL_READ_MIN_SIZE 0x1000 /* 4K */62#define CXL_READ_MIN_SIZE 0x1000 /* 4K */
41 63