Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Deepin Kernel SIG] [Intel] Intel: backport KVM LAM from v6.8 #539

Merged

Conversation

Avenger-285714
Copy link
Collaborator

KVM x86 support for virtualizing Linear Address Masking (LAM)

Add KVM support for Linear Address Masking (LAM). LAM tweaks the canonicality
checks for most virtual address usage in 64-bit mode, such that only the most
significant bit of the untranslated address bits must match the polarity of the
last translated address bit. This allows software to use ignored, untranslated
address bits for metadata, e.g. to efficiently tag pointers for address
sanitization.

About the patche
There are 12 patches, this is the commit list from upstream:

183bdd1 KVM: x86: Use KVM-governed feature framework to track "LAM enabled"
703d794 KVM: x86: Advertise and enable LAM (user and supervisor)
3098e6e KVM: x86: Virtualize LAM for user pointer
93d1c9f KVM: x86: Virtualize LAM for supervisor pointer
b39bd52 KVM: x86: Untag addresses for LAM emulation where applicable
37a4184 KVM: x86: Introduce get_untagged_addr() in kvm_x86_ops and call it in emulator
9c8021d KVM: x86: Remove kvm_vcpu_is_illegal_gpa()
2c49db4 KVM: x86: Add & use kvm_vcpu_is_legal_cr3() to check CR3's legality
a130066 KVM: x86/mmu: Drop non-PA bits when getting GFN for guest's PGD
538ac9a KVM: x86: Add X86EMUL_F_INVLPG and pass it in em_invlpg()
3963c52 KVM: x86: Add an emulation flag for implicit system access
7b0dd94 KVM: x86: Consolidate flags for __linearize()
Test
Test on SRF Platform

Built and run the kernel successfully
Kernel kselftest - LAM in host: PASS
Kernel kselftest - LAM in guest: PASS
kvm-unit-tests in host: PASS
kvm-unit-tests in guest: PASS
Known Issue
N/A

Default config change
N/A

Link: https://gitee.com/OpenCloudOS/OpenCloudOS-Kernel/pulls/254

Binbin Wu and others added 12 commits December 27, 2024 17:52
Upstream commit: 7b0dd94
Conflict: none

Consolidate @Write and @fetch of __linearize() into a set of flags so that
additional flags can be added without needing more/new boolean parameters,
to precisely identify the access type.

No functional change intended.

Intel-SIG: commit 7b0dd94 KVM: x86: Consolidate flags for
__linearize()
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Chao Gao <chao.gao@intel.com>
Acked-by: Kai Huang <kai.huang@intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-2-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 3963c52
Conflict: none

Add an emulation flag X86EMUL_F_IMPLICIT to identify implicit system access
in instruction emulation.  Don't bother wiring up any usage at this point,
as Linear Address Space Separation (LASS) will be the first "real" consumer
of the flag and LASS support will require dedicated hooks, i.e. there
aren't any existing calls where passing X86EMUL_F_IMPLICIT is meaningful.

Add the IMPLICIT flag even though there's no imminent usage so that
Linear Address Masking (LAM) support can reference the flag to document
that addresses for implicit accesses aren't untagged.

Intel-SIG: commit 3963c52 KVM: x86: Add an emulation flag for
implicit system access
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-4-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 538ac9a
Conflict: none

Add an emulation flag X86EMUL_F_INVLPG, which is used to identify an
instruction that does TLB invalidation without true memory access.

Only invlpg & invlpga implemented in emulator belong to this kind.
invlpga doesn't need additional information for emulation. Just pass
the flag to em_invlpg().

Linear Address Masking (LAM) and Linear Address Space Separation (LASS)
don't apply to addresses that are inputs to TLB invalidation. The flag
will be consumed to support LAM/LASS virtualization.

Intel-SIG: commit 538ac9a KVM: x86: Add X86EMUL_F_INVLPG and pass
it in em_invlpg()
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-5-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: a130066
Conflict: none

Drop non-PA bits when getting GFN for guest's PGD with the maximum theoretical
mask for guest MAXPHYADDR.

