Skip to content

Commit 3db166d

Browse files
committed
cxl/mbox: Deprecate poison commands
The CXL subsystem is adding formal mechanisms for managing device poison. Minimize the maintenance burden going forward, and maximize the investment in common tooling by deprecating direct user access to poison commands outside of CXL_MEM_RAW_COMMANDS debug scenarios. A new cxl_deprecated_commands[] list is created for querying which command ids defined in previous kernels are now deprecated. CXL Media and Poison Management commands, opcodes 0x43XX, defined in CXL 3.0 Spec, Table 8-93 are deprecated with one exception: Get Scan Media Capabilities. Keep Get Scan Media Capabilities as it simply provides information and has no impact on the device state. Effectively all of the commands defined in: commit 87815ee ("cxl/pci: Add media provisioning required commands") ...were defined prematurely and should have waited until the kernel implementation was decided. To my knowledge there are no shipping devices with poison support and no known tools that would regress with this change. Co-developed-by: Alison Schofield <alison.schofield@intel.com> Signed-off-by: Alison Schofield <alison.schofield@intel.com> Link: https://lore.kernel.org/r/652197e9bc8885e6448d989405b9e50ee9d6b0a6.1681838291.git.alison.schofield@intel.com Tested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
1 parent 09a9639 commit 3db166d

2 files changed

Lines changed: 30 additions & 10 deletions

File tree

drivers/cxl/core/mbox.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,7 @@ static struct cxl_mem_command cxl_mem_commands[CXL_MEM_COMMAND_ID_MAX] = {
6161
CXL_CMD(SET_ALERT_CONFIG, 0xc, 0, 0),
6262
CXL_CMD(GET_SHUTDOWN_STATE, 0, 0x1, 0),
6363
CXL_CMD(SET_SHUTDOWN_STATE, 0x1, 0, 0),
64-
CXL_CMD(GET_POISON, 0x10, CXL_VARIABLE_PAYLOAD, 0),
65-
CXL_CMD(INJECT_POISON, 0x8, 0, 0),
66-
CXL_CMD(CLEAR_POISON, 0x48, 0, 0),
6764
CXL_CMD(GET_SCAN_MEDIA_CAPS, 0x10, 0x4, 0),
68-
CXL_CMD(SCAN_MEDIA, 0x11, 0, 0),
69-
CXL_CMD(GET_SCAN_MEDIA, 0, CXL_VARIABLE_PAYLOAD, 0),
7065
};
7166

7267
/*

include/uapi/linux/cxl_mem.h

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,22 @@
4040
___C(SET_ALERT_CONFIG, "Set Alert Configuration"), \
4141
___C(GET_SHUTDOWN_STATE, "Get Shutdown State"), \
4242
___C(SET_SHUTDOWN_STATE, "Set Shutdown State"), \
43-
___C(GET_POISON, "Get Poison List"), \
44-
___C(INJECT_POISON, "Inject Poison"), \
45-
___C(CLEAR_POISON, "Clear Poison"), \
43+
___DEPRECATED(GET_POISON, "Get Poison List"), \
44+
___DEPRECATED(INJECT_POISON, "Inject Poison"), \
45+
___DEPRECATED(CLEAR_POISON, "Clear Poison"), \
4646
___C(GET_SCAN_MEDIA_CAPS, "Get Scan Media Capabilities"), \
47-
___C(SCAN_MEDIA, "Scan Media"), \
48-
___C(GET_SCAN_MEDIA, "Get Scan Media Results"), \
47+
___DEPRECATED(SCAN_MEDIA, "Scan Media"), \
48+
___DEPRECATED(GET_SCAN_MEDIA, "Get Scan Media Results"), \
4949
___C(MAX, "invalid / last command")
5050

5151
#define ___C(a, b) CXL_MEM_COMMAND_ID_##a
52+
#define ___DEPRECATED(a, b) CXL_MEM_DEPRECATED_ID_##a
5253
enum { CXL_CMDS };
5354

5455
#undef ___C
56+
#undef ___DEPRECATED
5557
#define ___C(a, b) { b }
58+
#define ___DEPRECATED(a, b) { "Deprecated " b }
5659
static const struct {
5760
const char *name;
5861
} cxl_command_names[] __attribute__((__unused__)) = { CXL_CMDS };
@@ -68,6 +71,28 @@ static const struct {
6871
*/
6972

7073
#undef ___C
74+
#undef ___DEPRECATED
75+
#define ___C(a, b) (0)
76+
#define ___DEPRECATED(a, b) (1)
77+
78+
static const __u8 cxl_deprecated_commands[]
79+
__attribute__((__unused__)) = { CXL_CMDS };
80+
81+
/*
82+
* Here's how this actually breaks out:
83+
* cxl_deprecated_commands[] = {
84+
* [CXL_MEM_COMMAND_ID_INVALID] = 0,
85+
* [CXL_MEM_COMMAND_ID_IDENTIFY] = 0,
86+
* ...
87+
* [CXL_MEM_DEPRECATED_ID_GET_POISON] = 1,
88+
* [CXL_MEM_DEPRECATED_ID_INJECT_POISON] = 1,
89+
* [CXL_MEM_DEPRECATED_ID_CLEAR_POISON] = 1,
90+
* ...
91+
* };
92+
*/
93+
94+
#undef ___C
95+
#undef ___DEPRECATED
7196

7297
/**
7398
* struct cxl_command_info - Command information returned from a query.

0 commit comments

Comments
 (0)