[RFC PATCH v2 7/8] KVM: arm64: Add KVM_CAP_ARM_HW_DBM

Shameer Kolothum shameerali.kolothum.thodi at huawei.com
Fri Aug 25 02:35:27 PDT 2023


Add a capability for userspace to enable hardware DBM support
for live migration.

ToDo: Update documentation.

Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi at huawei.com>
---
 arch/arm64/include/asm/kvm_host.h |  2 ++
 arch/arm64/kvm/arm.c              | 13 +++++++++++++
 include/uapi/linux/kvm.h          |  1 +
 3 files changed, 16 insertions(+)

diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index f623b989ddd1..17ac53150a1d 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -175,6 +175,8 @@ struct kvm_s2_mmu {
 	struct kvm_mmu_memory_cache split_page_cache;
 	uint64_t split_page_chunk_size;
 
+	bool hwdbm_enabled;  /* KVM_CAP_ARM_HW_DBM enabled */
+
 	struct kvm_arch *arch;
 };
 
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index fd2af63d788d..0dbf2cda40d7 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -115,6 +115,16 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
 		}
 		mutex_unlock(&kvm->slots_lock);
 		break;
+	case KVM_CAP_ARM_HW_DBM:
+		mutex_lock(&kvm->slots_lock);
+		if (!system_supports_hw_dbm()) {
+			r = -EINVAL;
+		} else {
+			r = 0;
+			kvm->arch.mmu.hwdbm_enabled = true;
+		}
+		mutex_unlock(&kvm->slots_lock);
+		break;
 	default:
 		r = -EINVAL;
 		break;
@@ -316,6 +326,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
 	case KVM_CAP_ARM_SUPPORTED_BLOCK_SIZES:
 		r = kvm_supported_block_sizes();
 		break;
+	case KVM_CAP_ARM_HW_DBM:
+		r = system_supports_hw_dbm();
+		break;
 	default:
 		r = 0;
 	}
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
index f089ab290978..99bd5c0420ba 100644
--- a/include/uapi/linux/kvm.h
+++ b/include/uapi/linux/kvm.h
@@ -1192,6 +1192,7 @@ struct kvm_ppc_resize_hpt {
 #define KVM_CAP_COUNTER_OFFSET 227
 #define KVM_CAP_ARM_EAGER_SPLIT_CHUNK_SIZE 228
 #define KVM_CAP_ARM_SUPPORTED_BLOCK_SIZES 229
+#define KVM_CAP_ARM_HW_DBM 230
 
 #ifdef KVM_CAP_IRQ_ROUTING
 
-- 
2.34.1




More information about the linux-arm-kernel mailing list