[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V3 01/23] x86/ioreq: Prepare IOREQ feature for making it common
Oleksandr Tyshchenko <olekstysh@xxxxxxxxx> writes: > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> > > As a lot of x86 code can be re-used on Arm later on, this > patch makes some preparation to x86/hvm/ioreq.c before moving > to the common code. This way we will get a verbatim copy <snip> > > It worth mentioning that a code which checks the return value of > p2m_set_ioreq_server() in hvm_map_mem_type_to_ioreq_server() was > folded into arch_ioreq_server_map_mem_type() for the clear split. > So the p2m_change_entry_type_global() is called with ioreq_server > lock held. <snip> > > +/* Called with ioreq_server lock held */ > +int arch_ioreq_server_map_mem_type(struct domain *d, > + struct hvm_ioreq_server *s, > + uint32_t flags) > +{ > + int rc = p2m_set_ioreq_server(d, flags, s); > + > + if ( rc == 0 && flags == 0 ) > + { > + const struct p2m_domain *p2m = p2m_get_hostp2m(d); > + > + if ( read_atomic(&p2m->ioreq.entry_count) ) > + p2m_change_entry_type_global(d, p2m_ioreq_server, p2m_ram_rw); > + } > + > + return rc; > +} > + > /* > * Map or unmap an ioreq server to specific memory type. For now, only > * HVMMEM_ioreq_server is supported, and in the future new types can be > @@ -1112,19 +1155,11 @@ int hvm_map_mem_type_to_ioreq_server(struct domain > *d, ioservid_t id, > if ( s->emulator != current->domain ) > goto out; > > - rc = p2m_set_ioreq_server(d, flags, s); > + rc = arch_ioreq_server_map_mem_type(d, s, flags); > > out: > spin_unlock_recursive(&d->arch.hvm.ioreq_server.lock); > > - if ( rc == 0 && flags == 0 ) > - { > - struct p2m_domain *p2m = p2m_get_hostp2m(d); > - > - if ( read_atomic(&p2m->ioreq.entry_count) ) > - p2m_change_entry_type_global(d, p2m_ioreq_server, p2m_ram_rw); > - } > - It should be noted that p2m holds it's own lock but I'm unfamiliar with Xen's locking architecture. Is there anything that prevents another vCPU accessing a page that is also being used my ioreq on the first vCPU? Assuming that deadlock isn't a possibility to my relatively untrained eye this looks good to me: Reviewed-by: Alex Bennée <alex.bennee@xxxxxxxxxx> -- Alex Bennée
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |