From mboxrd@z Thu Jan 1 00:00:00 1970 From: Razvan Cojocaru Subject: Re: hvm_emulate_one() usage Date: Thu, 10 Jan 2013 16:31:45 +0200 Message-ID: <50EED0D1.3020006@gmail.com> References: <50DDADDD.8070806@gmail.com> <20130110131650.GE99373@ocelot.phlegethon.org> <50EECBD9.2020406@gmail.com> <20130110142353.GF99373@ocelot.phlegethon.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20130110142353.GF99373@ocelot.phlegethon.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Tim Deegan Cc: "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org >> 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, Razvan Cojocaru