On Tue, Sep 23, 2014 at 4:08 PM, Jan Beulich <JBeulich@suse.com> wrote:
>>> On 23.09.14 at 16:04, <tamas.lengyel@zentific.com> wrote:
> On Tue, Sep 23, 2014 at 3:28 PM, Jan Beulich <JBeulich@suse.com> wrote:
>> >>> On 23.09.14 at 15:14, <tklengyel@sec.in.tum.de> wrote:
>> > +void p2m_mem_event_emulate_check(struct domain *d, const mem_event_response_t *rsp)
>> > +{
>> > +    /* Mark vcpu for skipping one instruction upon rescheduling. */
>> > +    if ( rsp->flags & MEM_EVENT_FLAG_EMULATE )
>> > +    {
>> > +        struct vcpu *v = current;
>>
>> Compare this with ...
>>
>> > -void p2m_mem_access_resume(struct domain *d)
>> > -{
>> > -    mem_event_response_t rsp;
>> > -
>> > -    /* Pull all responses off the ring */
>> > -    while( mem_event_get_response(d, &d->mem_event->access, &rsp) )
>> > -    {
>> > -        struct vcpu *v;
>> > -
>> > -        if ( rsp.flags & MEM_EVENT_FLAG_DUMMY )
>> > -            continue;
>> > -
>> > -        /* Validate the vcpu_id in the response. */
>> > -        if ( (rsp.vcpu_id >= d->max_vcpus) || !d->vcpu[rsp.vcpu_id] )
>> > -            continue;
>> > -
>> > -        v = d->vcpu[rsp.vcpu_id];
>>
>> ... the original code. I.e. you should pass v instead of d into
>> p2m_mem_event_emulate_check().
>>
>
> Ah good point, but I think passing d is better (as it is also required
> further down), I just have to make v = d->vcpu[rsp.vcpu_id] instead of
> current.

No - d can simply be had from v->domain.

Jan

Ack. Would you still prefer splitting the abstraction from this patch into a separate one?

Tamas