mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
hw/pvrdma: Collect debugging statistics
Add counters to enable enhance debugging Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> Message-Id: <1552300155-25216-5-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib <kamalheib1@gmail.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
This commit is contained in:
parent
2cfa953009
commit
c2dd117b38
6 changed files with 106 additions and 18 deletions
|
@ -70,6 +70,14 @@ typedef struct DSRInfo {
|
|||
PvrdmaRing cq;
|
||||
} DSRInfo;
|
||||
|
||||
typedef struct PVRDMADevStats {
|
||||
uint64_t commands;
|
||||
uint64_t regs_reads;
|
||||
uint64_t regs_writes;
|
||||
uint64_t uar_writes;
|
||||
uint64_t interrupts;
|
||||
} PVRDMADevStats;
|
||||
|
||||
typedef struct PVRDMADev {
|
||||
PCIDevice parent_obj;
|
||||
MemoryRegion msix;
|
||||
|
@ -89,6 +97,7 @@ typedef struct PVRDMADev {
|
|||
CharBackend mad_chr;
|
||||
VMXNET3State *func0;
|
||||
Notifier shutdown_notifier;
|
||||
PVRDMADevStats stats;
|
||||
} PVRDMADev;
|
||||
#define PVRDMA_DEV(dev) OBJECT_CHECK(PVRDMADev, (dev), PVRDMA_HW_NAME)
|
||||
|
||||
|
@ -123,6 +132,7 @@ static inline void post_interrupt(PVRDMADev *dev, unsigned vector)
|
|||
PCIDevice *pci_dev = PCI_DEVICE(dev);
|
||||
|
||||
if (likely(!dev->interrupt_mask)) {
|
||||
dev->stats.interrupts++;
|
||||
msix_notify(pci_dev, vector);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -651,6 +651,8 @@ int pvrdma_exec_cmd(PVRDMADev *dev)
|
|||
|
||||
trace_pvrdma_exec_cmd(dsr_info->req->hdr.cmd, dsr_info->rsp->hdr.err);
|
||||
|
||||
dev->stats.commands++;
|
||||
|
||||
out:
|
||||
set_reg_val(dev, PVRDMA_REG_ERR, err);
|
||||
post_interrupt(dev, INTR_VEC_CMD_RING);
|
||||
|
|
|
@ -337,6 +337,8 @@ static uint64_t pvrdma_regs_read(void *opaque, hwaddr addr, unsigned size)
|
|||
PVRDMADev *dev = opaque;
|
||||
uint32_t val;
|
||||
|
||||
dev->stats.regs_reads++;
|
||||
|
||||
if (get_reg_val(dev, addr, &val)) {
|
||||
rdma_error_report("Failed to read REG value from address 0x%x",
|
||||
(uint32_t)addr);
|
||||
|
@ -353,6 +355,8 @@ static void pvrdma_regs_write(void *opaque, hwaddr addr, uint64_t val,
|
|||
{
|
||||
PVRDMADev *dev = opaque;
|
||||
|
||||
dev->stats.regs_writes++;
|
||||
|
||||
if (set_reg_val(dev, addr, val)) {
|
||||
rdma_error_report("Failed to set REG value, addr=0x%"PRIx64 ", val=0x%"PRIx64,
|
||||
addr, val);
|
||||
|
@ -421,6 +425,8 @@ static void pvrdma_uar_write(void *opaque, hwaddr addr, uint64_t val,
|
|||
{
|
||||
PVRDMADev *dev = opaque;
|
||||
|
||||
dev->stats.uar_writes++;
|
||||
|
||||
switch (addr & 0xFFF) { /* Mask with 0xFFF as each UC gets page */
|
||||
case PVRDMA_UAR_QP_OFFSET:
|
||||
if (val & PVRDMA_UAR_QP_SEND) {
|
||||
|
@ -612,6 +618,8 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp)
|
|||
goto out;
|
||||
}
|
||||
|
||||
memset(&dev->stats, 0, sizeof(dev->stats));
|
||||
|
||||
dev->shutdown_notifier.notify = pvrdma_shutdown_notifier;
|
||||
qemu_register_shutdown_notifier(&dev->shutdown_notifier);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue