Commit 71583888 authored by Yi Min Zhao's avatar Yi Min Zhao Committed by Cornelia Huck
Browse files

s390x/pci: separate s390_pcihost_iommu_configure function



Split s390_pcihost_iommu_configure() into separate functions for
configuring and deconfiguring in order to make the code more readable.

Signed-off-by: default avatarYi Min Zhao <zyimin@linux.vnet.ibm.com>
Reviewed-by: default avatarPierre Morel <pmorel@linux.vnet.ibm.com>
Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
parent 8f5cb693
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -478,19 +478,22 @@ static const MemoryRegionOps s390_msi_ctrl_ops = {
    .endianness = DEVICE_LITTLE_ENDIAN,
};

void s390_pcihost_iommu_configure(S390PCIBusDevice *pbdev, bool enable)
void s390_pci_iommu_enable(S390PCIBusDevice *pbdev)
{
    pbdev->configured = false;

    if (enable) {
    uint64_t size = pbdev->pal - pbdev->pba + 1;

    memory_region_init_iommu(&pbdev->iommu_mr, OBJECT(&pbdev->mr),
                             &s390_iommu_ops, "iommu-s390", size);
    memory_region_add_subregion(&pbdev->mr, pbdev->pba, &pbdev->iommu_mr);
    } else {
        memory_region_del_subregion(&pbdev->mr, &pbdev->iommu_mr);
    pbdev->configured = true;
}

void s390_pci_iommu_disable(S390PCIBusDevice *pbdev)
{
    pbdev->configured = false;
    memory_region_del_subregion(&pbdev->mr, &pbdev->iommu_mr);
    object_unparent(OBJECT(&pbdev->iommu_mr));
    pbdev->configured = true;
}

+2 −1
Original line number Diff line number Diff line
@@ -249,7 +249,8 @@ int chsc_sei_nt2_get_event(void *res);
int chsc_sei_nt2_have_event(void);
void s390_pci_sclp_configure(SCCB *sccb);
void s390_pci_sclp_deconfigure(SCCB *sccb);
void s390_pcihost_iommu_configure(S390PCIBusDevice *pbdev, bool enable);
void s390_pci_iommu_enable(S390PCIBusDevice *pbdev);
void s390_pci_iommu_disable(S390PCIBusDevice *pbdev);
S390PCIBusDevice *s390_pci_find_dev_by_idx(uint32_t idx);
S390PCIBusDevice *s390_pci_find_dev_by_fh(uint32_t fh);
S390PCIBusDevice *s390_pci_find_dev_by_fid(uint32_t fid);
+2 −3
Original line number Diff line number Diff line
@@ -705,18 +705,17 @@ static int reg_ioat(CPUS390XState *env, S390PCIBusDevice *pbdev, ZpciFib fib)
    pbdev->pal = pal;
    pbdev->g_iota = g_iota;

    s390_pcihost_iommu_configure(pbdev, true);
    s390_pci_iommu_enable(pbdev);

    return 0;
}

static void dereg_ioat(S390PCIBusDevice *pbdev)
{
    s390_pci_iommu_disable(pbdev);
    pbdev->pba = 0;
    pbdev->pal = 0;
    pbdev->g_iota = 0;

    s390_pcihost_iommu_configure(pbdev, false);
}

int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar)