[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.