ioemu-remote: pt_init must take a const direct_pci.
Signed-off-by: Jean Guyader <jean.guyader@xxxxxxxxxxxxx>
--
Jean Guyader
diff --git a/hw/pass-through.c b/hw/pass-through.c
index bddc203..abe0376 100644
--- a/hw/pass-through.c
+++ b/hw/pass-through.c
@@ -691,13 +689,15 @@ int power_off_php_slot(int php_slot)
return unregister_real_device(php_slot);
}
-int pt_init(PCIBus *e_bus, char *direct_pci)
+int pt_init(PCIBus *e_bus, const char *direct_pci)
{
int seg, b, d, f, php_slot = 0;
struct pt_dev *pt_dev;
struct pci_access *pci_access;
char *vslots;
char slot_str[8];
+ char *direct_pci_head = NULL;
+ char *direct_pci_p = NULL;
/* Initialize libpci */
pci_access = pci_alloc();
@@ -713,17 +713,20 @@ int pt_init(PCIBus *e_bus, char *direct_pci)
dpci_infos.pci_access = pci_access;
dpci_infos.e_bus = e_bus;
- if ( strlen(direct_pci) == 0 ) {
+ if ( !direct_pci || strlen(direct_pci) == 0 ) {
return 0;
}
+ if ( !(direct_pci_head = direct_pci_p = strdup(direct_pci)) )
+ return 0;
+
/* the virtual pci slots of all pass-through devs
* with hex format: xx;xx...;
*/
vslots = qemu_mallocz ( strlen(direct_pci) / 3 );
/* Assign given devices to guest */
- while ( next_bdf(&direct_pci, &seg, &b, &d, &f) )
+ while ( next_bdf(&direct_pci_p, &seg, &b, &d, &f) )
{
/* Register real device with the emulated bus */
pt_dev = register_real_device(e_bus, "DIRECT PCI", PT_VIRT_DEVFN_AUTO,
@@ -731,6 +734,7 @@ int pt_init(PCIBus *e_bus, char *direct_pci)
if ( pt_dev == NULL )
{
PT_LOG("Error: Registration failed (%02x:%02x.%x)\n", b, d, f);
+ free(direct_pci_head);
return -1;
}
@@ -751,6 +755,7 @@ int pt_init(PCIBus *e_bus, char *direct_pci)
xenstore_write_vslots(vslots);
qemu_free(vslots);
+ free(direct_pci_head);
/* Success */
return 0;
diff --git a/hw/pass-through.h b/hw/pass-through.h
index ffd87ef..4f5d88a 100644
--- a/hw/pass-through.h
+++ b/hw/pass-through.h
@@ -112,7 +112,5 @@ struct pci_config_cf8 {
};
};
-int pt_init(PCIBus * e_bus, char * direct_pci);
-
#endif /* __PASSTHROUGH_H__ */
diff --git a/hw/pci.h b/hw/pci.h
index 250c8ab..a855de8 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -164,4 +164,7 @@ PCIBus *pci_prep_init(qemu_irq *pic);
PCIBus *pci_apb_init(target_phys_addr_t special_base, target_phys_addr_t
mem_base,
qemu_irq *pic);
+/* pass-through.c */
+int pt_init(PCIBus *e_bus, const char *direct_pci_opt);
+
#endif
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|