From: Peter Xu <peterx@redhat.com>
To: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Cc: qemu-devel@nongnu.org,
"Alex Williamson" <alex.williamson@redhat.com>,
"Cédric Le Goater" <clg@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"David Hildenbrand" <david@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Helge Deller" <deller@gmx.de>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"John Snow" <jsnow@redhat.com>,
qemu-block@nongnu.org, "Keith Busch" <kbusch@kernel.org>,
"Klaus Jensen" <its@irrelevant.dk>,
"Jesper Devantier" <foss@defmacro.it>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Nicholas Piggin" <npiggin@gmail.com>,
qemu-ppc@nongnu.org, "John Levon" <john.levon@nutanix.com>,
"Thanos Makatos" <thanos.makatos@nutanix.com>,
"Yanan Wang" <wangyanan55@huawei.com>,
"BALATON Zoltan" <balaton@eik.bme.hu>,
"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"David Gibson" <david@gibson.dropbear.id.au>,
"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
"Alexey Kardashevskiy" <aik@ozlabs.ru>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Fabiano Rosas" <farosas@suse.de>,
"Thomas Huth" <thuth@redhat.com>,
"Laurent Vivier" <lvivier@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Aurelien Jarno" <aurelien@aurel32.net>,
"Aleksandar Rikalo" <arikalo@gmail.com>,
"Max Filippov" <jcmvbkbc@gmail.com>,
"Hervé Poussineau" <hpoussin@reactos.org>,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
"Artyom Tarasenko" <atar4qemu@gmail.com>
Subject: Re: [PATCH 02/14] qdev: Automatically delete memory subregions
Date: Fri, 3 Oct 2025 11:26:36 -0400 [thread overview]
Message-ID: <aN_rLDLeMcvRtmAa@x1.local> (raw)
In-Reply-To: <32e36e0c-c947-4fa4-bdbf-5ef3ce6ea0a3@rsg.ci.i.u-tokyo.ac.jp>
On Fri, Oct 03, 2025 at 11:01:38PM +0900, Akihiko Odaki wrote:
> On 2025/10/03 4:40, Peter Xu wrote:
> > On Thu, Oct 02, 2025 at 03:23:10PM -0400, Peter Xu wrote:
> > > On Wed, Sep 17, 2025 at 07:32:48PM +0900, Akihiko Odaki wrote:
> > > > +static int del_memory_region(Object *child, void *opaque)
> > > > +{
> > > > + MemoryRegion *mr = (MemoryRegion *)object_dynamic_cast(child, TYPE_MEMORY_REGION);
> > > > +
> > > > + if (mr && mr->container) {
> > > > + memory_region_del_subregion(mr->container, mr);
> > > > + }
> > > > +
> > > > + return 0;
> > > > +}
> > > > +
> > > > static void device_set_realized(Object *obj, bool value, Error **errp)
> > > > {
> > > > DeviceState *dev = DEVICE(obj);
> > > > @@ -582,6 +593,7 @@ static void device_set_realized(Object *obj, bool value, Error **errp)
> > > > if (dc->unrealize) {
> > > > dc->unrealize(dev);
> > > > }
> > > > + object_child_foreach(OBJECT(dev), del_memory_region, NULL);
> > >
> > > PS: I'll keep throwing some pure questions here, again, Paolo - it doesn't
> > > need to block merging if you're confident with the general approach.
> > >
> > > Said that, a few things I still want to mention after I read this series..
> > >
> > > One thing I really feel hard to review such work is, you hardly describe
> > > the problems the series is resolving.
> > >
> > > For example, this patch proposed auto-detach MRs in unrealize() for qdev,
> > > however there's nowhere describing "what will start to work, while it
> > > doesn't", "how bad is the problem", etc.. All the rest patches are about
> > > "what we can avoid do" after this patch.
> >
> > For this part, I should be more clear on what I'm requesting on the
> > answers.
> >
> > I think I get the whole point that MRs (while still with MR refcount
> > piggypacked, as of current QEMU master does) can circular reference itself
> > if not always detached properly, so explicitly my question is about:
> >
> > - What devices / use case you encountered, that QEMU has such issue?
> > Especially, this is about after we have merged commit ac7a892fd3 "memory:
> > Fix leaks due to owner-shared MRs circular references". Asking because I
> > believe most of them should already auto-detach when owner is shared.
> >
> > - From above list of broken devices, are there any devices that are
> > hot-unpluggable (aka, high priority)? Is it a problem if we do not
> > finalize a MR if it is never removable anyway?
[1]
> >
> > >
> > > Meanwhile, the cover letter is misleading. It is:
> > >
> > > [PATCH 00/14] Fix memory region use-after-finalization
> > >
> > > I believe it's simply wrong, because the whole series is not about
> > > finalize() but unrealize(). For Device class, it also includes the exit()
> > > which will be invoked in pci_qdev_unrealize(), but that is also part of the
> > > unrealize() routine, not finalize().
>
> The subject of the cover letter "fix memory region use-after-finalization"
> is confusing. While this series has such fixes, it also contain refactoring
> patches. The cover letter says:
>
> > Patch "qdev: Automatically delete memory subregions" and the
> > succeeding patches are for refactoring, but patch "vfio-user: Do not
> > delete the subregion" does fix use-after-finalization.
>
> More concretely, patch "qdev: Automatically delete memory subregions"
> implements a common pattern of device unrealization, and the suceeding
> patches remove ad-hoc implementations of it.
>
> And since patch "hw/pci-bridge: Do not assume immediate MemoryRegion
> finalization" fixes nothing as you pointed out, only patch "vfio-user: Do
> not delete the subregion" fixes something.
>
> Without patch "vfio-user: Do not delete the subregion",
> vfio_user_msix_teardown() calls memory_region_del_subregion(). However, this
> function is called from instance_finalize, so the subregion is already
> finalized and results in a use-after-finalization scenario.
>
> Anything else is for refactoring and it's quite unlike patch "memory: Fix
> leaks due to owner-shared MRs circular references", which is a bug fix.
>
> I think I'll drop patch "hw/pci-bridge: Do not assume immediate MemoryRegion
> finalization" and rename this series simply to "qdev: Automatically delete
> memory subregions" to avoid confusion.
Yes, thanks. I went over quite a few follow up patches but I missed this
one. IMHO you can also split the only fix out, so that can be better
looked at by vfio-user developers. It'll also be easier for them to verify
if they want.
>
> > >
> > > The other question is, what if a MR has a owner that is not the device
> > > itself? There's no place enforcing this, hence a qdev can logically have
> > > some sub-objects (which may not really be qdev) that can be the owner of
> > > the memory regions. Then the device emulation will found that some MRs are
> > > auto-detached and some are not.
> > >
> > > One example that I'm aware of is this:
> > >
> > > https://lore.kernel.org/all/20250910115420.1012191-2-aesteve@redhat.com/#t
> > >
> > > TYPE_VIRTIO_SHARED_MEMORY_MAPPING is an object, not qdev here, which can be
> > > the owner of the MR.
>
> Patch "qdev: Automatically delete memory subregions" and the succeeding
> patches are for refactoring of qdev. MRs not directly owned by qdev are out
> of scope of the change.
Do you have a rough answer of above question [1], on what might suffer from
lost MRs? I sincerely want to know how much we are missing after we could
already auto-detach owner-shared MRs.
From a quick glance, at least patch 4-14 are detaching MRs that shares the
same owner. IIUC, it means at least patch 4-14 do not rely on patch 2.
Then I wonder how much patch 2 helps in real life.
There's indeed a difference though when a qdev may realize(), unrealize()
and realize() in a sequence, in which case patch 2 could help whil commit
ac7a892fd3 won't, however I don't know whether there's real use case,
either.
I also wished if there's such device, it'll have explicit detach code so
that when I debug a problem on the device I can easily see when the MRs
will be available, instead of remembering all the rules when something in
some layer will auto-detach...
Personally I think such automation adds burden to developers' mind if
there're still a bunch of MRs that are not used in this way (there
definitely are, otherwise we should be able to completely unexport
memory_region_del_subregion). But that's subjective; I believe at least
Paolo agrees with your general approach.
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2025-10-03 15:29 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-17 10:32 [PATCH 00/14] Fix memory region use-after-finalization Akihiko Odaki
2025-09-17 10:32 ` [PATCH 01/14] hw/pci-bridge: Do not assume immediate MemoryRegion finalization Akihiko Odaki
2025-10-02 18:47 ` Peter Xu
2025-10-03 13:38 ` Akihiko Odaki
2025-09-17 10:32 ` [PATCH 02/14] qdev: Automatically delete memory subregions Akihiko Odaki
2025-10-02 19:23 ` Peter Xu
2025-10-02 19:40 ` Peter Xu
2025-10-03 14:01 ` Akihiko Odaki
2025-10-03 15:26 ` Peter Xu [this message]
2025-10-10 5:55 ` Akihiko Odaki
2025-09-17 10:32 ` [PATCH 03/14] vfio-user: Do not delete the subregion Akihiko Odaki
2025-09-17 10:32 ` [PATCH 04/14] hw/char/diva-gsp: " Akihiko Odaki
2025-09-17 10:32 ` [PATCH 05/14] hw/char/serial-pci-multi: " Akihiko Odaki
2025-09-17 10:32 ` [PATCH 06/14] secondary-vga: Do not delete the subregions Akihiko Odaki
2025-09-17 10:32 ` [PATCH 07/14] cmd646: " Akihiko Odaki
2025-09-17 10:32 ` [PATCH 08/14] hw/ide/piix: " Akihiko Odaki
2025-09-17 10:32 ` [PATCH 09/14] hw/ide/via: " Akihiko Odaki
2025-09-17 10:32 ` [PATCH 10/14] hw/nvme: Do not delete the subregion Akihiko Odaki
2025-09-17 10:32 ` [PATCH 11/14] pci: Do not delete the subregions Akihiko Odaki
2025-09-17 10:32 ` [PATCH 12/14] hw/ppc/spapr_pci: " Akihiko Odaki
2025-09-17 10:32 ` [PATCH 13/14] hw/usb/hcd-ehci: " Akihiko Odaki
2025-09-17 10:33 ` [PATCH 14/14] hw/usb/hcd-xhci: " Akihiko Odaki
2025-10-02 15:03 ` [PATCH 00/14] Fix memory region use-after-finalization Paolo Bonzini
2025-10-10 10:20 ` Akihiko Odaki
2025-10-10 15:32 ` Peter Xu
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=aN_rLDLeMcvRtmAa@x1.local \
--to=peterx@redhat.com \
--cc=aik@ozlabs.ru \
--cc=alex.bennee@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=arikalo@gmail.com \
--cc=atar4qemu@gmail.com \
--cc=aurelien@aurel32.net \
--cc=balaton@eik.bme.hu \
--cc=berrange@redhat.com \
--cc=clg@redhat.com \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=david@redhat.com \
--cc=deller@gmx.de \
--cc=eduardo@habkost.net \
--cc=farosas@suse.de \
--cc=foss@defmacro.it \
--cc=harshpb@linux.ibm.com \
--cc=hpoussin@reactos.org \
--cc=its@irrelevant.dk \
--cc=jcmvbkbc@gmail.com \
--cc=jiaxun.yang@flygoat.com \
--cc=john.levon@nutanix.com \
--cc=jsnow@redhat.com \
--cc=kbusch@kernel.org \
--cc=kraxel@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mst@redhat.com \
--cc=npiggin@gmail.com \
--cc=odaki@rsg.ci.i.u-tokyo.ac.jp \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thanos.makatos@nutanix.com \
--cc=thuth@redhat.com \
--cc=wangyanan55@huawei.com \
/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.