Message ID | 1511388334-16347-7-git-send-email-pmorel@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 <pmorel@linux.vnet.ibm.com> > Reviewed-by: Yi Min Zhao <zyimin@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 <thuth@redhat.com>
On 23/11/2017 10:36, Thomas Huth wrote: > 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 <pmorel@linux.vnet.ibm.com> >> Reviewed-by: Yi Min Zhao <zyimin@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 <thuth@redhat.com> > Thanks, Pierre
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;