On 07/21/2011 02:07 PM, Avi Kivity wrote: > On 07/21/2011 02:04 PM, Ferry Huberts wrote: >> On 07/21/2011 12:21 PM, Avi Kivity wrote: >> > Allow changes to the memory hierarchy to be accumulated and >> > made visible all at once. This reduces computational effort, >> > especially when an accelerator (e.g. kvm) is involved. >> > >> > Useful when a single register update causes multiple changes >> > to an address space. >> > >> > >> > +void memory_region_transaction_begin(void) >> > +{ >> > + ++memory_region_transaction_depth; >> > +} >> > + >> >> wouldn't you rather keep it safe by doing either here >> >> if (!memory_region_transaction_depth) >> memory_region_transaction_depth++; >> > > Why? I want to allow nesting transactions (not that I anticipate such a > case). > >> > +void memory_region_transaction_commit(void) >> > +{ >> > + if (!memory_region_transaction_depth) { >> > + abort(); >> > + } >> >> >> > + --memory_region_transaction_depth; >> > + memory_region_update_topology(); >> > +} >> > + >> >> or by doing here >> >> while (!memory_region_transaction_depth) >> memory_region_transaction_depth--; doesn't memory_region_update_topology commit all accumulated changes? if it does then memory_region_transaction_depth is left non-zero in the nesting case while no more changes are actually present, resulting in superfluous calls to memory_region_update_topology. maybe I misunderstood memory_region_update_topology? >> >> >> with your setup nesting transactions will not work correctly I think. >> You seem to have designed it to not do nesting, so it's safer to make >> that explicit in your code imho > > Nesting should work just fine. > >> therefore I'd go for the change in _begin >> >> also, wouldn't you rather rename memory_region_transaction_depth to >> memory_region_transaction_pending? > > The existing name works for me, but if people want it changed, that's > fine too. > > -- Ferry Huberts -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html