On Fri, 26 Sept 2025 at 16:16, Peter Xu <pet...@redhat.com> wrote:
>
> On Fri, Sep 26, 2025 at 10:09:29AM +0100, Peter Maydell wrote:
> > On Thu, 25 Sept 2025 at 21:06, Peter Xu <pet...@redhat.com> wrote:
> > >
> > > On Thu, Sep 25, 2025 at 10:03:45AM +0100, Peter Maydell wrote:
> > > > On Wed, 24 Sept 2025 at 22:14, Peter Xu <pet...@redhat.com> wrote:
> > > > > Side note: when I was trying to test hotplugs with i386/q35, 
> > > > > unfortunately
> > > > > I didn't really see when the address space was destroyed, maybe 
> > > > > there's a
> > > > > bug somewhere; I put that info into appendix at the end.
> > > >
> > > > This is https://gitlab.com/qemu-project/qemu/-/issues/2517
> > > >
> > > > I got blocked on that because I ran into a weird "I have some
> > > > memory that needs to be freed by the RCU callback, but only
> > > > after the callback has freed some other RCU stuff". I see
> > > > Paolo made a reply on that bug -- I would need to get back
> > > > to it and reproduce whatever it was I was doing.
> > >
> > > Thanks for the link, right that looks exactly like what I hit.
> > >
> > > I am curious if FIFO is guaranteed for RCU in general, or it is an impl
> > > detail only specific to QEMU.
> > >
> > > The other thing is I feel like it should be OK to reorder callbacks, if 
> > > all
> > > the call_rcu() users can make sure the rcu-freed object is completely
> > > detached from the rest world, e.g. resetting all relevant pointers to 
> > > NULL.
> > > With that, it seems the order won't matter too, because nobody will be 
> > > able
> > > to reference the internal object anyway, so the two objects (after 
> > > reseting
> > > all referers to NULL pointer of the inner object) are completely 
> > > standalone.
> >
> > The specific ordering problem for cpu_address_space is that
> > there's a g_new allocated array of memory which contains
> > the AddressSpace objects (not pointers to them). The ASes need
> > to be RCU-deallocated first so they can clean up their internal
> > data structures; only once that has happened can we free the
> > memory that holds the AddressSpace structs themselves.
>
> If it's about cpu_address_space_destroy(), then IIUC it can also be done by
> providing a destroy_free() function so that instead of trying to serialize
> two rcu callbacks, we could easily serialize the operations in one
> callback.  One sample patch attached to avoid relying on order of rcu
> enqueue.

The cpu_address_space_destroy() function is broken and never
called by anything. It needs rewriting to instead of trying
to destroy cpu_as, just destroy every AS the CPU has at once.
(I have some code for this.)

I'm trying to repro the setup I had last year, but I can't
figure out a setup where I can get hot-unplug to work:
the "device-del" command documented in system/cpu-hotplug.html
always fails with:

"desc": "acpi: device unplug request for not supported device type:
IvyBridge-IBRS-x86_64-cpu"

Do you know how to get this working?

thanks
-- PMM

Reply via email to