diff options
author | Isaku Yamahata <yamahata@valinux.co.jp> | 2011-08-05 18:22:06 +0900 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2011-08-24 15:52:54 +0300 |
commit | 74d63b65479f4d8a72c1bba54256eee029cd5d5f (patch) | |
tree | 94b6b24c9036c5d340a7838177a054208cd895cd /hw/pcie_aer.c | |
parent | 1553d4f1fc6b7455234de93d105e7b46bc7a0844 (diff) | |
download | qemu-74d63b65479f4d8a72c1bba54256eee029cd5d5f.zip qemu-74d63b65479f4d8a72c1bba54256eee029cd5d5f.tar.gz qemu-74d63b65479f4d8a72c1bba54256eee029cd5d5f.tar.bz2 |
pcie/aer: fix inject aer error command
various fixes to make aer inject error command work.
- wrong assert
- command line parser
- err.status needs initialization
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/pcie_aer.c')
-rw-r--r-- | hw/pcie_aer.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/hw/pcie_aer.c b/hw/pcie_aer.c index 2ae65ec..62c06ea 100644 --- a/hw/pcie_aer.c +++ b/hw/pcie_aer.c @@ -415,7 +415,7 @@ static void pcie_aer_update_log(PCIDevice *dev, const PCIEAERErr *err) int i; assert(err->status); - assert(err->status & (err->status - 1)); + assert(!(err->status & (err->status - 1))); errcap &= ~(PCI_ERR_CAP_FEP_MASK | PCI_ERR_CAP_TLP); errcap |= PCI_ERR_CAP_FEP(first_bit); @@ -495,7 +495,7 @@ static int pcie_aer_record_error(PCIDevice *dev, int fep = PCI_ERR_CAP_FEP(errcap); assert(err->status); - assert(err->status & (err->status - 1)); + assert(!(err->status & (err->status - 1))); if (errcap & PCI_ERR_CAP_MHRE && (pci_get_long(aer_cap + PCI_ERR_UNCOR_STATUS) & (1U << fep))) { @@ -979,20 +979,21 @@ int do_pcie_aer_inejct_error(Monitor *mon, if (pcie_aer_parse_error_string(error_name, &error_status, &correctable)) { char *e = NULL; error_status = strtoul(error_name, &e, 0); - correctable = !!qdict_get_int(qdict, "correctable"); + correctable = qdict_get_try_bool(qdict, "correctable", 0); if (!e || *e != '\0') { monitor_printf(mon, "invalid error status value. \"%s\"", error_name); return -EINVAL; } } + err.status = error_status; err.source_id = (pci_bus_num(dev->bus) << 8) | dev->devfn; err.flags = 0; if (correctable) { err.flags |= PCIE_AER_ERR_IS_CORRECTABLE; } - if (qdict_get_int(qdict, "advisory_non_fatal")) { + if (qdict_get_try_bool(qdict, "advisory_non_fatal", 0)) { err.flags |= PCIE_AER_ERR_MAYBE_ADVISORY; } if (qdict_haskey(qdict, "header0")) { |