From patchwork Wed Feb 14 18:23:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 128373 Delivered-To: patch@linaro.org Received: by 10.46.124.24 with SMTP id x24csp897935ljc; Wed, 14 Feb 2018 10:24:25 -0800 (PST) X-Google-Smtp-Source: AH8x227WLZkBC5UPoEJ7395OeakmW4aTXbpjJbJn8myJ4jfRkKGOZWXI0sie7vWjcG/YJHkxLPnM X-Received: by 10.129.55.71 with SMTP id e68mr103550ywa.29.1518632665311; Wed, 14 Feb 2018 10:24:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518632665; cv=none; d=google.com; s=arc-20160816; b=tLkUgsxdaZcCA671i3FLib1mAHheEqXoHO5PcNh1bT3MHmCcZu7arWMzUW/UjHPL83 0t403yW6idkpBVLUJ/pdNQf3xDpzRN8M8VcgR25iPlKtbJ2iMrWyRn0lUtUkk9pi1XRP S2AiYGBFJLG4TxbWmOYPBqSSqUFpdvBL43LPQVYM62RLJyY4oj278QVCeFCe8KAge1NO xfcEv6MXA3/lcHKC/fspd5nh0If3s4XydAsrh2tsuc3q4zVlCk+XS+B9sYdcBGllQCFH uvW4VeWGL6nQUGwK85v0m1YlXeeTVRd8nvBWrpnhxxXOKcsOUSNFJDAw6sZPkWhZUtXz nuPA== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=M5d+tyFIlbfw72o2CoRuK3fqwH2wjZqt4/GUEETwgYg=; b=LMYkjZGFgUHjwRg6Nhu0MIygglh62CtscoQzGtQ4GvjmY1xSWydy90TLzhis2YfSzA 5L/4BvY33jxIWOkSbV1OTdxwxrUpkyr7lH/np24CGriq6ZWPUk7zg/V9lnQpyC3Ymeik bQhUWsmR0jc5gchxq9sa6m+3o/eVWe8mh3/dcyjX0/B3ctpHa541erepQlCOyXC630Ll iMM+XVx2EfuXEoikz/9X2oomg69F0PjupemNGU/nLGyJFM/45Nr0yKB8DAMb8XFZl8tw 1FQfd4RqJa9eWJSbVc2BovAXKJHBXpu3mCt7IaiOnGjTPWg58JHjKCcYN0I7F8+qjBdf jXQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=sFSw0jpm; 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 a127si2416154ybg.238.2018.02.14.10.24.25 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 14 Feb 2018 10:24:25 -0800 (PST) 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=sFSw0jpm; 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]:46930 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1em1jE-0000E1-Mf for patch@linaro.org; Wed, 14 Feb 2018 13:24:24 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36329) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1em1io-0000CO-U1 for qemu-devel@nongnu.org; Wed, 14 Feb 2018 13:24:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1em1im-0003zV-Ep for qemu-devel@nongnu.org; Wed, 14 Feb 2018 13:23:58 -0500 Received: from mail-pg0-x243.google.com ([2607:f8b0:400e:c05::243]:34496) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1em1im-0003z0-6V for qemu-devel@nongnu.org; Wed, 14 Feb 2018 13:23:56 -0500 Received: by mail-pg0-x243.google.com with SMTP id m19so2255274pgn.1 for ; Wed, 14 Feb 2018 10:23:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=M5d+tyFIlbfw72o2CoRuK3fqwH2wjZqt4/GUEETwgYg=; b=sFSw0jpmcjPZqzBtPBjCfbu2BuDoa81OEZWw9pWE+cMfpjwwJrWvn9M44V/QHhdKwG fLendLkhFoYOUe8MhYnU9k9YeTKbdkCPkVLz0deFGz1MC5vzetOjyQk0cOwVTK0R2QvX IVXQHk6AKrFxd/Ph0hi0BLy+OUGz1Xt7V5jjFubSsSrntic6bpY09NLUN6cN9r8IoO07 xQ4ja07osNtwxDJj8xOEfUkYi678laT1n+QcUI/ky+7xT0xPwp0TPUbGKBNaNE0oHsqh aclp1w9Wi8wf/ZZvUhD1Cz/srLcu50CQw90sJpzt5vHuZTgaKEp4fjndK01S17GVlwDd 55kA== 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 :in-reply-to:references; bh=M5d+tyFIlbfw72o2CoRuK3fqwH2wjZqt4/GUEETwgYg=; b=nQzJR/JHbLiSZBZCN+Saxl1JbY3zFSKlw6MPkwNV++hLKlE4hRSulHqGq2LVGs0gsZ 6ebxFM/vJriT2ykcA+tJRKWZuSSrmS+FMuGYrljPMuQXlTRzZUBKL7dtwXz1fquYtFnU u6ehCNsqPLC3Qk+pjMYpmQRCQR9idK1izgAxce6wDGuMs1Or2m5JGPgHLA70pFWre5jT IVdw8e1+SrupjUxuQ176GMUMlw3uYDQMKjgRmvgEUtkn6YHdPnYZALTVS5Pzq9TO2OWM PuGQzq/yKSxmnkKoHwCf/nozfTXvXG9Coy/Ecuwn1GSebHujVIxnq9xRXxEx8tDBLNw/ mJNA== X-Gm-Message-State: APf1xPATe20xShzPXTL+L8dq4noNJ4IuSmS9huFT/ybF2ySUIgJDqtJ2 NDPl+ERGIQHK0mGsVn4jpUaRpb4= X-Received: by 10.99.107.198 with SMTP id g189mr67340pgc.299.1518632635134; Wed, 14 Feb 2018 10:23:55 -0800 (PST) Received: from serve.minyard.net ([47.184.168.85]) by smtp.gmail.com with ESMTPSA id c16sm14739499pfe.182.2018.02.14.10.23.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Feb 2018 10:23:52 -0800 (PST) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id EE9EA8C7; Wed, 14 Feb 2018 12:23:50 -0600 (CST) Received: by t430.minyard.net (Postfix, from userid 1000) id 7170B300966; Wed, 14 Feb 2018 12:23:49 -0600 (CST) From: minyard@acm.org To: qemu-devel@nongnu.org Date: Wed, 14 Feb 2018 12:23:43 -0600 Message-Id: <1518632624-29965-2-git-send-email-minyard@acm.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1518632624-29965-1-git-send-email-minyard@acm.org> References: <1518632624-29965-1-git-send-email-minyard@acm.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::243 Subject: [Qemu-devel] [PATCH v2 1/2] ipmi: Use proper struct reference for KCS 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 , "Dr . David Alan Gilbert" Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard The vmstate for isa_ipmi_kcs was referencing into the kcs structure, instead create a kcs structure separate and use that. There were also some issues in the state transfer. The inlen field was not being transferred, so if a transaction was in process during the transfer it would be messed up. And the use_irq field was transferred, but that should come from the configuration. And the name on the man VMStateDescription was incorrect, it needed to be differentiated from the BT one. To fix this, a new VMStateDescription is added that is hopefully correct, and the old one is kept (modified to remove use_irq) in a way that it can be received from the remote but will not be sent. So an upgrade should work for KCS. Signed-off-by: Corey Minyard Cc: Dr. David Alan Gilbert --- hw/ipmi/isa_ipmi_kcs.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/hw/ipmi/isa_ipmi_kcs.c b/hw/ipmi/isa_ipmi_kcs.c index 689587b..2a2784d 100644 --- a/hw/ipmi/isa_ipmi_kcs.c +++ b/hw/ipmi/isa_ipmi_kcs.c @@ -422,14 +422,86 @@ static void ipmi_isa_realize(DeviceState *dev, Error **errp) isa_register_ioport(isadev, &iik->kcs.io, iik->kcs.io_base); } -const VMStateDescription vmstate_ISAIPMIKCSDevice = { +static int ipmi_kcs_vmstate_post_load(void *opaque, int version) +{ + IPMIKCS *ik = opaque; + + /* Make sure all the values are sane. */ + if (ik->outpos >= MAX_IPMI_MSG_SIZE || ik->outlen >= MAX_IPMI_MSG_SIZE || + ik->outpos >= ik->outlen) { + ik->outpos = 0; + ik->outlen = 0; + } + + if (ik->inlen >= MAX_IPMI_MSG_SIZE) { + ik->inlen = 0; + } + + return 0; +} + +static const VMStateDescription vmstate_IPMIKCS = { + .name = TYPE_IPMI_INTERFACE_PREFIX "kcs", + .version_id = 1, + .minimum_version_id = 1, + .post_load = ipmi_kcs_vmstate_post_load, + .fields = (VMStateField[]) { + VMSTATE_BOOL(obf_irq_set, IPMIKCS), + VMSTATE_BOOL(atn_irq_set, IPMIKCS), + VMSTATE_BOOL(irqs_enabled, IPMIKCS), + VMSTATE_UINT32(outpos, IPMIKCS), + VMSTATE_UINT32(outlen, IPMIKCS), + VMSTATE_UINT8_ARRAY(outmsg, IPMIKCS, MAX_IPMI_MSG_SIZE), + VMSTATE_UINT32(inlen, IPMIKCS), + VMSTATE_UINT8_ARRAY(inmsg, IPMIKCS, MAX_IPMI_MSG_SIZE), + VMSTATE_BOOL(write_end, IPMIKCS), + VMSTATE_UINT8(status_reg, IPMIKCS), + VMSTATE_UINT8(data_out_reg, IPMIKCS), + VMSTATE_INT16(data_in_reg, IPMIKCS), + VMSTATE_INT16(cmd_reg, IPMIKCS), + VMSTATE_UINT8(waiting_rsp, IPMIKCS), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_ISAIPMIKCSDevice = { + .name = TYPE_IPMI_INTERFACE_PREFIX "isa-kcs", + .version_id = 2, + .minimum_version_id = 2, + .fields = (VMStateField[]) { + VMSTATE_STRUCT(kcs, ISAIPMIKCSDevice, 1, vmstate_IPMIKCS, IPMIKCS), + VMSTATE_END_OF_LIST() + } +}; + +/* + * Old version of the vmstate transfer that has a number of issues. + * We changed the vm state description name, so we need a separate + * structure and need to register it separately. + */ +static int ipmi_kcs_v1_vmstate_post_load(void *opaque, int version) +{ + ISAIPMIKCSDevice *iik = opaque; + + return ipmi_kcs_vmstate_post_load(&iik->kcs, version); +} + +static bool ipmi_kcs_v1_vmstate_needed(void *opaque) +{ + /* Never transmit this, it is just for receiving old versions. */ + return false; +} + +const VMStateDescription vmstate_v1_ISAIPMIKCSDevice = { .name = TYPE_IPMI_INTERFACE, .version_id = 1, .minimum_version_id = 1, + .post_load = ipmi_kcs_v1_vmstate_post_load, + .needed = ipmi_kcs_v1_vmstate_needed, .fields = (VMStateField[]) { VMSTATE_BOOL(kcs.obf_irq_set, ISAIPMIKCSDevice), VMSTATE_BOOL(kcs.atn_irq_set, ISAIPMIKCSDevice), - VMSTATE_BOOL(kcs.use_irq, ISAIPMIKCSDevice), + VMSTATE_UNUSED(1), /* Was use_irq */ VMSTATE_BOOL(kcs.irqs_enabled, ISAIPMIKCSDevice), VMSTATE_UINT32(kcs.outpos, ISAIPMIKCSDevice), VMSTATE_UINT8_ARRAY(kcs.outmsg, ISAIPMIKCSDevice, MAX_IPMI_MSG_SIZE), @@ -451,6 +523,7 @@ static void isa_ipmi_kcs_init(Object *obj) ipmi_bmc_find_and_link(obj, (Object **) &iik->kcs.bmc); vmstate_register(NULL, 0, &vmstate_ISAIPMIKCSDevice, iik); + vmstate_register(NULL, 0, &vmstate_v1_ISAIPMIKCSDevice, iik); } static void *isa_ipmi_kcs_get_backend_data(IPMIInterface *ii) From patchwork Wed Feb 14 18:23:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 128374 Delivered-To: patch@linaro.org Received: by 10.46.124.24 with SMTP id x24csp899593ljc; Wed, 14 Feb 2018 10:26:29 -0800 (PST) X-Google-Smtp-Source: AH8x225lJRbAV6lvVco6jxBKytRsgAB2o6AoNQYCT43qFm5/rUqFZZIppn8KVzdAbzgMdaBo6bYB X-Received: by 10.37.132.196 with SMTP id x4mr114958ybm.197.1518632789533; Wed, 14 Feb 2018 10:26:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518632789; cv=none; d=google.com; s=arc-20160816; b=MVUpipLtXB4O5rICuNG2mChLap2i32+05r52kVYUVDt+BOvydL/Be3BXtKxU8Ip6dw B8vcnZ7xiguzoGxDqqcwtbl+3fHgdcn2gYDL9sFSx9K0Sf6HPut1JaAhYn4MU2ZxKE48 Y0uAGqvpWJrSlCbkGf/rk69y8Xx4VU13x/HXL+vTR71OdCwfJekcmN+DYdsnI5QO/VBT rINlg4mBDphKKe/uy7iv3Eil7dIMSxgfEIwY6as12O4cYDtFIScUNHbe7qxhGmfzQNZb trYmZfGmMd7RTXQEHW00rk7gQs6Q1ckguKhlVpZo1ILzfJIvT5WY7NgHq+jV7CXUJcjA wLXA== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=xW43wuybE/Gh5PTxm4i4/rWSx+RsfVayvLsI/2XKrvQ=; b=O1kLTgEttqkvKfZUDASC1TQMqEZ8fEEF+BC67amFhHpDYHM6YFvrnhMl6Qi4GrdMly UF7ez3r2mx3ia8E1SgLjj5EiLuFylc13lp+dCdQ9GLjFMJJX0CnqMgG/ScyBSy5Ua5pI BuzpIOvHBt163ggLhppvloIrd5JS7DiFXkddNIaxxjI+2cx5D1UDml5Wuf0Imb4NpC3R 5YzzAoNbnBNFjbDLn/VshM6RHLBRJRWiSPS7VO1VY7/ega2TnphiXnXzNWtVDeoaozoB 7jBJsHcnnKWiYKmw+1sZJS0aMcgcAKqosXnmMFf8lXooVOTqSiJqNuU9KSIjcKeUdJMx yx6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=p/GtKl/X; 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 r191si386312ywh.199.2018.02.14.10.26.29 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 14 Feb 2018 10:26:29 -0800 (PST) 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=p/GtKl/X; 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]:46970 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1em1lE-0001Xb-Sg for patch@linaro.org; Wed, 14 Feb 2018 13:26:28 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1em1io-0000CN-Tl for qemu-devel@nongnu.org; Wed, 14 Feb 2018 13:23:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1em1im-0003zJ-8N for qemu-devel@nongnu.org; Wed, 14 Feb 2018 13:23:58 -0500 Received: from mail-pg0-x241.google.com ([2607:f8b0:400e:c05::241]:45805) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1em1im-0003yi-1q for qemu-devel@nongnu.org; Wed, 14 Feb 2018 13:23:56 -0500 Received: by mail-pg0-x241.google.com with SMTP id e11so2233162pgq.12 for ; Wed, 14 Feb 2018 10:23:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=xW43wuybE/Gh5PTxm4i4/rWSx+RsfVayvLsI/2XKrvQ=; b=p/GtKl/XY9hUZNneBpYPhjTAO//APGnvXW80/EO4vRCYsFBpfKEoYdejHIuof65NUU EYDj4juHBcJsWD46bi+5GNXfGHfYfx+y2kApeMDnHc5AFQ5I6g/urosemHSGslBNVJkM goPCNeEarOBMQezwVByDRiheDtFu7JFWcTbOpGFb4NU7sngCY8tnPtgadRsc8om00t7r iPsO8XbDpM1hQkyZX5IpxjocQoKqMUeDsdXdpTxyiM6yKaVbzMpN3kWYocmvLq1bPo8y jxoHqs5qzQWRHYS/y96MiFH3UAnckYHXo7E6peFpkd3lnLBq3sPikmikBP319xjd8jZ2 zPaA== 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 :in-reply-to:references; bh=xW43wuybE/Gh5PTxm4i4/rWSx+RsfVayvLsI/2XKrvQ=; b=UD7WXWXcp6tTG923SeVjWWHTqzPd27lI8sx0WAHFF2+BuO+50OI8LPm2OAuRQ6barm MyuANFbfMX289smCigeFEL4ml7ah9CSO/AtOuxNR+acDxunn+3jonUeDh9cpI8ks/fJm O26uG5JSCKAqu+8RC5ibrHa8tflW6cZ7XwsD+JHkW+jTPYEOFCJ9NZ2OOijcpkyACSns TMmBjdX8GppN+sSUnVVC84wRvEGXXmI2xPUi7T0kKbmZbPBW9QBBKuOumkLnkNzwupgF E+Jpgv7DdCNnLEDGVueCKwwBmw8th+Xkx7jyAaz2mk+bvSnXr0Gza/9+mQyr3JqMM05E +qlw== X-Gm-Message-State: APf1xPBESnO+ZxT/qpQ5E8W49VLWVTNIwnj0aVdbZ6psCW0ksiA/UnR/ GE5dO9a+qbq6aH2J0sKMdQ== X-Received: by 10.101.75.70 with SMTP id k6mr70890pgt.335.1518632634378; Wed, 14 Feb 2018 10:23:54 -0800 (PST) Received: from serve.minyard.net ([47.184.168.85]) by smtp.gmail.com with ESMTPSA id i194sm38721259pfe.145.2018.02.14.10.23.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Feb 2018 10:23:52 -0800 (PST) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id DF0C33B6; Wed, 14 Feb 2018 12:23:50 -0600 (CST) Received: by t430.minyard.net (Postfix, from userid 1000) id 80223300967; Wed, 14 Feb 2018 12:23:49 -0600 (CST) From: minyard@acm.org To: qemu-devel@nongnu.org Date: Wed, 14 Feb 2018 12:23:44 -0600 Message-Id: <1518632624-29965-3-git-send-email-minyard@acm.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1518632624-29965-1-git-send-email-minyard@acm.org> References: <1518632624-29965-1-git-send-email-minyard@acm.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::241 Subject: [Qemu-devel] [PATCH v2 2/2] 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 , "Dr . David Alan Gilbert" 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 Cc: Dr. David Alan Gilbert --- hw/ipmi/isa_ipmi_bt.c | 61 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 13 deletions(-) -- 2.7.4 diff --git a/hw/ipmi/isa_ipmi_bt.c b/hw/ipmi/isa_ipmi_bt.c index e946030..b64dce2 100644 --- a/hw/ipmi/isa_ipmi_bt.c +++ b/hw/ipmi/isa_ipmi_bt.c @@ -450,22 +450,57 @@ 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) { + ib->outpos = 0; + ib->outlen = 0; + } + + if (ib->inlen >= MAX_IPMI_MSG_SIZE) { + 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() } };