ANDROID: KVM: arm64: Remove struct kvm_cpu_context from the KMI
struct kvm_cpu_context pulls in a lot of KVM-internal types into the KMI (struct kvm, struct kvm_vcpu, ...). None of these should be needed by modules, so let's remove it from the KMI. Bug: 357781595 Change-Id: I2302a9354721e5ef504a6c3e67d9bd4f17582ac8 Signed-off-by: Quentin Perret <qperret@google.com>
This commit is contained in:
committed by
Carlos Llamas
parent
15bf9aa274
commit
ef10b442e4
@@ -69,7 +69,7 @@ struct kvm_iommu_ops {
|
|||||||
phys_addr_t (*iova_to_phys)(struct kvm_hyp_iommu_domain *domain, unsigned long iova);
|
phys_addr_t (*iova_to_phys)(struct kvm_hyp_iommu_domain *domain, unsigned long iova);
|
||||||
void (*iotlb_sync)(struct kvm_hyp_iommu_domain *domain,
|
void (*iotlb_sync)(struct kvm_hyp_iommu_domain *domain,
|
||||||
struct iommu_iotlb_gather *gather);
|
struct iommu_iotlb_gather *gather);
|
||||||
bool (*dabt_handler)(struct kvm_cpu_context *host_ctxt, u64 esr, u64 addr);
|
bool (*dabt_handler)(struct user_pt_regs *regs, u64 esr, u64 addr);
|
||||||
void (*host_stage2_idmap)(struct kvm_hyp_iommu_domain *domain,
|
void (*host_stage2_idmap)(struct kvm_hyp_iommu_domain *domain,
|
||||||
phys_addr_t start, phys_addr_t end, int prot);
|
phys_addr_t start, phys_addr_t end, int prot);
|
||||||
void (*host_stage2_idmap_complete)(bool map);
|
void (*host_stage2_idmap_complete)(bool map);
|
||||||
|
|||||||
@@ -609,7 +609,7 @@ bool kvm_iommu_host_dabt_handler(struct kvm_cpu_context *host_ctxt, u64 esr, u64
|
|||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
if (kvm_iommu_ops && kvm_iommu_ops->dabt_handler)
|
if (kvm_iommu_ops && kvm_iommu_ops->dabt_handler)
|
||||||
ret = kvm_iommu_ops->dabt_handler(host_ctxt, esr, addr);
|
ret = kvm_iommu_ops->dabt_handler(&host_ctxt->regs, esr, addr);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
kvm_skip_host_instr();
|
kvm_skip_host_instr();
|
||||||
|
|||||||
@@ -1503,7 +1503,7 @@ static phys_addr_t smmu_iova_to_phys(struct kvm_hyp_iommu_domain *domain,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool smmu_dabt_device(struct hyp_arm_smmu_v3_device *smmu,
|
static bool smmu_dabt_device(struct hyp_arm_smmu_v3_device *smmu,
|
||||||
struct kvm_cpu_context *host_ctxt,
|
struct user_pt_regs *regs,
|
||||||
u64 esr, u32 off)
|
u64 esr, u32 off)
|
||||||
{
|
{
|
||||||
bool is_write = esr & ESR_ELx_WNR;
|
bool is_write = esr & ESR_ELx_WNR;
|
||||||
@@ -1539,9 +1539,9 @@ static bool smmu_dabt_device(struct hyp_arm_smmu_v3_device *smmu,
|
|||||||
if (!mask)
|
if (!mask)
|
||||||
return false;
|
return false;
|
||||||
if (is_write)
|
if (is_write)
|
||||||
writel_relaxed(cpu_reg(host_ctxt, rd) & mask, smmu->base + off);
|
writel_relaxed(regs->regs[rd] & mask, smmu->base + off);
|
||||||
else
|
else
|
||||||
cpu_reg(host_ctxt, rd) = readl_relaxed(smmu->base + off);
|
regs->regs[rd] = readl_relaxed(smmu->base + off);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1601,14 +1601,14 @@ static int smmu_dev_block_dma(struct kvm_hyp_iommu *iommu, u32 sid, bool is_host
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool smmu_dabt_handler(struct kvm_cpu_context *host_ctxt, u64 esr, u64 addr)
|
static bool smmu_dabt_handler(struct user_pt_regs *regs, u64 esr, u64 addr)
|
||||||
{
|
{
|
||||||
struct hyp_arm_smmu_v3_device *smmu;
|
struct hyp_arm_smmu_v3_device *smmu;
|
||||||
|
|
||||||
for_each_smmu(smmu) {
|
for_each_smmu(smmu) {
|
||||||
if (addr < smmu->mmio_addr || addr >= smmu->mmio_addr + smmu->mmio_size)
|
if (addr < smmu->mmio_addr || addr >= smmu->mmio_addr + smmu->mmio_size)
|
||||||
continue;
|
continue;
|
||||||
return smmu_dabt_device(smmu, host_ctxt, esr, addr - smmu->mmio_addr);
|
return smmu_dabt_device(smmu, regs, esr, addr - smmu->mmio_addr);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user