From patchwork Thu Jul 21 16:49:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 72582 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp564563qga; Thu, 21 Jul 2016 10:31:32 -0700 (PDT) X-Received: by 10.55.102.85 with SMTP id a82mr72683159qkc.173.1469122292786; Thu, 21 Jul 2016 10:31:32 -0700 (PDT) Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id c124si5683381qkd.87.2016.07.21.10.31.32 for (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 21 Jul 2016 10:31:32 -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; 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]:42321 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQHoq-0007Vr-6c for patch@linaro.org; Thu, 21 Jul 2016 13:31:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50784) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQH9z-0004YJ-H0 for qemu-devel@nongnu.org; Thu, 21 Jul 2016 12:49:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bQH9v-0004hn-DM for qemu-devel@nongnu.org; Thu, 21 Jul 2016 12:49:19 -0400 Received: from mail-oi0-x241.google.com ([2607:f8b0:4003:c06::241]:33479) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQH9v-0004hg-5L for qemu-devel@nongnu.org; Thu, 21 Jul 2016 12:49:15 -0400 Received: by mail-oi0-x241.google.com with SMTP id l9so8214669oih.0 for ; Thu, 21 Jul 2016 09:49:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2NsthgIHZ5jUo23xEPX/yfbUTcTwIzn8XucfwJVtm0M=; b=MJgTX9KV8YbG2YQ5PuaYLbDCjYZgmCpxPyQrkhNij+s6Xy69foAOi3hPhJiPBWd8KX wG2ZTiWx6B3Cc5wbZqKag6TqX/oGwW4Ko5biVB2xDs5vSolmO12m0cR4P19T1NhUDKhp i4sjINfe2wF2FfM47OxfWVwXbd6WOGKp00mT47QzJr5vLSEALcL+dhOtbhn+xQo8miIZ g3+tkYHhpWf720EdZr7EGEqrl8SqPbdMiVnN/GVRXV8IU+HCtr5n14TYrnv2AHyG1Czf b6acqC1zoPBh3PGxhmsskkj1jLZ91uvKLXNLdO9Vz4tOkQhewLgmKAqpZgXemKQfMjwc /kew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=2NsthgIHZ5jUo23xEPX/yfbUTcTwIzn8XucfwJVtm0M=; b=MLFn/aEd39/WwgYHUXjisOJXQvowEwMWWeMjQMoot8pFtrGQiPkWf9DDS1yb9VCcj8 9WkPKUHt5OT1Gt7dHUATKnAj0kavG+v24qMq+bKoyAZ++fLxtF3435G3dO77qqS/lG4U Mue0n/wE60NXJ80HedGnMn76KSczvBgu7VFBSobegfif7PSpW5OfWEMBP8UDSpgRId5j NVFJksibGEVDSRMzepq1qFhnyS0eEQvsyZl5V37McAHW3EygtlNFyRCcZu/sg7nrghkv p1QqVmhPwx8VfAyqWoUeEUXs10Y0AYCJEuMf79wetaeFICkHiUntoGNucqMMwmzGYdYc JrVA== X-Gm-Message-State: ALyK8tKD/U9k6Y92ROFFWWxYvIi3PKUur6BX7KdH9NlcsTUrsoAJJOiVtsPMvtg7Yw23+g== X-Received: by 10.157.4.46 with SMTP id 43mr30586731otc.167.1469119754324; Thu, 21 Jul 2016 09:49:14 -0700 (PDT) Received: from serve.minyard.net ([173.64.235.97]) by smtp.gmail.com with ESMTPSA id f203sm3551844oib.12.2016.07.21.09.49.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Jul 2016 09:49:13 -0700 (PDT) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id C3B4F5F8; Thu, 21 Jul 2016 11:49:12 -0500 (CDT) Received: by t430.minyard.net (Postfix, from userid 1000) id 81F5E302C07; Thu, 21 Jul 2016 11:49:11 -0500 (CDT) From: minyard@acm.org To: qemu-devel@nongnu.org Date: Thu, 21 Jul 2016 11:49:07 -0500 Message-Id: <1469119749-31181-2-git-send-email-minyard@acm.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1469119749-31181-1-git-send-email-minyard@acm.org> References: <1469119749-31181-1-git-send-email-minyard@acm.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:4003:c06::241 Subject: [Qemu-devel] [PATCH v2 1/3] ipmi_bmc_sim: Add a proper unrealize function 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 , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , minyard@acm.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Corey Minyard Add an unrealize function to free the timer allocated in the realize function, unregsiter the vmstate, and free any pending messages. Also, get rid of the unnecessary mutex, it was a vestige of something else that was not done. That way we don't have to free it. Signed-off-by: Corey Minyard Cc: Marc-André Lureau --- hw/ipmi/ipmi_bmc_sim.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) -- 2.7.4 diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c index dc9c14c..fe92b93 100644 --- a/hw/ipmi/ipmi_bmc_sim.c +++ b/hw/ipmi/ipmi_bmc_sim.c @@ -217,7 +217,6 @@ struct IPMIBmcSim { /* Odd netfns are for responses, so we only need the even ones. */ const IPMINetfn *netfns[MAX_NETFNS / 2]; - QemuMutex lock; /* We allow one event in the buffer */ uint8_t evtbuf[16]; @@ -940,7 +939,6 @@ static void get_msg(IPMIBmcSim *ibs, { IPMIRcvBufEntry *msg; - qemu_mutex_lock(&ibs->lock); if (QTAILQ_EMPTY(&ibs->rcvbufs)) { rsp_buffer_set_error(rsp, 0x80); /* Queue empty */ goto out; @@ -960,7 +958,6 @@ static void get_msg(IPMIBmcSim *ibs, } out: - qemu_mutex_unlock(&ibs->lock); return; } @@ -1055,11 +1052,9 @@ static void send_msg(IPMIBmcSim *ibs, end_msg: msg->buf[msg->len] = ipmb_checksum(msg->buf, msg->len, 0); msg->len++; - qemu_mutex_lock(&ibs->lock); QTAILQ_INSERT_TAIL(&ibs->rcvbufs, msg, entry); ibs->msg_flags |= IPMI_BMC_MSG_FLAG_RCV_MSG_QUEUE; k->set_atn(s, 1, attn_irq_enabled(ibs)); - qemu_mutex_unlock(&ibs->lock); } static void do_watchdog_reset(IPMIBmcSim *ibs) @@ -1753,7 +1748,6 @@ static void ipmi_sim_realize(DeviceState *dev, Error **errp) unsigned int i; IPMIBmcSim *ibs = IPMI_BMC_SIMULATOR(b); - qemu_mutex_init(&ibs->lock); QTAILQ_INIT(&ibs->rcvbufs); ibs->bmc_global_enables = (1 << IPMI_BMC_EVENT_LOG_BIT); @@ -1786,12 +1780,28 @@ static void ipmi_sim_realize(DeviceState *dev, Error **errp) vmstate_register(NULL, 0, &vmstate_ipmi_sim, ibs); } +static void ipmi_sim_unrealize(DeviceState *dev, Error **errp) +{ + IPMIBmc *b = IPMI_BMC(dev); + IPMIRcvBufEntry *msg, *tmp; + IPMIBmcSim *ibs = IPMI_BMC_SIMULATOR(b); + + vmstate_unregister(NULL, &vmstate_ipmi_sim, ibs); + timer_del(ibs->timer); + timer_free(ibs->timer); + QTAILQ_FOREACH_SAFE(msg, &ibs->rcvbufs, entry, tmp) { + QTAILQ_REMOVE(&ibs->rcvbufs, msg, entry); + g_free(msg); + } +} + static void ipmi_sim_class_init(ObjectClass *oc, void *data) { DeviceClass *dc = DEVICE_CLASS(oc); IPMIBmcClass *bk = IPMI_BMC_CLASS(oc); dc->realize = ipmi_sim_realize; + dc->unrealize = ipmi_sim_unrealize; bk->handle_command = ipmi_sim_handle_command; }