ANDROID: KVM: arm64: Pad IOMMU structs for KMI
KMI is going to be frozen soon, so add padding in IOMMU structs as it can be helpful to update the driver without changing the ABI. The updated structs are: kvm_iommu_ops: kvm_iommu_driver: reserve 8 qwords, this is only instantiated once, and the most likely one to change, as it implements the callbacks between the IOMMU code and the hypervisor module. kvm_iommu_driver: reserve 8 qwords, this is only instantiated once, this implements the callbacks between the IOMMU code and the kernel module. kvm_hyp_iommu: reserve 4 qwords, instantiated once per-iommu. kvm_hyp_iommu_domain: reserve 2 qwords, this is the most instantiated struct, so we don’t add a lot of padding. iommu_iotlb_gather: reserve 2 qwords, in case we need to add hypervisor specific logic in the future. io_pgtable_ops: reserve 4 qwords, instantiated once per iommu domain. Bug: 357781595 Bug: 384432312 Change-Id: I1c5c9e0dd4fe1b422c8a20e23df6b9e10f646071 Signed-off-by: Mostafa Saleh <smostafa@google.com>
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#ifndef __ARM64_KVM_HOST_H__
|
||||
#define __ARM64_KVM_HOST_H__
|
||||
|
||||
#include <linux/android_kabi.h>
|
||||
#include <linux/arm-smccc.h>
|
||||
#include <linux/bitmap.h>
|
||||
#include <linux/types.h>
|
||||
@@ -1667,6 +1668,14 @@ struct kvm_iommu_driver {
|
||||
int (*init_driver)(void);
|
||||
void (*remove_driver)(void);
|
||||
pkvm_handle_t (*get_iommu_id)(struct device *dev);
|
||||
ANDROID_KABI_RESERVE(1);
|
||||
ANDROID_KABI_RESERVE(2);
|
||||
ANDROID_KABI_RESERVE(3);
|
||||
ANDROID_KABI_RESERVE(4);
|
||||
ANDROID_KABI_RESERVE(5);
|
||||
ANDROID_KABI_RESERVE(6);
|
||||
ANDROID_KABI_RESERVE(7);
|
||||
ANDROID_KABI_RESERVE(8);
|
||||
};
|
||||
|
||||
struct kvm_iommu_ops;
|
||||
|
||||
@@ -64,6 +64,14 @@ struct kvm_iommu_ops {
|
||||
phys_addr_t start, phys_addr_t end, int prot);
|
||||
int (*suspend)(struct kvm_hyp_iommu *iommu);
|
||||
int (*resume)(struct kvm_hyp_iommu *iommu);
|
||||
ANDROID_KABI_RESERVE(1);
|
||||
ANDROID_KABI_RESERVE(2);
|
||||
ANDROID_KABI_RESERVE(3);
|
||||
ANDROID_KABI_RESERVE(4);
|
||||
ANDROID_KABI_RESERVE(5);
|
||||
ANDROID_KABI_RESERVE(6);
|
||||
ANDROID_KABI_RESERVE(7);
|
||||
ANDROID_KABI_RESERVE(8);
|
||||
};
|
||||
|
||||
int kvm_iommu_init(struct kvm_iommu_ops *ops,
|
||||
|
||||
@@ -24,6 +24,8 @@ struct kvm_hyp_iommu_domain {
|
||||
atomic_t refs;
|
||||
pkvm_handle_t domain_id;
|
||||
void *priv;
|
||||
ANDROID_KABI_RESERVE(1);
|
||||
ANDROID_KABI_RESERVE(2);
|
||||
};
|
||||
|
||||
extern void **kvm_nvhe_sym(kvm_hyp_iommu_domains);
|
||||
@@ -63,6 +65,10 @@ struct kvm_hyp_iommu {
|
||||
#endif
|
||||
struct kvm_power_domain power_domain;
|
||||
bool power_is_off;
|
||||
ANDROID_KABI_RESERVE(1);
|
||||
ANDROID_KABI_RESERVE(2);
|
||||
ANDROID_KABI_RESERVE(3);
|
||||
ANDROID_KABI_RESERVE(4);
|
||||
};
|
||||
|
||||
#endif /* __KVM_IOMMU_H */
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#ifndef __IO_PGTABLE_H
|
||||
#define __IO_PGTABLE_H
|
||||
|
||||
#include <linux/android_kabi.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/iommu.h>
|
||||
|
||||
@@ -237,6 +238,10 @@ struct io_pgtable_ops {
|
||||
unsigned long iova, size_t size,
|
||||
unsigned long flags,
|
||||
struct iommu_dirty_bitmap *dirty);
|
||||
ANDROID_KABI_RESERVE(1);
|
||||
ANDROID_KABI_RESERVE(2);
|
||||
ANDROID_KABI_RESERVE(3);
|
||||
ANDROID_KABI_RESERVE(4);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#ifndef __LINUX_IOMMU_H
|
||||
#define __LINUX_IOMMU_H
|
||||
|
||||
#include <linux/android_kabi.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/types.h>
|
||||
@@ -348,6 +349,8 @@ struct iommu_iotlb_gather {
|
||||
size_t pgsize;
|
||||
struct list_head freelist;
|
||||
bool queued;
|
||||
ANDROID_KABI_RESERVE(1);
|
||||
ANDROID_KABI_RESERVE(2);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user