After the last review round I suppressed the fmb_do_update64() function to have only one single fmb_do_update() to handle all cases 1,2,4 or 8 bytes.
Patch is tested (for the good case) on Z(KVM) and X(TCG). Yi Min Zhao (1): s390x/pci: add common function measurement block hw/s390x/s390-pci-bus.c | 4 +- hw/s390x/s390-pci-bus.h | 29 +++++++++++ hw/s390x/s390-pci-inst.c | 129 +++++++++++++++++++++++++++++++++++++++++++++-- hw/s390x/s390-pci-inst.h | 1 + 4 files changed, 159 insertions(+), 4 deletions(-) -- 2.7.4 Changelog: from v3: - changed commit message according to Conny's comments In s390-pci-inst.c - simplify the fmb_do_update() to handle all cases from byte to quad. (Conny) from v2: In s390-pci-bus: - Initialize the FMB Format. In s390-pci-bus.h - re-organization of the internal counters, having a table for the internal counters. In s390-pci-inst.c - Internal counters update (LD/ST/STB/RPCIT) is done always. even if the FMB if fmb_addr is NULL. AFAIU this respect the documentation which only states that FMB update is stopped. - in mpcifc_service_call(), moved the setting of fmb_addr after the timer has been stopped. - fmb_update((), use address_space_stq_be() to handle endianness when storing the FMB. - define the format with 32 bits instead of one char and reserved chars, this is easier to handle the FMB copy. - No update of the DMA fields inside the FMB, as stipulated by the documentation when format32 is 0.