Do it unconditionally because it's harmless for 32-bit guests, querying 64-bit
mode would be more expensive, and for EPT the mask isn't tied to guest mode.
Using PT_BASE_ADDR_MASK would be technically wrong (PAE paging has 64-bit
elements _except_ for CR3, which has only 32 valid bits), it wouldn't matter
in practice though.

Opportunistically use GENMASK_ULL() to define __PT_BASE_ADDR_MASK.

Intel-SIG: commit a130066 KVM: x86/mmu: Drop non-PA bits when
getting GFN for guest's PGD
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-6-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 2c49db4
Conflict: none

Add and use kvm_vcpu_is_legal_cr3() to check CR3's legality to provide
a clear distinction between CR3 and GPA checks.  This will allow exempting
bits from kvm_vcpu_is_legal_cr3() without affecting general GPA checks,
e.g. for upcoming features that will use high bits in CR3 for feature
enabling.

No functional change intended.

Intel-SIG: commit 2c49db4 KVM: x86: Add & use
kvm_vcpu_is_legal_cr3() to check CR3's legality
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-7-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 9c8021d
Conflict: none

Remove kvm_vcpu_is_illegal_gpa() and use !kvm_vcpu_is_legal_gpa() instead.
The "illegal" helper actually predates the "legal" helper, the only reason
the "illegal" variant wasn't removed by commit 4bda0e9 ("KVM: x86:
Add a helper to check for a legal GPA") was to avoid code churn.  Now that
CR3 has a dedicated helper, there are fewer callers, and so the code churn
isn't that much of a deterrent.

No functional change intended.

Intel-SIG: commit 9c8021d KVM: x86: Remove
kvm_vcpu_is_illegal_gpa()
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-8-binbin.wu@linux.intel.com
[sean: provide a bit of history in the changelog]
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
… emulator

Upstream commit: 37a4184
Conflict: none

Introduce a new interface get_untagged_addr() to kvm_x86_ops to untag
the metadata from linear address.  Call the interface in linearization
of instruction emulator for 64-bit mode.

When enabled feature like Intel Linear Address Masking (LAM) or AMD Upper
Address Ignore (UAI), linear addresses may be tagged with metadata that
needs to be dropped prior to canonicality checks, i.e. the metadata is
ignored.

