|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 02/11] vpci: cancel pending map/unmap on vpci removal
On 19.11.2021 13:34, Oleksandr Andrushchenko wrote:
> Possible locking and other work needed:
> =======================================
>
> 1. pcidevs_{lock|unlock} is too heavy and is per-host
> 2. pdev->vpci->lock cannot be used as vpci is freed by vpci_remove_device
> 3. We may want a dedicated per-domain rw lock to be implemented:
>
> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
> index 28146ee404e6..ebf071893b21 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -444,6 +444,7 @@ struct domain
>
> #ifdef CONFIG_HAS_PCI
> struct list_head pdev_list;
> + rwlock_t vpci_rwlock;
> + bool vpci_terminating; <- atomic?
> #endif
> then vpci_remove_device is a writer (cold path) and vpci_process_pending and
> vpci_mmio_{read|write} are readers (hot path).
Right - you need such a lock for other purposes anyway, as per the
discussion with Julien.
> do_physdev_op(PHYSDEVOP_pci_device_remove) will need
> hypercall_create_continuation
> to be implemented, so when re-start removal if need be:
>
> vpci_remove_device()
> {
> d->vpci_terminating = true;
> remove vPCI register handlers <- this will cut off PCI_COMMAND emulation
> among others
> if ( !write_trylock(d->vpci_rwlock) )
> return -ERESTART;
> xfree(pdev->vpci);
> pdev->vpci = NULL;
> }
>
> Then this d->vpci_rwlock becomes a dedicated vpci per-domain lock for
> other operations which may require it, e.g. virtual bus topology can
> use it when assigning vSBDF etc.
>
> 4. vpci_remove_device needs to be removed from vpci_process_pending
> and do nothing for Dom0 and crash DomU otherwise:
Why is this? I'm not outright opposed, but I don't immediately see why
trying to remove the problematic device wouldn't be a reasonable course
of action anymore. vpci_remove_device() may need to become more careful
as to not crashing, though.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |