]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
hw/cxl: Correctly handle variable sized mailbox input payloads.
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 17 Aug 2022 14:57:59 +0000 (15:57 +0100)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 17 Aug 2022 17:08:11 +0000 (13:08 -0400)
A placeholder of ~0 is used to indicate variable payload size.
Whilst the checks for output payload correctly took this into
account, those for input payload did not.

This results in failure of the Set LSA command.

Fixes: 464e14ac43 ("hw/cxl/device: Implement basic mailbox (8.2.8.4)")
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Message-Id: <20220817145759.32603-4-Jonathan.Cameron@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/cxl/cxl-mailbox-utils.c

index 3cea8b17a8ae90f85299a7724847c6d975b3ed7c..bc1bb18844bef6c29f85aad7eb3b2506b66827e5 100644 (file)
@@ -425,7 +425,7 @@ void cxl_process_mailbox(CXLDeviceState *cxl_dstate)
     cxl_cmd = &cxl_cmd_set[set][cmd];
     h = cxl_cmd->handler;
     if (h) {
-        if (len == cxl_cmd->in) {
+        if (len == cxl_cmd->in || cxl_cmd->in == ~0) {
             cxl_cmd->payload = cxl_dstate->mbox_reg_state +
                 A_CXL_DEV_CMD_PAYLOAD;
             ret = (*h)(cxl_cmd, cxl_dstate, &len);