[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V4 01/13] xen/mem_event: Cleanup of mem_event structures
>>> On 09.02.15 at 19:53, <tamas.lengyel@xxxxxxxxxxxx> wrote: > +static void hvm_memory_event_cr(uint32_t reason, unsigned long value, > + unsigned long old) > +{ > + mem_event_request_t req = { > + .reason = reason, > + .vcpu_id = current->vcpu_id, > + .u.mov_to_cr.new_value = value, > + .u.mov_to_cr.old_value = old > + }; > + > + uint64_t parameters = 0 ; > + switch(reason) Blank line between declarations and statements please. And no blank before a semicolon. > + { > + case MEM_EVENT_REASON_MOV_TO_CR0: > + parameters = current->domain->arch.hvm_domain > + .params[HVM_PARAM_MEMORY_EVENT_CR0]; > + break; > + case MEM_EVENT_REASON_MOV_TO_CR3: > + parameters = current->domain->arch.hvm_domain > + .params[HVM_PARAM_MEMORY_EVENT_CR3]; > + break; > + case MEM_EVENT_REASON_MOV_TO_CR4: > + parameters = current->domain->arch.hvm_domain > + .params[HVM_PARAM_MEMORY_EVENT_CR4]; > + break; > + }; I think you should bail in the default case; perhaps add an ASSERT_UNREACHABLE(). And with that I think readability (and maybe even generated code) would benefit if you just latched the index into .params[]. > @@ -598,6 +600,12 @@ int mem_sharing_sharing_resume(struct domain *d) > { > struct vcpu *v; > > + if ( rsp.version != MEM_EVENT_INTERFACE_VERSION ) > + { > + gdprintk(XENLOG_WARNING, "mem_event interface version > mismatch!\n"); Why gdprintk()? > @@ -1310,18 +1322,19 @@ void p2m_mem_paging_resume(struct domain *d) > /* Fix p2m entry if the page was not dropped */ > if ( !(rsp.flags & MEM_EVENT_FLAG_DROP_PAGE) ) > { > - gfn_lock(p2m, rsp.gfn, 0); > - mfn = p2m->get_entry(p2m, rsp.gfn, &p2mt, &a, 0, NULL); > + uint64_t gfn = rsp.u.mem_access.gfn; > + gfn_lock(p2m, gfn, 0); Blank line between declarations and statements. Also - why uint64_t instead of just unsigned long? > +/* Reasons for the vm event request */ > +/* Default case */ > +#define MEM_EVENT_REASON_UNKNOWN 0 > +/* Memory access violation */ > +#define MEM_EVENT_REASON_MEM_ACCESS 1 > +/* Memory sharing event */ > +#define MEM_EVENT_REASON_MEM_SHARING 2 > +/* Memory paging event */ > +#define MEM_EVENT_REASON_MEM_PAGING 3 > +/* CR0 was updated */ > +#define MEM_EVENT_REASON_MOV_TO_CR0 4 > +/* CR3 was updated */ > +#define MEM_EVENT_REASON_MOV_TO_CR3 5 > +/* CR4 was updated */ > +#define MEM_EVENT_REASON_MOV_TO_CR4 6 > +/* An MSR was updated. Does NOT honour HVMPME_onchangeonly */ > +#define MEM_EVENT_REASON_MOV_TO_MSR 7 > +/* Debug operation executed (int3) */ If you absolutely want to mention architecture specific things in a generic header, please make this an example (i.e. insert "e.g." above). > +#define MEM_EVENT_REASON_SOFTWARE_BREAKPOINT 8 > +/* Single-step (MTF) */ Same here then (this one is even VT-x specific). > @@ -97,31 +112,74 @@ struct mem_event_regs_x86 { > uint32_t _pad; > }; > > -typedef struct mem_event_st { > - uint32_t flags; > - uint32_t vcpu_id; > - > +struct mem_event_mem_access_data { Do you really need all these _data tags? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |