@@ -510,11 +514,12 @@ static MemTxResult zpci_write_bar(S390PCIBusDevice *pbdev, uint8_t pcias, uint64_t offset, uint64_t data, uint8_t len) { MemoryRegion *mr; + hwaddr subregion_base_addr;mr = pbdev->pdev->io_regions[pcias].memory;mr = s390_get_subregion(mr, offset, len); - offset -= mr->addr; - return memory_region_dispatch_write(mr, offset, data, + subregion_base_addr = memory_region_get_address(mr);
Any partixular reason for the temp variable?
+ return memory_region_dispatch_write(mr, offset - subregion_base_addr, data, size_memop(len) | MO_BE, MEMTXATTRS_UNSPECIFIED); } @@ -832,6 +837,7 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint8_t r3, uint64_t gaddr, S390PCIBusDevice *pbdev; MemoryRegion *mr; MemTxResult result; + hwaddr subregion_base_addr; uint64_t offset; int i; uint32_t fh; @@ -900,7 +906,8 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint8_t r3, uint64_t gaddr,mr = pbdev->pdev->io_regions[pcias].memory;mr = s390_get_subregion(mr, offset, len); - offset -= mr->addr; + subregion_base_addr = memory_region_get_address(mr);
Dito -- Cheers David / dhildenb
