[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 3/4] device-core: use atomic_set on .realized property
From: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH 3/4] device-core: use atomic_set on .realized property |
Date: |
Mon, 4 May 2020 11:45:38 +0100 |
On Thu, Apr 16, 2020 at 11:36:23PM +0300, Maxim Levitsky wrote:
> Some code might race with placement of new devices on a bus.
> We currently first place a (unrealized) device on the bus
> and then realize it.
>
> As a workaround, users that scan the child device list, can
> check the realized property to see if it is safe to access such a device.
> Use an atomic write here too to aid with this.
>
> A separate discussion is what to do with devices that are unrealized:
> It looks like for this case we only call the hotplug handler's unplug
> callback and its up to it to unrealize the device.
> An atomic operation doesn't cause harm for this code path though.
>
> Signed-off-by: Maxim Levitsky <address@hidden>
> ---
> hw/core/qdev.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index f0c87e582e..bbb1ae3eb3 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -983,7 +983,7 @@ static void device_set_realized(Object *obj, bool value,
> Error **errp)
> }
>
> assert(local_err == NULL);
> - dev->realized = value;
> + atomic_set(&dev->realized, value);
A memory barrier is probably needed so that the atomic_read() thread
sees up-to-date dev fields.
Stefan
signature.asc
Description: PGP signature
- Re: [PATCH 3/4] device-core: use atomic_set on .realized property,
Stefan Hajnoczi <=