Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


added host_pci passthrough PCI support
[palacios.git] / palacios / src / devices / pci.c
index 1e617f6..42e4c3a 100644 (file)
@@ -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");