[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 0/7] xen: Clean-up of mem_event subsystem
On 11/17/2014 06:37 PM, Jan Beulich wrote: >>>> On 12.11.14 at 16:48, <andrew.cooper3@xxxxxxxxxx> wrote: >> On 12/11/14 15:31, Tamas K Lengyel wrote: >>> xen/include/public/domctl.h | 44 +-- >>> xen/include/public/hvm/params.h | 2 +- >>> xen/include/public/mem_event.h | 134 ------- >>> xen/include/public/memory.h | 6 +- >>> xen/include/public/vm_event.h | 179 +++++++++ >> >> While in principle I think this series is a very good thing, there is a >> problem with editing the pubic header files. >> >> The contents of mem_event.h is not currently hidden behind #ifdef >> __XEN_TOOLS__ >> >> As a result, it is strictly speaking part of the VM-visible public >> API/ABI and not permitted to change in a backwards incompatible manor. >> >> Having said that, it is currently only usable by privileged domains, so >> there is an argument to be made for declaring that it should have been >> hidden behind __XEN_TOOLS__ in the first place, making it permittable to >> change. > > I'm not sure I agree - the meaning of "tools" here would seem quite a > bit different than e.g. in domctl.h. Looking at patch 1, I can't see how > an old consumer (remember that for many of these we have at best > fake consumers in the tree) would deal with the now differently > arranged data. I don't see any versioning of the interface, and hence > I can't see how tools would know which of the formats to expect. In the initial patch I've sent Tamas I had arranged things as follows, (so that the layout would stay compatible) but I think we ended up discussing it and deciding it would look cleaner to just re-do the whole thing: +struct mem_event_ept_data { + uint64_t gfn; + uint64_t offset; + uint64_t gla; /* if gla_valid */ +}; + +struct mem_event_cr_data { + uint64_t new_value; + uint64_t _pad; + uint64_t old_value; +}; + +struct mem_event_int3_data { + uint64_t gfn; + uint64_t _pad; + uint64_t eip; +}; + +struct mem_event_singlestep_data { + uint64_t gfn; + uint64_t _pad; + uint64_t eip; +}; + +struct mem_event_msr_data { + uint64_t msr; + uint64_t old_value; + uint64_t new_value; +}; + typedef struct mem_event_st { uint32_t flags; uint32_t vcpu_id; - uint64_t gfn; - uint64_t offset; - uint64_t gla; /* if gla_valid */ + union { + struct mem_event_ept_data ept_event; + struct mem_event_cr_data cr_event; + struct mem_event_int3_data int3_event; + struct mem_event_singlestep_data singlestep_event; + struct mem_event_msr_data msr_event; + }; uint32_t p2mt; Would something like this be more along the right lines? Thanks, Razvan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |