On 22.11.2017 23:05, Pierre Morel wrote: > Let's move the memory region write from pcistg into a dedicated > function. > This allows us to prepare a later patch searching for subregions > inside of the memory region. > > Signed-off-by: Pierre Morel <pmo...@linux.vnet.ibm.com> > Reviewed-by: Yi Min Zhao <zyi...@linux.vnet.ibm.com> > --- > hw/s390x/s390-pci-inst.c | 27 +++++++++++++++++---------- > 1 file changed, 17 insertions(+), 10 deletions(-) > > diff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c > index 69ff7b8..8d35f8f 100644 > --- a/hw/s390x/s390-pci-inst.c > +++ b/hw/s390x/s390-pci-inst.c > @@ -454,12 +454,27 @@ static int trap_msix(S390PCIBusDevice *pbdev, uint64_t > offset, uint8_t pcias) > } > } > > +static MemTxResult zpci_write_bar(S390PCIBusDevice *pbdev, uint8_t pcias, > + uint64_t offset, uint64_t data, uint8_t > len) > +{ > + MemoryRegion *mr; > + > + if (trap_msix(pbdev, offset, pcias)) { > + offset = offset - pbdev->msix.table_offset; > + mr = &pbdev->pdev->msix_table_mmio; > + } else { > + mr = pbdev->pdev->io_regions[pcias].memory; > + } > + > + return memory_region_dispatch_write(mr, offset, data, len, > + MEMTXATTRS_UNSPECIFIED); > +} > + > int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2) > { > CPUS390XState *env = &cpu->env; > uint64_t offset, data; > S390PCIBusDevice *pbdev; > - MemoryRegion *mr; > MemTxResult result; > uint8_t len; > uint32_t fh; > @@ -516,15 +531,7 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, > uint8_t r2) > return 0; > } > > - if (trap_msix(pbdev, offset, pcias)) { > - offset = offset - pbdev->msix.table_offset; > - mr = &pbdev->pdev->msix_table_mmio; > - } else { > - mr = pbdev->pdev->io_regions[pcias].memory; > - } > - > - result = memory_region_dispatch_write(mr, offset, data, len, > - MEMTXATTRS_UNSPECIFIED); > + result = zpci_write_bar(pbdev, pcias, offset, data, len); > if (result != MEMTX_OK) { > program_interrupt(env, PGM_OPERAND, 4); > return 0; >
Reviewed-by: Thomas Huth <th...@redhat.com>