From: Corey Minyard <minyard@acm.org>
To: "Marc-André Lureau" <mlureau@redhat.com>
Cc: qemu-devel@nongnu.org, Corey Minyard <cminyard@mvista.com>
Subject: Re: [Qemu-devel] [PATCH v2 1/3] ipmi_bmc_sim: Add a proper unrealize function
Date: Fri, 22 Jul 2016 07:14:04 -0500 [thread overview]
Message-ID: <57920E0C.3000009@acm.org> (raw)
In-Reply-To: <48077833.7262631.1469179348215.JavaMail.zimbra@redhat.com>
On 07/22/2016 04:22 AM, Marc-André Lureau wrote:
> Hi
>
> ----- Original Message -----
>> From: Corey Minyard <cminyard@mvista.com>
>>
>> Add an unrealize function to free the timer allocated in the
>> realize function, unregsiter the vmstate, and free any
>> pending messages.
> I don't know how to test this either, the device seems to be hotpluggable, but doing device_del crashes qemu. Looks like it would be worth fixing that too (even better would be to automate this kind of test for all devices, but that's just some thought)
>
That's actually a bug. This device's hot plug should be tied to it's
interface's hot plug, which is a separate device. I was trying to
unplug the interface, which is on an ISA bus, not the BMC.
>> 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.
> You may want to split this in a seperate patch
Yeah, you are right.
Thanks,
-corey
>
>> Signed-off-by: Corey Minyard <cminyard@mvista.com>
>> Cc: Marc-André Lureau <mlureau@redhat.com>
>> ---
>> hw/ipmi/ipmi_bmc_sim.c | 22 ++++++++++++++++------
>> 1 file changed, 16 insertions(+), 6 deletions(-)
>>
>> 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);
>> + }
>> +}
>> +
> Otherwise, for completeness, this looks good so
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>
>> 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;
>> }
>>
>> --
>> 2.7.4
>>
>>
next prev parent reply other threads:[~2016-07-22 12:14 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-21 16:49 [Qemu-devel] [PATCH v2 0/3] Handle freeing data in some devices minyard
2016-07-21 16:49 ` [Qemu-devel] [PATCH v2 1/3] ipmi_bmc_sim: Add a proper unrealize function minyard
2016-07-22 9:22 ` Marc-André Lureau
2016-07-22 12:14 ` Corey Minyard [this message]
2016-07-21 16:49 ` [Qemu-devel] [PATCH v2 2/3] wdt_i6300esb: Free timer minyard
2016-07-21 16:49 ` [Qemu-devel] [PATCH v2 3/3] wdt_ib700: " minyard
2016-07-22 9:26 ` Marc-André Lureau
2016-07-22 10:12 ` Richard W.M. Jones
2016-07-22 12:12 ` Corey Minyard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57920E0C.3000009@acm.org \
--to=minyard@acm.org \
--cc=cminyard@mvista.com \
--cc=mlureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.