X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fpci.c;h=42e4c3a6e9511478b8950f804eb2fb225c29e2ec;hb=e3b62e7befa086a4fb320890952f54667ee46329;hp=1e617f6fe1b37118f06ade9ad4a59daca46fafcb;hpb=832711d7dd475adcc5185c5d4e6f28702ba0949a;p=palacios.git diff --git a/palacios/src/devices/pci.c b/palacios/src/devices/pci.c index 1e617f6..42e4c3a 100644 --- a/palacios/src/devices/pci.c +++ b/palacios/src/devices/pci.c @@ -1114,7 +1114,7 @@ static int pci_save(struct v3_chkpt_ctx * ctx, void * private_data) { struct pci_device * dev = NULL; struct v3_chkpt_ctx * bus_ctx = NULL; - snprintf(buf, 128, "pci-%d\n", i); + snprintf(buf, 128, "pci-%d", i); bus_ctx = v3_chkpt_open_ctx(ctx->chkpt, ctx, buf); @@ -1156,7 +1156,7 @@ static int pci_load(struct v3_chkpt_ctx * ctx, void * private_data) { struct pci_device * dev = NULL; struct v3_chkpt_ctx * bus_ctx = NULL; - snprintf(buf, 128, "pci-%d\n", i); + snprintf(buf, 128, "pci-%d", i); bus_ctx = v3_chkpt_open_ctx(ctx->chkpt, ctx, buf); @@ -1202,6 +1202,12 @@ static struct v3_device_ops dev_ops = { static int pci_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { struct pci_internal * pci_state = V3_Malloc(sizeof(struct pci_internal)); + + if (!pci_state) { + PrintError("Cannot allocate in init\n"); + return -1; + } + int i = 0; char * dev_id = v3_cfg_val(cfg, "ID"); int ret = 0; @@ -1396,6 +1402,8 @@ int v3_pci_raise_acked_irq(struct vm_device * pci_bus, struct pci_device * dev, memset(&ipi, 0, sizeof(struct v3_gen_ipi)); + // decode MSI fields into IPI + ipi.vector = data->vector + vec.irq; ipi.mode = data->del_mode; ipi.logical = addr->dst_mode; @@ -1403,9 +1411,6 @@ int v3_pci_raise_acked_irq(struct vm_device * pci_bus, struct pci_device * dev, ipi.dst_shorthand = 0; ipi.dst = addr->dst_id; - // decode MSI fields into IPI - - V3_Print("Decode MSI\n"); v3_apic_send_ipi(dev->vm, &ipi, dev->apic_dev); @@ -1436,6 +1441,7 @@ int v3_pci_raise_acked_irq(struct vm_device * pci_bus, struct pci_device * dev, data = &(msix_table->entries[vec.irq].data); addr = &(msix_table->entries[vec.irq].addr);; + // decode MSIX fields into IPI ipi.vector = data->vector + vec.irq; ipi.mode = data->del_mode; ipi.logical = addr->dst_mode; @@ -1443,7 +1449,7 @@ int v3_pci_raise_acked_irq(struct vm_device * pci_bus, struct pci_device * dev, ipi.dst_shorthand = 0; ipi.dst = addr->dst_id; - // decode MSIX fields into IPI + V3_Print("Decode MSIX\n");