]> git.itanic.dy.fi Git - linux-stable/commitdiff
cxl/mbox: Deprecate poison commands
authorDan Williams <dan.j.williams@intel.com>
Tue, 18 Apr 2023 17:39:01 +0000 (10:39 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sat, 22 Apr 2023 21:41:30 +0000 (14:41 -0700)
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 87815ee9d006 ("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>
drivers/cxl/core/mbox.c
include/uapi/linux/cxl_mem.h

index f2addb4571723d91764b349c748d75e5502ace05..938cff2c948e46456222ed8632403edbf1d6b0a1 100644 (file)
@@ -61,12 +61,7 @@ static struct cxl_mem_command cxl_mem_commands[CXL_MEM_COMMAND_ID_MAX] = {
        CXL_CMD(SET_ALERT_CONFIG, 0xc, 0, 0),
        CXL_CMD(GET_SHUTDOWN_STATE, 0, 0x1, 0),
        CXL_CMD(SET_SHUTDOWN_STATE, 0x1, 0, 0),
-       CXL_CMD(GET_POISON, 0x10, CXL_VARIABLE_PAYLOAD, 0),
-       CXL_CMD(INJECT_POISON, 0x8, 0, 0),
-       CXL_CMD(CLEAR_POISON, 0x48, 0, 0),
        CXL_CMD(GET_SCAN_MEDIA_CAPS, 0x10, 0x4, 0),
-       CXL_CMD(SCAN_MEDIA, 0x11, 0, 0),
-       CXL_CMD(GET_SCAN_MEDIA, 0, CXL_VARIABLE_PAYLOAD, 0),
 };
 
 /*
index 86bbacf2a3156d1ec6cfe0979ef177fb88ef7558..14bc6e7421483105c7ab0fd4e664d354cc3386b1 100644 (file)
        ___C(SET_ALERT_CONFIG, "Set Alert Configuration"),                \
        ___C(GET_SHUTDOWN_STATE, "Get Shutdown State"),                   \
        ___C(SET_SHUTDOWN_STATE, "Set Shutdown State"),                   \
-       ___C(GET_POISON, "Get Poison List"),                              \
-       ___C(INJECT_POISON, "Inject Poison"),                             \
-       ___C(CLEAR_POISON, "Clear Poison"),                               \
+       ___DEPRECATED(GET_POISON, "Get Poison List"),                     \
+       ___DEPRECATED(INJECT_POISON, "Inject Poison"),                    \
+       ___DEPRECATED(CLEAR_POISON, "Clear Poison"),                      \
        ___C(GET_SCAN_MEDIA_CAPS, "Get Scan Media Capabilities"),         \
-       ___C(SCAN_MEDIA, "Scan Media"),                                   \
-       ___C(GET_SCAN_MEDIA, "Get Scan Media Results"),                   \
+       ___DEPRECATED(SCAN_MEDIA, "Scan Media"),                          \
+       ___DEPRECATED(GET_SCAN_MEDIA, "Get Scan Media Results"),          \
        ___C(MAX, "invalid / last command")
 
 #define ___C(a, b) CXL_MEM_COMMAND_ID_##a
+#define ___DEPRECATED(a, b) CXL_MEM_DEPRECATED_ID_##a
 enum { CXL_CMDS };
 
 #undef ___C
+#undef ___DEPRECATED
 #define ___C(a, b) { b }
+#define ___DEPRECATED(a, b) { "Deprecated " b }
 static const struct {
        const char *name;
 } cxl_command_names[] __attribute__((__unused__)) = { CXL_CMDS };
@@ -68,6 +71,28 @@ static const struct {
  */
 
 #undef ___C
+#undef ___DEPRECATED
+#define ___C(a, b) (0)
+#define ___DEPRECATED(a, b) (1)
+
+static const __u8 cxl_deprecated_commands[]
+       __attribute__((__unused__)) = { CXL_CMDS };
+
+/*
+ * Here's how this actually breaks out:
+ * cxl_deprecated_commands[] = {
+ *     [CXL_MEM_COMMAND_ID_INVALID] = 0,
+ *     [CXL_MEM_COMMAND_ID_IDENTIFY] = 0,
+ *     ...
+ *     [CXL_MEM_DEPRECATED_ID_GET_POISON] = 1,
+ *     [CXL_MEM_DEPRECATED_ID_INJECT_POISON] = 1,
+ *     [CXL_MEM_DEPRECATED_ID_CLEAR_POISON] = 1,
+ *     ...
+ * };
+ */
+
+#undef ___C
+#undef ___DEPRECATED
 
 /**
  * struct cxl_command_info - Command information returned from a query.