Thread (35 messages) 35 messages, 6 authors, 2023-08-11

Re: [PATCH v8 02/14] KVM: Declare kvm_arch_flush_remote_tlbs() globally

From: Raghavendra Rao Ananta <hidden>
Date: 2023-08-10 20:55:13
Also in: kvm, kvm-riscv, kvmarm, linux-mips, linux-riscv, lkml

On Thu, Aug 10, 2023 at 5:26 AM Shaoqin Huang [off-list ref] wrote:


On 8/10/23 00:38, Raghavendra Rao Ananta wrote:
quoted
Hi Gavin,

On Tue, Aug 8, 2023 at 9:00 PM Gavin Shan [off-list ref] wrote:
quoted

On 8/9/23 09:13, Raghavendra Rao Ananta wrote:
quoted
There's no reason for the architectures to declare
kvm_arch_flush_remote_tlbs() in their own headers. Hence to
avoid this duplication, make the declaration global, leaving
the architectures to define only __KVM_HAVE_ARCH_FLUSH_REMOTE_TLBS
as needed.

Signed-off-by: Raghavendra Rao Ananta <redacted>
---
   arch/mips/include/asm/kvm_host.h | 1 -
   include/linux/kvm_host.h         | 2 ++
   2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
index 9b0ad8f3bf327..54a85f1d4f2c8 100644
--- a/arch/mips/include/asm/kvm_host.h
+++ b/arch/mips/include/asm/kvm_host.h
@@ -897,6 +897,5 @@ static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu) {}
   static inline void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu) {}

   #define __KVM_HAVE_ARCH_FLUSH_REMOTE_TLBS
-int kvm_arch_flush_remote_tlbs(struct kvm *kvm);

   #endif /* __MIPS_KVM_HOST_H__ */
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index e3f968b38ae97..ade5d4500c2ce 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -1484,6 +1484,8 @@ static inline int kvm_arch_flush_remote_tlbs(struct kvm *kvm)
   {
       return -ENOTSUPP;
   }
+#else
+int kvm_arch_flush_remote_tlbs(struct kvm *kvm);
   #endif

   #ifdef __KVM_HAVE_ARCH_NONCOHERENT_DMA
Is the declaration inconsistent to that in arch/x86/include/asm/kvm_host.h?
In order to keep them consistent, I guess we need move kvm_arch_flush_remote_tlbs()
from x86's header file to arch/x86/kvm/mmu/mmu.c and 'inline' needs to be dropped.
Unsure of the original intentions, I didn't want to disturb any
existing arrangements. If more people agree to this refactoring, I'm
happy to move.
This is amazing to me. This change can be compiled without any error
even if the declaration inconsistent between the kvm_host.h and x86's
header file.

I'm curious which option make it possible?
After doing some experiments, I think it works because of the order in
which the inline-definition and the declaration are laid out. If the
'inline' part of the function comes first and then the declaration, we
don't see any error. However if the positions were reversed, we would
see an error. (I'm not sure what the technical reason for this is).

Just to be safe, I can move the definition to arch/x86/kvm/mmu/mmu.c
as a non-inline function.

Thank you.
Raghavendra
Thanks,
Shaoqin
quoted
Thank you.
Raghavendra
quoted
Thanks,
Gavin
--
Shaoqin
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help