From: "Suthikulpanit, Suravee" <suravee.suthikulpanit@amd.com>
To: Maxim Levitsky <mlevitsk@redhat.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Cc: pbonzini@redhat.com, seanjc@google.com, joro@8bytes.org,
jon.grimm@amd.com, wei.huang2@amd.com, terry.bowman@amd.com
Subject: Re: [RFC PATCH 08/13] KVM: SVM: Do not update logical APIC ID table when in x2APIC mode
Date: Tue, 8 Mar 2022 12:24:37 +0700 [thread overview]
Message-ID: <83cc0a88-b212-c3f1-a2d5-68142344245a@amd.com> (raw)
In-Reply-To: <55c391a51bf6b7d3927493ff56333e9846e04a4a.camel@redhat.com>
Maxim,
On 2/25/2022 12:41 AM, Maxim Levitsky wrote:
> On Sun, 2022-02-20 at 20:19 -0600, Suravee Suthikulpanit wrote:
>> In X2APIC mode the Logical Destination Register is read-only,
>> which provides a fixed mapping between the logical and physical
>> APIC IDs. Therefore, there is no Logical APIC ID table in X2AVIC
>> and the processor uses the X2APIC ID in the backing page to create
>> a vCPU’s logical ID.
>>
>> Therefore, add logic to check x2APIC mode before updating logical
>> APIC ID table.
>>
>> Signed-off-by: Suravee Suthikulpanit<suravee.suthikulpanit@amd.com>
>> ---
>> arch/x86/kvm/svm/avic.c | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/x86/kvm/svm/avic.c b/arch/x86/kvm/svm/avic.c
>> index 215d8a7dbc1d..55b3b703b93b 100644
>> --- a/arch/x86/kvm/svm/avic.c
>> +++ b/arch/x86/kvm/svm/avic.c
>> @@ -417,6 +417,10 @@ static int avic_ldr_write(struct kvm_vcpu *vcpu, u8 g_physical_id, u32 ldr)
>> bool flat;
>> u32 *entry, new_entry;
>>
>> + /* Note: x2AVIC does not use logical APIC ID table */
>> + if (apic_x2apic_mode(vcpu->arch.apic))
>> + return 0;
>> +
>> flat = kvm_lapic_get_reg(vcpu->arch.apic, APIC_DFR) == APIC_DFR_FLAT;
>> entry = avic_get_logical_id_entry(vcpu, ldr, flat);
>> if (!entry)
>> @@ -435,8 +439,13 @@ static void avic_invalidate_logical_id_entry(struct kvm_vcpu *vcpu)
>> {
>> struct vcpu_svm *svm = to_svm(vcpu);
>> bool flat = svm->dfr_reg == APIC_DFR_FLAT;
>> - u32 *entry = avic_get_logical_id_entry(vcpu, svm->ldr_reg, flat);
>> + u32 *entry;
>> +
>> + /* Note: x2AVIC does not use logical APIC ID table */
>> + if (apic_x2apic_mode(vcpu->arch.apic))
>> + return;
>>
>> + entry = avic_get_logical_id_entry(vcpu, svm->ldr_reg, flat);
>> if (entry)
>> clear_bit(AVIC_LOGICAL_ID_ENTRY_VALID_BIT, (unsigned long *)entry);
>> }
>
> Here actually the good apic_x2apic_mode was used.
>
> However, shouldn't we inject #GP in avic_ldr_write to make this read realy read-only?
> It might be too late to do so here, since most AVIC writes are trap like.
I'm checking to see how HW would respond to LDR write in x2AVIC enabled case.
> Thus we need to make the msr that corresponds to LDR to be write protected in the msr bitmap,
> and inject #GP when write it attempted.
Actually, we can setup the MSR interception for LDR register (0x80d) to intercept
into hypervisor (i.e. not virtualized by AVIC HW), and let the current KVM
implementation handles the WRMSR emulation (i.e. inject #GP). Would that be sufficient?
Regards,
Suravee
next prev parent reply other threads:[~2022-03-08 5:24 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-21 2:19 [RFC PATCH 00/13] Introducing AMD x2APIC Virtualization (x2AVIC) support Suravee Suthikulpanit
2022-02-21 2:19 ` [RFC PATCH 01/13] KVM: SVM: Add warning when encounter invalid APIC ID Suravee Suthikulpanit
2022-02-24 16:30 ` Maxim Levitsky
2022-02-21 2:19 ` [RFC PATCH 02/13] x86/cpufeatures: Introduce x2AVIC CPUID bit Suravee Suthikulpanit
2022-02-24 16:32 ` Maxim Levitsky
2022-02-21 2:19 ` [RFC PATCH 03/13] KVM: SVM: Detect X2APIC virtualization (x2AVIC) support Suravee Suthikulpanit
2022-02-24 16:52 ` Maxim Levitsky
2022-03-01 9:45 ` Suravee Suthikulpanit
2022-02-21 2:19 ` [RFC PATCH 04/13] KVM: SVM: Only call vcpu_(un)blocking when AVIC is enabled Suravee Suthikulpanit
2022-02-24 16:54 ` Maxim Levitsky
2022-03-01 9:59 ` Suravee Suthikulpanit
2022-02-21 2:19 ` [RFC PATCH 05/13] KVM: SVM: Update max number of vCPUs supported for x2AVIC mode Suravee Suthikulpanit
2022-02-24 17:18 ` Maxim Levitsky
2022-03-01 10:47 ` Suravee Suthikulpanit
2022-03-01 11:31 ` Maxim Levitsky
2022-02-21 2:19 ` [RFC PATCH 06/13] KVM: SVM: Add logic to determine x2APIC mode Suravee Suthikulpanit
2022-02-24 17:29 ` Maxim Levitsky
2022-03-03 2:12 ` Suthikulpanit, Suravee
2022-03-03 13:12 ` Suravee Suthikulpanit
2022-02-21 2:19 ` [RFC PATCH 07/13] KVM: SVM: Update avic_kick_target_vcpus to support 32-bit APIC ID Suravee Suthikulpanit
2022-02-24 17:35 ` Maxim Levitsky
2022-03-03 14:41 ` Suravee Suthikulpanit
2022-02-21 2:19 ` [RFC PATCH 08/13] KVM: SVM: Do not update logical APIC ID table when in x2APIC mode Suravee Suthikulpanit
2022-02-24 17:41 ` Maxim Levitsky
2022-03-08 5:24 ` Suthikulpanit, Suravee [this message]
2022-02-21 2:19 ` [RFC PATCH 09/13] KVM: SVM: Introduce helper function avic_get_apic_id Suravee Suthikulpanit
2022-02-24 19:46 ` Maxim Levitsky
2022-02-21 2:19 ` [RFC PATCH 10/13] KVM: SVM: Adding support for configuring x2APIC MSRs interception Suravee Suthikulpanit
2022-02-24 19:51 ` Maxim Levitsky
2022-03-07 10:14 ` Suthikulpanit, Suravee
2022-02-21 2:19 ` [RFC PATCH 11/13] KVM: SVM: Add logic to switch between APIC and x2APIC virtualization mode Suravee Suthikulpanit
2022-02-22 5:39 ` Suthikulpanit, Suravee
2022-02-24 20:03 ` Maxim Levitsky
2022-03-04 11:22 ` Suravee Suthikulpanit
2022-03-04 11:51 ` Maxim Levitsky
2022-02-21 2:19 ` [RFC PATCH 12/13] KVM: SVM: Remove APICv inhibit reasone due to x2APIC Suravee Suthikulpanit
2022-02-24 20:06 ` Maxim Levitsky
2022-03-01 14:02 ` Suravee Suthikulpanit
2022-02-21 2:19 ` [RFC PATCH 13/13] KVM: SVM: Use fastpath x2apic IPI emulation when #vmexit with x2AVIC Suravee Suthikulpanit
2022-02-24 20:12 ` Maxim Levitsky
2022-03-07 6:24 ` Suthikulpanit, Suravee
2022-02-22 5:37 ` [RFC PATCH 00/13] Introducing AMD x2APIC Virtualization (x2AVIC) support Suthikulpanit, Suravee
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=83cc0a88-b212-c3f1-a2d5-68142344245a@amd.com \
--to=suravee.suthikulpanit@amd.com \
--cc=jon.grimm@amd.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mlevitsk@redhat.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=terry.bowman@amd.com \
--cc=wei.huang2@amd.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®