From: Markus Armbruster <armbru@redhat.com>
To: Ladi Prosek <lprosek@redhat.com>
Cc: "Geoffrey McRae" <geoff@hostfission.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 4/4] ivshmem: Disable irqfd on device reset
Date: Sat, 09 Dec 2017 08:09:50 +0100 [thread overview]
Message-ID: <87indg74xt.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <CABdb737A3bOdxychRQAaEYmKPLt3SpUFU9UxHM9okmt2jURF2w@mail.gmail.com> (Ladi Prosek's message of "Fri, 8 Dec 2017 18:34:45 +0100")
Ladi Prosek <lprosek@redhat.com> writes:
> On Fri, Dec 8, 2017 at 6:28 PM, Markus Armbruster <armbru@redhat.com> wrote:
>> Ladi Prosek <lprosek@redhat.com> writes:
>>
>>> On Fri, Dec 8, 2017 at 2:36 PM, Markus Armbruster <armbru@redhat.com> wrote:
>>>> Ladi Prosek <lprosek@redhat.com> writes:
>>>>
>>>>> The effects of ivshmem_enable_irqfd() was not undone on device reset.
>>>>>
>>>>> This manifested as:
>>>>> ivshmem_add_kvm_msi_virq: Assertion `!s->msi_vectors[vector].pdev' failed.
>>>>>
>>>>> when irqfd was enabled before reset and then enabled again after reset, making
>>>>> ivshmem_enable_irqfd() run for the second time.
>>>>>
>>>>> To reproduce, run:
>>>>>
>>>>> ivshmem-server
>>>>>
>>>>> and QEMU with:
>>>>>
>>>>> -device ivshmem-doorbell,chardev=iv
>>>>> -chardev socket,path=/tmp/ivshmem_socket,id=iv
>>>>>
>>>>> then install the Windows driver, at the time of writing available at:
>>>>>
>>>>> https://github.com/virtio-win/kvm-guest-drivers-windows/tree/master/ivshmem
>>>>>
>>>>> and crash-reboot the guest by inducing a BSOD.
>>>>>
>>>>> Signed-off-by: Ladi Prosek <lprosek@redhat.com>
>>>>> ---
>>>>> hw/misc/ivshmem.c | 24 +++++++++++++-----------
>>>>> 1 file changed, 13 insertions(+), 11 deletions(-)
>>>>>
>>>>> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
>>>>> index d1bb246d12..4be0d2627b 100644
>>>>> --- a/hw/misc/ivshmem.c
>>>>> +++ b/hw/misc/ivshmem.c
>>>>> @@ -758,17 +758,6 @@ static void ivshmem_msix_vector_use(IVShmemState *s)
>>>>> }
>>>>> }
>>>>>
>>>>> -static void ivshmem_reset(DeviceState *d)
>>>>> -{
>>>>> - IVShmemState *s = IVSHMEM_COMMON(d);
>>>>> -
>>>>> - s->intrstatus = 0;
>>>>> - s->intrmask = 0;
>>>>> - if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
>>>>> - ivshmem_msix_vector_use(s);
>>>>> - }
>>>>> -}
>>>>> -
>>>>> static int ivshmem_setup_interrupts(IVShmemState *s, Error **errp)
>>>>> {
>>>>> /* allocate QEMU callback data for receiving interrupts */
>>>>> @@ -855,6 +844,19 @@ static void ivshmem_disable_irqfd(IVShmemState *s)
>>>>>
>>>>> }
>>>>>
>>>>> +static void ivshmem_reset(DeviceState *d)
>>>>> +{
>>>>> + IVShmemState *s = IVSHMEM_COMMON(d);
>>>>> +
>>>>> + ivshmem_disable_irqfd(s);
>>>>> +
>>>>> + s->intrstatus = 0;
>>>>> + s->intrmask = 0;
>>>>> + if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
>>>>> + ivshmem_msix_vector_use(s);
>>>>> + }
>>>>> +}
>>>>> +
>>>>> static void ivshmem_write_config(PCIDevice *pdev, uint32_t address,
>>>>> uint32_t val, int len)
>>>>> {
>>>>
>>>> Why are you moving ivshmem_reset()? Makes the actual change harder to
>>>> see than necessary.
>>>
>>> ivshmem_disable_irqfd() is declared after ivshmem_reset() in the
>>> source file. I generally prefer to order static functions
>>> topologically if possible. If you'd prefer adding a forward decl
>>> instead (fewer lines touched, easier to bisect?) I can certainly do
>>> that. Thanks!
>>
>> Well, it compiles before your patch, your patch doesn't add any calls,
>> so I can't quite see why a forward declaration would be needed.
>
> It adds a call to ivshmem_disable_irqfd().
Note to self: patch review on Friday late afternoon is a bad idea.
I'd prefer the forward declaration. Thanks!
prev parent reply other threads:[~2017-12-09 7:10 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-08 7:45 [Qemu-devel] [PATCH v3 0/4] ivshmem: MSI bug fixes Ladi Prosek
2017-12-08 7:45 ` [Qemu-devel] [PATCH v3 1/4] ivshmem: Don't update non-existent MSI routes Ladi Prosek
2017-12-08 7:45 ` [Qemu-devel] [PATCH v3 2/4] ivshmem: Always remove irqfd notifiers Ladi Prosek
2017-12-08 7:45 ` [Qemu-devel] [PATCH v3 3/4] ivshmem: Improve MSI irqfd error handling Ladi Prosek
2017-12-08 7:45 ` [Qemu-devel] [PATCH v3 4/4] ivshmem: Disable irqfd on device reset Ladi Prosek
2017-12-08 13:36 ` Markus Armbruster
2017-12-08 13:44 ` Ladi Prosek
2017-12-08 16:24 ` Eric Blake
2017-12-08 17:28 ` Markus Armbruster
2017-12-08 17:34 ` Ladi Prosek
2017-12-09 7:09 ` Markus Armbruster [this message]
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=87indg74xt.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=geoff@hostfission.com \
--cc=lprosek@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@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.