Introduce get_untagged_addr() to kvm_x86_ops to hide the vendor specific
code, as sadly LAM and UAI have different semantics.  Pass the emulator
flags to allow vendor specific implementation to precisely identify the
access type (LAM doesn't untag certain accesses).

Intel-SIG: commit 37a4184 KVM: x86: Introduce get_untagged_addr()
in kvm_x86_ops and call it in emulator
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Chao Gao <chao.gao@intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-9-binbin.wu@linux.intel.com
[sean: massage changelog]
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: b39bd52
Conflict: none

Stub in vmx_get_untagged_addr() and wire up calls from the emulator (via
get_untagged_addr()) and "direct" calls from various VM-Exit handlers in
VMX where LAM untagging is supposed to be applied.  Defer implementing
the guts of vmx_get_untagged_addr() to future patches purely to make the
changes easier to consume.

LAM is active only for 64-bit linear addresses and several types of
accesses are exempted.

- Cases need to untag address (handled in get_vmx_mem_address())
  Operand(s) of VMX instructions and INVPCID.
  Operand(s) of SGX ENCLS.

- Cases LAM doesn't apply to (no change needed)
  Operand of INVLPG.
  Linear address in INVPCID descriptor.
  Linear address in INVVPID descriptor.
  BASEADDR specified in SECS of ECREATE.

Note:
  - LAM doesn't apply to write to control registers or MSRs
  - LAM masking is applied before walking page tables, i.e. the faulting
    linear address in CR2 doesn't contain the metadata.
  - The guest linear address saved in VMCS doesn't contain metadata.

Intel-SIG: commit b39bd52 KVM: x86: Untag addresses for LAM
emulation where applicable
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Chao Gao <chao.gao@intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-10-binbin.wu@linux.intel.com
[sean: massage changelog]
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 93d1c9f
Conflict: none

Add support to allow guests to set the new CR4 control bit for LAM and add
implementation to get untagged address for supervisor pointers.

LAM modifies the canonicality check applied to 64-bit linear addresses for
data accesses, allowing software to use of the untranslated address bits for
metadata and masks the metadata bits before using them as linear addresses
to access memory. LAM uses CR4.LAM_SUP (bit 28) to configure and enable LAM
for supervisor pointers. It also changes VMENTER to allow the bit to be set
in VMCS's HOST_CR4 and GUEST_CR4 to support virtualization. Note CR4.LAM_SUP
is allowed to be set even not in 64-bit mode, but it will not take effect
since LAM only applies to 64-bit linear addresses.

Move CR4.LAM_SUP out of CR4_RESERVED_BITS, its reservation depends on vcpu
supporting LAM or not. Leave it intercepted to prevent guest from setting
the bit if LAM is not exposed to guest as well as to avoid vmread every time
when KVM fetches its value, with the expectation that guest won't toggle the
bit frequently.

Set CR4.LAM_SUP bit in the emulated IA32_VMX_CR4_FIXED1 MSR for guests to
allow guests to enable LAM for supervisor pointers in nested VMX operation.

Hardware is not required to do TLB flush when CR4.LAM_SUP toggled, KVM
doesn't need to emulate TLB flush based on it.  There's no other features
or vmx_exec_controls connection, and no other code needed in
{kvm,vmx}_set_cr4().

Skip address untag for instruction fetches (which includes branch targets),
operand of INVLPG instructions, and implicit system accesses, all of which
are not subject to untagging.  Note, get_untagged_addr() isn't invoked for
implicit system accesses as there is no reason to do so, but check the
flag anyways for documentation purposes.

Intel-SIG: commit 93d1c9f KVM: x86: Virtualize LAM for supervisor
pointer
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Robert Hoo <robert.hu@linux.intel.com>
Co-developed-by: Binbin Wu <binbin.wu@linux.intel.com>
Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Chao Gao <chao.gao@intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-11-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 3098e6e
Conflict: none

Add support to allow guests to set the new CR3 control bits for Linear
Address Masking (LAM) and add implementation to get untagged address for
user pointers.

LAM modifies the canonical check for 64-bit linear addresses, allowing
software to use the masked/ignored address bits for metadata.  Hardware
masks off the metadata bits before using the linear addresses to access
memory.  LAM uses two new CR3 non-address bits, LAM_U48 (bit 62) and
LAM_U57 (bit 61), to configure LAM for user pointers. LAM also changes
VMENTER to allow both bits to be set in VMCS's HOST_CR3 and GUEST_CR3 for
virtualization.

When EPT is on, CR3 is not trapped by KVM and it's up to the guest to set
any of the two LAM control bits. However, when EPT is off, the actual CR3
used by the guest is generated from the shadow MMU root which is different
from the CR3 that is *set* by the guest, and KVM needs to manually apply
any active control bits to VMCS's GUEST_CR3 based on the cached CR3 *seen*
by the guest.

KVM manually checks guest's CR3 to make sure it points to a valid guest
physical address (i.e. to support smaller MAXPHYSADDR in the guest). Extend
this check to allow the two LAM control bits to be set. After check, LAM
bits of guest CR3 will be stripped off to extract guest physical address.

In case of nested, for a guest which supports LAM, both VMCS12's HOST_CR3
and GUEST_CR3 are allowed to have the new LAM control bits set, i.e. when
L0 enters L1 to emulate a VMEXIT from L2 to L1 or when L0 enters L2
directly. KVM also manually checks VMCS12's HOST_CR3 and GUEST_CR3 being
valid physical address. Extend such check to allow the new LAM control bits
too.

Note, LAM doesn't have a global control bit to turn on/off LAM completely,
but purely depends on hardware's CPUID to determine it can be enabled or
not. That means, when EPT is on, even when KVM doesn't expose LAM to guest,
the guest can still set LAM control bits in CR3 w/o causing problem. This
is an unfortunate virtualization hole. KVM could choose to intercept CR3 in
this case and inject fault but this would hurt performance when running a
normal VM w/o LAM support.  This is undesirable. Just choose to let the
guest do such illegal thing as the worst case is guest being killed when
KVM eventually find out such illegal behaviour and that the guest is
misbehaving.

Intel-SIG: commit 3098e6e KVM: x86: Virtualize LAM for user pointer
Backport KVM Linear Address Masking (LAM) support.

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Robert Hoo <robert.hu@linux.intel.com>
Co-developed-by: Binbin Wu <binbin.wu@linux.intel.com>
Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Reviewed-by: Chao Gao <chao.gao@intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-12-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 703d794
Conflict: none

LAM is enumerated by CPUID.7.1:EAX.LAM[bit 26]. Advertise the feature to
userspace and enable it as the final step after the LAM virtualization
support for supervisor and user pointers.

SGX LAM support is not advertised yet. SGX LAM support is enumerated in
SGX's own CPUID and there's no hard requirement that it must be supported
when LAM is reported in CPUID leaf 0x7.

Intel-SIG: commit 703d794 KVM: x86: Advertise and enable LAM (user
and supervisor)
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Robert Hoo <robert.hu@linux.intel.com>
Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Jingqi Liu <jingqi.liu@intel.com>
Reviewed-by: Chao Gao <chao.gao@intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-13-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
Upstream commit: 183bdd1
Conflict: none

Use the governed feature framework to track if Linear Address Masking (LAM)
is "enabled", i.e. if LAM can be used by the guest.

Using the framework to avoid the relative expensive call guest_cpuid_has()
during cr3 and vmexit handling paths for LAM.

No functional change intended.

Intel-SIG: commit 183bdd1 KVM: x86: Use KVM-governed feature
framework to track "LAM enabled"
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Tested-by: Xuelian Guo <xuelian.guo@intel.com>
Link: https://lore.kernel.org/r/20230913124227.12574-14-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <zhiquan1.li@intel.com>
@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please ask for approval from avenger-285714. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@deepin-ci-robot
Copy link

deepin pr auto review

代码审查意见:

  1. kvm_get_untagged_addr函数中,对gva的掩码操作可能会导致地址的位63被保留,这可能不是预期的行为。建议检查是否需要对位63进行特殊处理。

  2. vmx_get_untagged_addr函数中,对gva的掩码操作可能会导致地址的位63被保留,这可能不是预期的行为。建议检查是否需要对位63进行特殊处理。

  3. emulator_get_untagged_addr函数中,如果kvm_x86_ops.get_untagged_addr为空,则直接返回addr,这可能不是预期的行为。建议添加错误处理或日志记录。

  4. kvm_handle_invpcid函数中,对operand.gla的检查应该使用kvm_vcpu_is_legal_gpa函数,而不是is_noncanonical_address函数,以确保对LAM(Logical Address Masking)的支持。

  5. kvm_is_valid_sregs函数中,对cr3的检查应该使用kvm_vcpu_is_legal_cr3函数,而不是kvm_vcpu_is_illegal_gpa函数,以确保对LAM(Logical Address Masking)的支持。

  6. kvm_set_cr3函数中,对cr3的检查应该使用kvm_vcpu_is_legal_cr3函数,而不是kvm_vcpu_is_illegal_gpa函数,以确保对LAM(Logical Address Masking)的支持。

  7. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  8. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  9. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  10. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  11. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  12. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  13. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  14. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  15. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  16. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  17. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  18. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  19. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  20. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  21. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  22. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  23. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  24. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  25. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  26. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  27. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  28. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  29. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  30. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  31. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  32. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  33. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  34. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  35. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  36. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  37. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  38. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  39. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  40. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  41. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  42. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  43. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  44. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  45. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  46. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  47. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  48. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  49. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  50. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  51. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  52. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  53. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  54. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  55. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  56. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  57. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  58. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  59. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  60. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  61. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  62. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  63. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  64. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  65. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  66. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  67. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  68. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  69. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  70. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  71. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  72. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  73. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  74. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  75. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  76. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  77. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  78. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  79. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  80. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  81. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  82. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  83. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  84. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  85. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  86. kvm_get_active_cr3_lam_bits函数中,如果guest_can_use函数返回false,则直接返回0,这可能不是预期的行为。建议添加错误处理或日志记录。

  87. 在`kvm_get_active_cr

@Avenger-285714 Avenger-285714 merged commit 08e842c into deepin-community:linux-6.6.y Dec 27, 2024
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants