From patchwork Mon Aug 20 20:57:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 144669 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4433432ljj; Mon, 20 Aug 2018 13:58:50 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZj9u3h/oPhPiR90K0tLPb7al0riWOM9lq3O3vdc+a9tpHei0N/rPwCTdW+dw7zkEquvr6d X-Received: by 2002:a37:8581:: with SMTP id h123-v6mr4505334qkd.237.1534798730758; Mon, 20 Aug 2018 13:58:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534798730; cv=none; d=google.com; s=arc-20160816; b=Ph875sRWnePXyBgh3j9uWdd901yxphPo8qir0LyTfoYakbsqsm83is7uxGyGBttt0G B6P9dLb/Jtz/9IxMGg62ZDeSFZbkLcQqhoVUREJp1UPHFXi/rRwUX/nDGb2059AK4xxD u0cNUoXWY9KOoLAQL1T31jD4BU0iRxIQdagvT450wlvhehXIxP4QSOcZmuOfJ+RP8A+c 8ISCfEVs5ZScUi0Y4TEetMLYuFv1gQfek2JjNnj8Dtt25rw4o+WVSxlFkfN9+gqPW1X1 HOiT2kriz50Q3x4AURFHhYQS1TtO7tJrwz5C0Li0/zkd8rgMtOGrTG/KAlzraE8w+Be/ 11XQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:message-id:date:to:from :dkim-signature:arc-authentication-results; bh=pF/s16OrBRRj2O0pBakfB7ldbhv3CIWoOADgCW5OgZU=; b=a/6VT5AxKvKoK6HdACd0dOk04Gk3ML+OoWjlPY4Ti/BrikrFUxP9n+Ijk4MKyyX2i2 f1lSAnkZ1n/6VRft/QHqUdK2ok8+LMl7Lckap6OOPa18cAGgNkJhH6IJkYDC/t22s6ht FAz2uZgj9lTzKf4G7ErksvTqCavaN+lnQDnmi/Qpq2cqKy6ujPbTXrdlVFjZdR4ZkFym Okm4t9fl8V7t5EmYXVw9lUZFjFTFi9omvMVH+oBi5Cq5Dzx4j7Hlqoo2XJVBIbedxkKK l5iW/R69VinvVR61lax3NQdQRCiv4xwQwZuFEq8Ontbl4a2FFchYfqsBcM3/YxZqoDa0 G8bA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=qhuSfJE3; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id h38-v6si5745832qtf.71.2018.08.20.13.58.50 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 20 Aug 2018 13:58:50 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=qhuSfJE3; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([::1]:49292 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frrGE-0007vq-AS for patch@linaro.org; Mon, 20 Aug 2018 16:58:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43065) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frrEy-0007dE-SW for qemu-devel@nongnu.org; Mon, 20 Aug 2018 16:57:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frrEv-0000qb-Jk for qemu-devel@nongnu.org; Mon, 20 Aug 2018 16:57:32 -0400 Received: from mail-oi0-x236.google.com ([2607:f8b0:4003:c06::236]:34387) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1frrEv-0000pt-AA for qemu-devel@nongnu.org; Mon, 20 Aug 2018 16:57:29 -0400 Received: by mail-oi0-x236.google.com with SMTP id 13-v6so28321626ois.1 for ; Mon, 20 Aug 2018 13:57:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=pF/s16OrBRRj2O0pBakfB7ldbhv3CIWoOADgCW5OgZU=; b=qhuSfJE3nrtyE4XwXagWIwTGlTCVG0pMNqH2SCjp4wgLeqVU6wxvXEYDRUJP7Giyp2 L+gtECzxMgeBy0yVoaeW+nncXb2iSnBv5mnM2drQfYZqkGhaCWPUXFxi1g7KTLFvCLRf FWnpNealA/9rsAD8D4zA9hxFQsLNXquI1dgoRkGx4EzINW/r2Vg6qyHLs9dp4gH9fg+n EZcep2obUgQVXA6IfBIWIfe0SWo1LX6tYqjWz5VY1t1gcjJ5QyjY4QxbbecvkWfwkbME QQXMuSbbo79gobCzd/u9CdLKWo1Z6Bdjzl6HuhsJzEw0UPYL9PlOds+fWGHh9f+5TM2P 6TgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=pF/s16OrBRRj2O0pBakfB7ldbhv3CIWoOADgCW5OgZU=; b=dzJt6VefqHdivHQfAEH5kWkqKv9bmraNDGul9VpViKIMX2FfUwmbICXYa/lZIT/o69 eebKxf9g82kVZkO5wPRaJAp2g4w9s7o+RHYvzKMFhtmSZXuU3oyqmaAmmu9j5RkS6kuV CCPIYrKoBq1RgYfzHwwCychMrU6hPKTtzLmJehyGrHRvFrCeSi2fZ1kZYl1mcRiDOLf/ VTB1XSBKv4AakMRkSHyzDLOOu+uGBpCrgbm4TM4fKROxTEJQUWykkE3iCnUhEfVE3tbo yqfaV9HpLXcXtSPP92iBr8wmSFtZ1Z1gVMH+SCWZ80ZpfAu0QJfg2on56Z+x8/fKXHtA h2bQ== X-Gm-Message-State: AOUpUlHamaHLRsyZImWiayANF4F/l0Y/aQp0Dzz7YGNK5fRlKK1Cb5Xl CgKUqinpOB7WcgvEe3rDQQ== X-Received: by 2002:aca:b541:: with SMTP id e62-v6mr947404oif.136.1534798648462; Mon, 20 Aug 2018 13:57:28 -0700 (PDT) Received: from serve.minyard.net ([47.184.170.128]) by smtp.gmail.com with ESMTPSA id x23-v6sm5991233oie.0.2018.08.20.13.57.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Aug 2018 13:57:27 -0700 (PDT) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id 7C51B776; Mon, 20 Aug 2018 15:57:26 -0500 (CDT) Received: by t430.minyard.net (Postfix, from userid 1000) id 235383000FF; Mon, 20 Aug 2018 15:57:26 -0500 (CDT) From: minyard@acm.org To: Paolo Bonzini , qemu-devel@nongnu.org Date: Mon, 20 Aug 2018 15:57:24 -0500 Message-Id: <1534798644-13587-1-git-send-email-minyard@acm.org> X-Mailer: git-send-email 2.7.4 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4003:c06::236 Subject: [Qemu-devel] [PATCH v2] ipmi: Use proper struct reference for BT vmstate X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Corey Minyard , "Michael S . Tsirkin" Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard The vmstate for isa_ipmi_bt was referencing into the bt structure, instead create a bt structure separate and use that. The version 1 of the BT transfer was fairly broken, if a migration occured during an IPMI operation, it is likely the migration would be corrupted because I misunderstood the VMSTATE_VBUFFER_UINT32() handling, I thought it handled transferring the length field, too. So I just remove support for that. I doubt anyone is using it at this point. This also removes the transfer of use_irq, since that should come from configuration. Signed-off-by: Corey Minyard Reviewed-by: Dr. David Alan Gilbert --- hw/ipmi/isa_ipmi_bt.c | 68 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 13 deletions(-) This is a matching patch for the IPMI BT code that matches the previous IPMI KCS change recently done. -- 2.7.4 diff --git a/hw/ipmi/isa_ipmi_bt.c b/hw/ipmi/isa_ipmi_bt.c index e946030..8bbb1fa 100644 --- a/hw/ipmi/isa_ipmi_bt.c +++ b/hw/ipmi/isa_ipmi_bt.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/log.h" #include "qapi/error.h" #include "hw/hw.h" #include "hw/ipmi/ipmi.h" @@ -450,22 +451,63 @@ static void isa_ipmi_bt_realize(DeviceState *dev, Error **errp) isa_register_ioport(isadev, &iib->bt.io, iib->bt.io_base); } -static const VMStateDescription vmstate_ISAIPMIBTDevice = { - .name = TYPE_IPMI_INTERFACE, +static int ipmi_bt_vmstate_post_load(void *opaque, int version) +{ + IPMIBT *ib = opaque; + + /* Make sure all the values are sane. */ + if (ib->outpos >= MAX_IPMI_MSG_SIZE || ib->outlen >= MAX_IPMI_MSG_SIZE || + ib->outpos >= ib->outlen) { + qemu_log_mask(LOG_GUEST_ERROR, + "ipmi:bt: vmstate transfer received bad out values: %d %d\n", + ib->outpos, ib->outlen); + ib->outpos = 0; + ib->outlen = 0; + } + + if (ib->inlen >= MAX_IPMI_MSG_SIZE) { + qemu_log_mask(LOG_GUEST_ERROR, + "ipmi:bt: vmstate transfer received bad in value: %d\n", + ib->inlen); + ib->inlen = 0; + } + + return 0; +} + +const VMStateDescription vmstate_IPMIBT = { + .name = TYPE_IPMI_INTERFACE_PREFIX "bt", .version_id = 1, .minimum_version_id = 1, + .post_load = ipmi_bt_vmstate_post_load, + .fields = (VMStateField[]) { + VMSTATE_BOOL(obf_irq_set, IPMIBT), + VMSTATE_BOOL(atn_irq_set, IPMIBT), + VMSTATE_BOOL(irqs_enabled, IPMIBT), + VMSTATE_UINT32(outpos, IPMIBT), + VMSTATE_UINT32(outlen, IPMIBT), + VMSTATE_UINT8_ARRAY(outmsg, IPMIBT, MAX_IPMI_MSG_SIZE), + VMSTATE_UINT32(inlen, IPMIBT), + VMSTATE_UINT8_ARRAY(inmsg, IPMIBT, MAX_IPMI_MSG_SIZE), + VMSTATE_UINT8(control_reg, IPMIBT), + VMSTATE_UINT8(mask_reg, IPMIBT), + VMSTATE_UINT8(waiting_rsp, IPMIBT), + VMSTATE_UINT8(waiting_seq, IPMIBT), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_ISAIPMIBTDevice = { + .name = TYPE_IPMI_INTERFACE_PREFIX "isa-bt", + .version_id = 2, + .minimum_version_id = 2, + /* + * Version 1 had messed up the array transfer, it's not even usable + * because it used VMSTATE_VBUFFER_UINT32, but it did not transfer + * the buffer length, so random things would happen. + */ .fields = (VMStateField[]) { - VMSTATE_BOOL(bt.obf_irq_set, ISAIPMIBTDevice), - VMSTATE_BOOL(bt.atn_irq_set, ISAIPMIBTDevice), - VMSTATE_BOOL(bt.use_irq, ISAIPMIBTDevice), - VMSTATE_BOOL(bt.irqs_enabled, ISAIPMIBTDevice), - VMSTATE_UINT32(bt.outpos, ISAIPMIBTDevice), - VMSTATE_VBUFFER_UINT32(bt.outmsg, ISAIPMIBTDevice, 1, NULL, bt.outlen), - VMSTATE_VBUFFER_UINT32(bt.inmsg, ISAIPMIBTDevice, 1, NULL, bt.inlen), - VMSTATE_UINT8(bt.control_reg, ISAIPMIBTDevice), - VMSTATE_UINT8(bt.mask_reg, ISAIPMIBTDevice), - VMSTATE_UINT8(bt.waiting_rsp, ISAIPMIBTDevice), - VMSTATE_UINT8(bt.waiting_seq, ISAIPMIBTDevice), + VMSTATE_STRUCT(bt, ISAIPMIBTDevice, 1, vmstate_IPMIBT, IPMIBT), VMSTATE_END_OF_LIST() } };