[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 3/8] x86/emul: Add pending_dbg field to x86_event
- To: Jan Beulich <jbeulich@xxxxxxxx>, Jinoh Kang <jinoh.kang.kr@xxxxxxxxx>
- From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
- Date: Wed, 30 Aug 2023 15:20:50 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2KtYR028JlnltH1yWQiALBKl0G18xL6aSSyGD9asr1A=; b=CHzEHCfLADxP0OQwyMy+f3/PTdttXS4zUAKvrTiZcK4CIKthwjP0HcjpKgauc2xVgkHyO0QnLEzxJJqBQGxlM6BYqwdOX3nF7GbskR4G3awN6nGVS7CJmRwGe98/mlo8KtBoBh4hkieT8wcKQTy+qMuJAXsCnUwWWogQ6768SNrqgBwBOBKV9PKWjvbzTLXVqEAI0dGUGbQIBz9uoSqUl1Wqcx1m2KX2DDqJFOpHr7N9x0YpXgWy5E2Spo/iIK9ms8jd01HKG+oVzkLkESFufbUfyF9s44jUguY/uW4rUboUJtihQVGSBdBCXfwVl9fjsR15pFtCQI32P93ZzXDSEA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OKN2ww5rrncrYoXi9eIu2kxRx7GeZwO3CBOp9fhgg6Xx0j8Ww93iLEHRWir37Yd0WYWy/lKx8mCclMFMz/8JFDERwzgs+s9plKggeP3drdYWk5oM3X78XwqERp439FJmcG8YtmOBEFKrps6qauGefsiVyjjPXoBMwtNZCHNoQrF9P51tw/Yb2PhqjOplbs/FxFo1vh+CZmxgruaYPItoghcE1kRxqfkw3nOOdxhptpQVvo8DDmcdueAVJfdSI/kWfSXJHCtHYTMuMuiQ4JHQ/W2IcQiK/tB1VoNLz/mXMF4hk5EwaPbvm/xs+IR4tkFNdNiOvb97XxRMONYqhMDqMA==
- Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
- Cc: Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Jun Nakajima <jun.nakajima@xxxxxxxxx>, Kevin Tian <kevin.tian@xxxxxxxxx>, Tim Deegan <tim@xxxxxxx>, Tamas K Lengyel <tamas@xxxxxxxxxxxxx>, Alexandru Isaila <aisaila@xxxxxxxxxxxxxxx>, Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
- Delivery-date: Wed, 30 Aug 2023 14:21:23 +0000
- Ironport-data: A9a23:6rP+HqkZUCZkATieTSUn+Mvo5gzDJkRdPkR7XQ2eYbSJt1+Wr1Gzt xJJXDvQa62DajOke990aYy/pkxXuZfSx4NiTgI9/Cg2RCMWpZLJC+rCIxarNUt+DCFhoGFPt JxCN4aafKjYaleG+39B55C49SEUOZmgH+a6U6icfHgqH2eIcQ954Tp7gek1n4V0ttawBgKJq LvartbWfVSowFaYCEpNg064gE0p5K6aVA8w5ARkPqgb5weGzRH5MbpETU2PByqgKmVrNrbSq 9brlNmR4m7f9hExPdKp+p6TnpoiG+O60aCm0xK6aoD66vRwjnVaPpUTbZLwXXx/mTSR9+2d/ f0W3XCGpaXFCYWX8AgVe0Ew/yiTpsSq8pefSZS0mZT7I0Er7xIAahihZa07FdRwxwp5PY1B3 exAERsVdhOou7mdzJjgUMxgpfotK/C+aevzulk4pd3YJdAPZMmZBo/stZpf1jp2gd1SF/HDY cZfcSBocBnLfxxIPBEQFY46m+CrwHL4dlW0qnrM/fZxvzeVkVE3iee3WDbWUoXiqcF9t0CUv G/ZuU/+BQkXLoe3wjuZ6HO8wOTImEsXXapLTuboraI02gP7Kmo7AwA0ZXHjqPqFjUvvfshwM 3ML1DQQhP1nnKCsZpynN/Gim1aGtBMBX9tbE8Uh9RqAjKHT5m6xBGkCST4Ha9Ugu4k1XxQl0 1aIm5XiAjkHmKKRYWKQ8PGTtzzaESoIKykEbCwNTwoA6vHipp0+ilTESdMLOK24kNzzXy3xy jairS4iirFVhskOv42n/FXvkz+q4J/TQWYd+gzSV3mN8gB9aYiqdoGsr1Pc6J5oJYeCR1iFt VAOmtSS4e4DC52AjmqGR+BlNKmx5uyOOTnVi0NHFZg9+zmj9nivcJoW6zZ7TG95P8BBdTL3b Uv7vQJK+IQVLHasdbVwYY+6F4It16eIKDj+fvXdb94LaJ4hcgaCpXtqfRTJgDqrl1Uwm6YiP 5vdadyrEXsRFaVgynyxWvsZ1rgogCs5wAs/WKzG8vhu6pLGDFb9dFvPGAHTBgzlxMtoeDnoz us=
- Ironport-hdrordr: A9a23:6ebYDaiM4qIsmgiX2yziIqfhXXBQX8d23DAbv31ZSRFFG/FwyP rCoB1L73XJYWgqM03I+eruBEBPewKkyXcH2/h3AV7EZniahILIFvAZ0WKG+VHd8kLFh41gPM tbAs1D4ZjLfCNHZKXBkXeF+rQboOVvmZrA7Ym+854ud3ATV0gJ1XYHNu/xKDwTeOApP+teKH PR3Lskm9L2Ek5nEvhTS0N1F9Qq4Lbw5eDbSC9DIyRixBiFjDuu5rK/Ox+E3i0GWzcK7aY+/X PDmwnZ4Lzml/2g0BfT20La8pwTwbLau5d+Lf3JrvJQBiTniw6uaogkc7qevAotqOXqxEc2nM LKqxIAOd02z3/KZGm6rTbkxgGl+jcz7H3Jz0OenBLY0IHEbQN/L/AEqZNScxPf5UZllNZg0J hT12bck5ZMFxvPkAn0+tCNDnhR5wCJiEtntdRWo21UUIMYZrMUhYsD/HlNGJNFOC7h8ogoHM RnEcmZzvdLdlGxaWzfowBUsZeRd0V2Oi3DblkJu8ST3TQTtHdlz3EAzMhapXsE/IJVcegy28 30doBT0J1eRM4faqxwQM0bR9GsN2DLSRXQdEqPPFXODsg8SjLwgq+yxI9wyPCheZQOwpd3so /GSklkuWk7fF+rIdGS3adM7gvGTAyGLHXQI/llltpEU4DHNf/W2XXpciFrryLgmYRQPiTjYY fxBHoMaMWTalcHGu5yrnnDstdpWD8jufYuy6UGsmK107P2w7LRx5zmmdboVczQ+GUfKyrCK0 pGegTPD+N9yW3uckPEoXHqKgbQkwrEjN1NLJQ=
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 30/08/2023 2:39 pm, Jan Beulich wrote:
> On 24.08.2023 17:26, Jinoh Kang wrote:
>> @@ -62,9 +63,16 @@ void pv_inject_event(const struct x86_event *event)
>> error_code |= PFEC_user_mode;
>>
>> trace_pv_page_fault(event->cr2, error_code);
>> - }
>> - else
>> + break;
>> +
>> + case X86_EXC_DB:
>> + curr->arch.dr6 |= event->pending_dbg;
>> + /* Fallthrough */
> I guess I have another question here, perhaps more to Andrew: How come
> this is just an OR? Not only with some of the bits having inverted sense
> and earlier logic being ...
>
>> --- a/xen/arch/x86/traps.c
>> +++ b/xen/arch/x86/traps.c
>> @@ -1989,17 +1989,17 @@ void do_debug(struct cpu_user_regs *regs)
>> return;
>> }
>>
>> - /* Save debug status register where guest OS can peek at it */
>> - v->arch.dr6 |= (dr6 & ~X86_DR6_DEFAULT);
>> - v->arch.dr6 &= (dr6 | ~X86_DR6_DEFAULT);
> ... an OR and an AND, but also with ...
>
>> --- a/xen/arch/x86/x86_emulate/x86_emulate.h
>> +++ b/xen/arch/x86/x86_emulate/x86_emulate.h
>> @@ -78,7 +78,10 @@ struct x86_event {
>> uint8_t type; /* X86_EVENTTYPE_* */
>> uint8_t insn_len; /* Instruction length */
>> int32_t error_code; /* X86_EVENT_NO_EC if n/a */
>> - unsigned long cr2; /* Only for X86_EXC_PF h/w exception */
>> + union {
>> + unsigned long cr2; /* #PF */
>> + unsigned long pending_dbg; /* #DB (new DR6 bits, positive polarity)
>> */
As a tangent, since I wrote the original series, there's #NM and
MSR_XFD_ERR which needs to fit into this union for AMX support.
Sadly, the only AMX hardware on the market right now has an errata where
XFD_ERR doesn't behave properly here.
> ... the comment here saying "positive polarity", which I understand
> to mean that inverted bits need inverting by the consumer of this
> field. If this is solely because none of the inverted bits are
> supported for PV, then I guess this wants a comment at the use site
> (not the least because it would need adjusting as soon as one such
> would become supported).
Part of this patch is (or was) introducing pending_dbg with no logical
change, but as I said, I don't think I had the original series split up
quite correctly either.
This field is more than just the inversion. It needs to match the
semantics of the VMCS PENDING_DBG field, which is architectural but
otherwise hidden pipeline state, similar to the segment descriptor
cache. The other necessary property is the (lack of) stickiness of bits
in the pending_dbg field.
All of that said, having talked to some pipeline people recent, I think
pending_dbg needs to be elsewhere. Or perhaps a second copy elsewhere.
Some bits stay pending in pending_dbg across multiple instructions.
This is how we get the MovSS-delays-breakpoints property that is a
security disaster elsewhere.
The problem with this is that we can't get at the pipeline pending_dbg
state for PV guests (where we've only got an architectural #DB to work
with) or for SVM guests (where this state isn't presented in the VMCB
despite existing internally).
~Andrew
|