[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 05/16] x86/hvm: unify internal portio and mmio intercepts
>>> On 03.07.15 at 18:25, <paul.durrant@xxxxxxxxxx> wrote: > -void relocate_io_handler( > - struct domain *d, unsigned long old_addr, unsigned long new_addr, > - unsigned int size, int type) > +void relocate_portio_handler(struct domain *d, uint16_t old_port, > + uint16_t new_port, unsigned int size) > { > - struct hvm_io_handler *handler = d->arch.hvm_domain.io_handler; > - int i; > - > - for ( i = 0; i < handler->num_slot; i++ ) > - if ( (handler->hdl_list[i].addr == old_addr) && > - (handler->hdl_list[i].size == size) && > - (handler->hdl_list[i].type == type) ) > - handler->hdl_list[i].addr = new_addr; > + unsigned int i; > + > + for ( i = 0; i < d->arch.hvm_domain.io_handler_count; i++ ) > + { > + struct hvm_io_handler *handler = > + &d->arch.hvm_domain.io_handler[i]; > + > + if ( handler->type != IOREQ_TYPE_PIO ) > + continue; > + > + if ( (handler->portio.start == old_port) && > + (handler->portio.end = old_port + size) ) > + { > + handler->portio.start = new_port; > + handler->portio.end = new_port + size; > + break; > + } > + } > +} I'm afraid you're introducing a race with the consumer of this data here: Previously the update consisted of a single write, i.e. the consumer would see either the old or the new data. After the change it may see partially updated state. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |