On 07/09/2017 11:20, Alexey Kardashevskiy wrote:
>  
>      /* Accessed via RCU.  */
>      struct FlatView *current_map;
>  
>      int ioeventfd_nb;
>      struct MemoryRegionIoeventfd *ioeventfds;
> -    struct AddressSpaceDispatch *dispatch;
> -    struct AddressSpaceDispatch *next_dispatch;
> +

The rough idea of the patch matches my suggestion indeed.  However, I am
not sure why all of the changes in patch 2 are needed.

Once you have built the FlatView and the dispatch within it, you can
still cache its dispatch tree in as->dispatch, and free it with RCU from
flatview_destroy.  This removes the need to use call_rcu from
flatview_unref.

In addition, you could change the computation of FlatView's root to
resolve 2^64-sized aliases; also set it to NULL if the AddressSpace's
root is disabled or the alias it resolves to is disabled (and so on
recursively until a non-alias is found).  This should remove the need
for address_space_root() and the change to pci_init_bus_master.

Paolo

Reply via email to