Re: hvm_emulate_one() usage

Razvan Cojocaru
2013-01-10T14:31:45Z

>> I was very much hoping to be able to do this with only one (page fault)
>> mem_event per emulated write instruction.
>
> I''m sure that can be done.  The trick is to make sure the
emulation
> happens in the guest context (i.e. when the guest is scheduled).  You
> could do that by (e.g.) defining a new mem_access type
''single-step
> writes'' where a write fault triggers a single-step emulation in
the
> fault handler as well as an asynchronous mem-event.

That''s what I''m doing now (albeit with the plain
MEM_EVENT_REASON_VIOLATION) - I''m emulating the write in
p2m_mem_access_check(), where I''m in the guest context, just before
putting the mem_event in the ring buffer.

The problem is, I don''t want to do that. :) I want to stop certain
writes _before_ they happen, and emulating the write instruction there
first performs the write, and then notifies dom0 userspace about it.
The ideal sequence would be: 1. notify userspace about a would-be write,
2. get the reply from userspace, 3. only write if userspace said OK. The
point is that I don''t know if the write should be allowed to happen or
not until userspace replies.

Thanks,