From: Ed White <edmund.h.white@intel.com>
To: Tamas K Lengyel <tamas.lengyel@zentific.com>
Cc: Keir Fraser <keir@xen.org>,
Ian Campbell <ian.campbell@citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>, Tim Deegan <tim@xen.org>,
Jan Beulich <JBeulich@suse.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [PATCH 00/11] Alternate p2m: support multiple copies of host p2m
Date: Wed, 04 Mar 2015 15:41:10 -0800 [thread overview]
Message-ID: <54F79816.9000504@intel.com> (raw)
In-Reply-To: <CAErYnsgQfdZ2OXjAFmNX3O+=arRcVK5D8SNnrCS3fSdeSg2G3g@mail.gmail.com>
On 03/04/2015 03:06 PM, Tamas K Lengyel wrote:
>>>>>> Right. The key observation is that at any single point in time, a given
>>>>>> hardware thread can be fetching an instruction or reading data, but not
>>>>>> both.
>>>>>
>>>>> Fine, as long as an instruction reading itself isn't going to lead to
>>>>> a live lock.
>>>>>
>>>>
>>>> That's not how the hardware works. By the time you figure out that the
>>>> instruction you are executing reads memory, the instruction itself has
>>>> been fetched and decoded. That won't happen again during this execution.
>>>
>>> Can you explain? If the instruction faults and is returned to,
>>> execution starts again, right? So for an instruction that reads itself:
>>>
>>> - the fetch succeeds;
>>> - the read fails, and we fault;
>>> - the hypervisor switches from mapping MFN 1 (--x) to MFN 2 (r--);
>>> - the hypervisor returns to the guest.
>>>
>>> Are you relying on the icache/trace cache/whatever to restart
>>> the instruction from a cached value rather than fault immediately?
>>> (Because the hypervisor didn't flush the TLB when it changed the mapping)?
>>>
>>
>> Nope. I just typed before drinking enough coffee. That whole answer was bogus.
>>
>> Of course, if an instruction reads itself you can get a live lock using
>> these techniques, but it's a software-induced live lock and software can
>> avoid it. One way is compare the address being read with the instruction
>> pointer, and if they are on the same page emulate instead of switching p2m's.
>>
>> Ed
>
> Hi Ed,
> we have been poking at this idea of achieving singlestepping through
> altp2m view-switching (which would be supported by the VMFUNC
> EPTP-switching) and the problem discussed above is not limited to
> instructions that perform data accesses on the same page where the
> instruction executing was fetched from. In order to achieve true
> single-stepping, the immediate next instruction should be causing an
> EPT violation.
>
> Let's assume we trap an instruction that only performs data accesses
> on pages other than the one the instruction was fetched from. Since
> the instruction fetch is repeated after a failed data access due to
> EPT violation, the page containing the instruction has to be at least
> --x and the pages that will be touched by it rw- (or the proper
> combination or r-- and rw-) simultaneously in order to avoid getting
> into a live-lock. This results in all subsequent instruction fetches
> to succeed from the original page. Furthermore, as long as all such
> subsequent instructions keep accessing only the pages touched by the
> first instruction, we could end up missing a good chunk of code
> execution. Is there something we are missing here or is this a known
> limitation to the EPT-based singlestepping mechanism? Or is there
> something in the way VMFUNC is implemented that will avoid this
> limitation?
>
> Thanks,
> Tamas
>
If you truly need single-step, then there is no alternative to doing
that the traditional way using TF. What I was hinting at before (and
I seem to have offended you by doing so) is that if your only reason
for single-stepping is to revert a view switch, then depending on your
use-case the single-step may be avoidable. At the risk of offending
you again, I still can't talk about that in more detail.
Is there any chance you might reconsider your decision not to help
with toolstack support of the patch series? I'm still trying to find
an internal resource to do that work, but right now it's the biggest
risk I see to getting the series into 4.6.
Since this discussion has started up again, I should tell you that
after today I probably won't be able to post to the list until next
week.
Ed
next prev parent reply other threads:[~2015-03-04 23:41 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-09 21:26 [PATCH 00/11] Alternate p2m: support multiple copies of host p2m Ed White
2015-01-09 21:26 ` [PATCH 01/11] VMX: VMFUNC and #VE definitions and detection Ed White
2015-01-12 13:06 ` Andrew Cooper
2015-01-13 18:50 ` Ed White
2015-01-14 14:38 ` Andrew Cooper
2015-01-09 21:26 ` [PATCH 02/11] VMX: implement suppress #VE Ed White
2015-01-12 16:43 ` Andrew Cooper
2015-01-12 17:45 ` Ed White
2015-01-13 18:36 ` Ed White
2015-01-15 16:25 ` Tim Deegan
2015-01-15 18:46 ` Ed White
2015-01-16 17:22 ` Tim Deegan
2015-03-25 17:30 ` Ed White
2015-03-26 10:15 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 03/11] x86/HVM: Hardware alternate p2m support detection Ed White
2015-01-12 17:08 ` Andrew Cooper
2015-01-12 17:46 ` Ed White
2015-01-15 16:32 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 04/11] x86/MM: Improve p2m type checks Ed White
2015-01-12 17:48 ` Andrew Cooper
2015-01-13 19:39 ` Ed White
2015-01-15 16:36 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 05/11] x86/altp2m: basic data structures and support routines Ed White
2015-01-13 11:28 ` Andrew Cooper
2015-01-13 19:49 ` Ed White
2015-03-25 20:59 ` Ed White
2015-03-26 10:48 ` Tim Deegan
2015-03-26 18:00 ` Ed White
2015-01-15 16:48 ` Tim Deegan
2015-01-15 16:53 ` Jan Beulich
2015-01-15 18:49 ` Ed White
2015-01-16 7:37 ` Jan Beulich
2015-01-16 17:23 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 06/11] VMX/altp2m: add code to support EPTP switching and #VE Ed White
2015-01-13 11:58 ` Andrew Cooper
2015-01-15 16:56 ` Tim Deegan
2015-01-15 18:55 ` Ed White
2015-01-16 17:50 ` Tim Deegan
2015-01-16 17:57 ` Ed White
2015-01-09 21:26 ` [PATCH 07/11] x86/altp2m: introduce p2m_ram_rw_ve type Ed White
2015-01-15 17:03 ` Tim Deegan
2015-01-15 20:38 ` Ed White
2015-01-16 8:20 ` Jan Beulich
2015-01-16 17:14 ` Ed White
2015-01-19 8:49 ` Jan Beulich
2015-01-19 19:53 ` Ed White
2015-01-16 17:52 ` Tim Deegan
2015-01-16 18:35 ` Ed White
2015-01-17 9:37 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 08/11] x86/altp2m: add remaining support routines Ed White
2015-01-15 17:25 ` Tim Deegan
2015-01-15 20:57 ` Ed White
2015-01-16 18:04 ` Tim Deegan
2015-01-15 17:33 ` Tim Deegan
2015-01-15 21:00 ` Ed White
2015-01-16 8:24 ` Jan Beulich
2015-01-16 17:17 ` Ed White
2015-01-19 8:52 ` Jan Beulich
2015-01-16 18:09 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 09/11] x86/altp2m: define and implement alternate p2m HVMOP types Ed White
2015-01-15 17:09 ` Tim Deegan
2015-01-15 20:43 ` Ed White
2015-01-16 17:57 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 10/11] x86/altp2m: fix log-dirty handling Ed White
2015-01-15 17:20 ` Tim Deegan
2015-01-15 20:49 ` Ed White
2015-01-16 17:59 ` Tim Deegan
2015-01-09 21:26 ` [PATCH 11/11] x86/altp2m: alternate p2m memory events Ed White
2015-01-09 22:06 ` [PATCH 00/11] Alternate p2m: support multiple copies of host p2m Andrew Cooper
2015-01-09 22:21 ` Ed White
2015-01-09 22:41 ` Andrew Cooper
2015-01-09 23:04 ` Ed White
2015-01-12 10:00 ` Jan Beulich
2015-01-12 17:36 ` Ed White
2015-01-13 8:56 ` Jan Beulich
2015-01-13 11:28 ` Ian Jackson
2015-01-13 17:42 ` Ed White
2015-01-12 12:17 ` Ian Jackson
2015-01-12 17:39 ` Ed White
2015-01-12 17:43 ` Ian Jackson
2015-01-12 17:50 ` Ed White
2015-01-12 18:00 ` Ian Jackson
2015-01-12 18:31 ` Ed White
2015-01-13 10:21 ` Tamas K Lengyel
2015-01-13 18:25 ` Ed White
2015-01-13 11:16 ` Ian Jackson
2015-01-12 17:51 ` Andrew Cooper
2015-01-13 19:01 ` Andrew Cooper
2015-01-13 20:02 ` Ed White
2015-01-13 20:45 ` Andrew Cooper
2015-01-13 21:30 ` Ed White
2015-01-14 7:04 ` Jan Beulich
2015-01-14 10:31 ` Tamas K Lengyel
2015-01-14 11:09 ` Jan Beulich
2015-01-14 11:28 ` Tamas K Lengyel
2015-01-14 17:35 ` Ed White
2015-01-15 8:16 ` Jan Beulich
2015-01-15 17:28 ` Ed White
2015-01-15 17:45 ` Tim Deegan
2015-01-15 18:44 ` Ed White
2015-03-04 23:06 ` Tamas K Lengyel
2015-03-04 23:41 ` Ed White [this message]
2015-03-05 10:51 ` Tamas K Lengyel
2015-03-13 17:38 ` Ed White
2015-03-05 10:36 ` Tim Deegan
2015-03-05 10:58 ` Tamas K Lengyel
2015-03-05 11:13 ` Tim Deegan
2015-01-16 7:35 ` Jan Beulich
2015-01-16 16:54 ` Ed White
2015-01-15 10:39 ` Tamas K Lengyel
2015-01-15 17:31 ` Ed White
2015-01-16 10:43 ` Tamas K Lengyel
2015-01-16 17:21 ` Ed White
2015-03-05 13:45 ` Egger, Christoph
2015-01-14 7:01 ` Jan Beulich
2015-01-15 16:15 ` Tim Deegan
2015-01-15 18:23 ` Ed White
2015-01-16 8:12 ` Jan Beulich
2015-01-16 17:01 ` Ed White
2015-01-16 18:33 ` Tim Deegan
2015-01-16 20:32 ` Ed White
2015-01-17 9:34 ` Tim Deegan
2015-01-16 21:43 ` Ed White
2015-01-17 9:49 ` Tim Deegan
2015-01-19 19:35 ` Ed White
2015-01-17 9:31 ` Tim Deegan
2015-01-17 15:01 ` Andrew Cooper
2015-01-19 12:17 ` Tim Deegan
2015-01-19 21:54 ` Ed White
2015-01-20 8:47 ` Jan Beulich
2015-01-20 18:43 ` Ed White
2015-01-22 15:42 ` Tim Deegan
2015-01-22 19:15 ` Ed White
2015-03-25 17:41 ` Ed White
2015-03-26 10:40 ` Tim Deegan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54F79816.9000504@intel.com \
--to=edmund.h.white@intel.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=keir@xen.org \
--cc=tamas.lengyel@zentific.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.