Message ID | 165791932983.2491387.13708346830998415266.stgit@djiang5-desk3.ch.intel.com |
---|---|
State | Superseded |
Headers | show |
Series | Introduce security commands for CXL pmem device | expand |
On Fri, 15 Jul 2022 14:08:49 -0700 Dave Jiang <dave.jiang@intel.com> wrote: > Add the emulation support for handling "Get Security State" opcode for a > CXL memory device for the cxl_test. The function will copy back device > security state bitmask to the output payload. > > Signed-off-by: Dave Jiang <dave.jiang@intel.com> > --- > tools/testing/cxl/test/mem.c | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/tools/testing/cxl/test/mem.c b/tools/testing/cxl/test/mem.c > index 723378248321..337e5a099d31 100644 > --- a/tools/testing/cxl/test/mem.c > +++ b/tools/testing/cxl/test/mem.c > @@ -11,6 +11,7 @@ > > struct mock_mdev_data { > void *lsa; > + u32 security_state; > }; > > #define LSA_SIZE SZ_128K > @@ -141,6 +142,26 @@ static int mock_id(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *cmd) > return 0; > } > > +static int mock_get_security_state(struct cxl_dev_state *cxlds, > + struct cxl_mbox_cmd *cmd) > +{ > + struct mock_mdev_data *mdata = dev_get_drvdata(cxlds->dev); > + > + if (cmd->size_in) { > + cmd->return_code = CXL_MBOX_CMD_RC_INPUT; Interestingly I don't see invalid input as a possible return code for this command in the spec. Would it be an invalid payload length? Also, is this based on current tree? For other fail cases we don't set the return code because the -EINVAL will presumably make the test fail anyway. > + return -EINVAL; > + } > + > + if (cmd->size_out != sizeof(u32)) { > + cmd->return_code = CXL_MBOX_CMD_RC_INPUT; Interesting corner. If this was a real device, I think this isn't actually an error (it's just stupid as you ask a question and don't get an answer) Makes sense to return -EINVAL from the test, but setting invalid input in the return code probably doesn't. Ignored anyway as we won't carry on anyway because of the -EINVAL. > + return -EINVAL; > + } > + > + memcpy(cmd->payload_out, &mdata->security_state, sizeof(u32)); > + > + return 0; > +} > + > static int mock_get_lsa(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *cmd) > { > struct cxl_mbox_get_lsa *get_lsa = cmd->payload_in; > @@ -233,6 +254,9 @@ static int cxl_mock_mbox_send(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd * > case CXL_MBOX_OP_GET_HEALTH_INFO: > rc = mock_health_info(cxlds, cmd); > break; > + case CXL_MBOX_OP_GET_SECURITY_STATE: > + rc = mock_get_security_state(cxlds, cmd); > + break; > default: > break; > } > >
diff --git a/tools/testing/cxl/test/mem.c b/tools/testing/cxl/test/mem.c index 723378248321..337e5a099d31 100644 --- a/tools/testing/cxl/test/mem.c +++ b/tools/testing/cxl/test/mem.c @@ -11,6 +11,7 @@ struct mock_mdev_data { void *lsa; + u32 security_state; }; #define LSA_SIZE SZ_128K @@ -141,6 +142,26 @@ static int mock_id(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *cmd) return 0; } +static int mock_get_security_state(struct cxl_dev_state *cxlds, + struct cxl_mbox_cmd *cmd) +{ + struct mock_mdev_data *mdata = dev_get_drvdata(cxlds->dev); + + if (cmd->size_in) { + cmd->return_code = CXL_MBOX_CMD_RC_INPUT; + return -EINVAL; + } + + if (cmd->size_out != sizeof(u32)) { + cmd->return_code = CXL_MBOX_CMD_RC_INPUT; + return -EINVAL; + } + + memcpy(cmd->payload_out, &mdata->security_state, sizeof(u32)); + + return 0; +} + static int mock_get_lsa(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *cmd) { struct cxl_mbox_get_lsa *get_lsa = cmd->payload_in; @@ -233,6 +254,9 @@ static int cxl_mock_mbox_send(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd * case CXL_MBOX_OP_GET_HEALTH_INFO: rc = mock_health_info(cxlds, cmd); break; + case CXL_MBOX_OP_GET_SECURITY_STATE: + rc = mock_get_security_state(cxlds, cmd); + break; default: break; }
Add the emulation support for handling "Get Security State" opcode for a CXL memory device for the cxl_test. The function will copy back device security state bitmask to the output payload. Signed-off-by: Dave Jiang <dave.jiang@intel.com> --- tools/testing/cxl/test/mem.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)