Re: [Qemu-devel] [PATCH RFC 1 7/8] xen/pt: Move bulk of xen_pt_unregister_device in its own routine.

2015-07-01 Thread Stefano Stabellini
On Mon, 29 Jun 2015, Konrad Rzeszutek Wilk wrote:
 This way we can call it if we fail during init.
 
 This code movement introduces no changes.
 
 Signed-off-by: Konrad Rzeszutek Wilk konrad.w...@oracle.com

Acked-by: Stefano Stabellini stefano.stabell...@eu.citrix.com



  hw/xen/xen_pt.c | 119 
 +---
  1 file changed, 62 insertions(+), 57 deletions(-)
 
 diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
 index cda6a2d..589c6c6 100644
 --- a/hw/xen/xen_pt.c
 +++ b/hw/xen/xen_pt.c
 @@ -686,6 +686,67 @@ static const MemoryListener xen_pt_io_listener = {
  .priority = 10,
  };
  
 +/* destroy. */
 +static void xen_pt_destroy(PCIDevice *d) {
 +
 +XenPCIPassthroughState *s = XEN_PT_DEVICE(d);
 +uint8_t machine_irq = s-machine_irq;
 +uint8_t intx;
 +int rc;
 +
 + /* Note that if xen_host_pci_device_put had closed config_fd, then
 +  * intx value becomes 0xff. */
 +intx = xen_pt_pci_intx(s);
 +if (machine_irq  !xen_host_pci_device_closed(s-real_device)) {
 +rc = xc_domain_unbind_pt_irq(xen_xc, xen_domid, machine_irq,
 + PT_IRQ_TYPE_PCI,
 + pci_bus_num(d-bus),
 + PCI_SLOT(s-dev.devfn),
 + intx,
 + 0 /* isa_irq */);
 +if (rc  0) {
 +XEN_PT_ERR(d, unbinding of interrupt INT%c failed.
 +(machine irq: %i, err: %d)
 +But bravely continuing on..\n,
 +   'a' + intx, machine_irq, errno);
 +}
 +}
 +
 +/* N.B. xen_pt_config_delete takes care of freeing them. */
 +if (s-msi) {
 +xen_pt_msi_disable(s);
 +}
 +if (s-msix) {
 +xen_pt_msix_disable(s);
 +}
 +
 +if (machine_irq) {
 +xen_pt_mapped_machine_irq[machine_irq]--;
 +
 +if (xen_pt_mapped_machine_irq[machine_irq] == 0) {
 +rc = xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq);
 +
 +if (rc  0) {
 +XEN_PT_ERR(d, unmapping of interrupt %i failed. (err: %d)
 +But bravely continuing on..\n,
 +   machine_irq, errno);
 +}
 +}
 +s-machine_irq = 0;
 +}
 +
 +/* delete all emulated config registers */
 +xen_pt_config_delete(s);
 +
 +if (s-listener_set) {
 +memory_listener_unregister(s-memory_listener);
 +memory_listener_unregister(s-io_listener);
 +s-listener_set = false;
 +}
 +if (!xen_host_pci_device_closed(s-real_device)) {
 +xen_host_pci_device_put(s-real_device);
 +}
 +}
  /* init */
  
  static int xen_pt_initfn(PCIDevice *d)
 @@ -820,63 +881,7 @@ out:
  
  static void xen_pt_unregister_device(PCIDevice *d)
  {
 -XenPCIPassthroughState *s = XEN_PT_DEVICE(d);
 -uint8_t machine_irq = s-machine_irq;
 -uint8_t intx;
 -int rc;
 -
 - /* Note that if xen_host_pci_device_put had closed config_fd, then
 -  * intx value becomes 0xff. */
 -intx = xen_pt_pci_intx(s);
 -if (machine_irq  !xen_host_pci_device_closed(s-real_device)) {
 -rc = xc_domain_unbind_pt_irq(xen_xc, xen_domid, machine_irq,
 - PT_IRQ_TYPE_PCI,
 - pci_bus_num(d-bus),
 - PCI_SLOT(s-dev.devfn),
 - intx,
 - 0 /* isa_irq */);
 -if (rc  0) {
 -XEN_PT_ERR(d, unbinding of interrupt INT%c failed.
 -(machine irq: %i, err: %d)
 -But bravely continuing on..\n,
 -   'a' + intx, machine_irq, errno);
 -}
 -}
 -
 -/* N.B. xen_pt_config_delete takes care of freeing them. */
 -if (s-msi) {
 -xen_pt_msi_disable(s);
 -}
 -if (s-msix) {
 -xen_pt_msix_disable(s);
 -}
 -
 -if (machine_irq) {
 -xen_pt_mapped_machine_irq[machine_irq]--;
 -
 -if (xen_pt_mapped_machine_irq[machine_irq] == 0) {
 -rc = xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq);
 -
 -if (rc  0) {
 -XEN_PT_ERR(d, unmapping of interrupt %i failed. (err: %d)
 -But bravely continuing on..\n,
 -   machine_irq, errno);
 -}
 -}
 -s-machine_irq = 0;
 -}
 -
 -/* delete all emulated config registers */
 -xen_pt_config_delete(s);
 -
 -if (s-listener_set) {
 -memory_listener_unregister(s-memory_listener);
 -memory_listener_unregister(s-io_listener);
 -s-listener_set = false;
 -}
 -if (!xen_host_pci_device_closed(s-real_device)) {
 -xen_host_pci_device_put(s-real_device);
 -}
 +xen_pt_destroy(d);
  }
  
  static Property 

[Qemu-devel] [PATCH RFC 1 7/8] xen/pt: Move bulk of xen_pt_unregister_device in its own routine.

2015-06-29 Thread Konrad Rzeszutek Wilk
This way we can call it if we fail during init.

This code movement introduces no changes.

Signed-off-by: Konrad Rzeszutek Wilk konrad.w...@oracle.com
---
 hw/xen/xen_pt.c | 119 +---
 1 file changed, 62 insertions(+), 57 deletions(-)

diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index cda6a2d..589c6c6 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -686,6 +686,67 @@ static const MemoryListener xen_pt_io_listener = {
 .priority = 10,
 };
 
+/* destroy. */
+static void xen_pt_destroy(PCIDevice *d) {
+
+XenPCIPassthroughState *s = XEN_PT_DEVICE(d);
+uint8_t machine_irq = s-machine_irq;
+uint8_t intx;
+int rc;
+
+ /* Note that if xen_host_pci_device_put had closed config_fd, then
+  * intx value becomes 0xff. */
+intx = xen_pt_pci_intx(s);
+if (machine_irq  !xen_host_pci_device_closed(s-real_device)) {
+rc = xc_domain_unbind_pt_irq(xen_xc, xen_domid, machine_irq,
+ PT_IRQ_TYPE_PCI,
+ pci_bus_num(d-bus),
+ PCI_SLOT(s-dev.devfn),
+ intx,
+ 0 /* isa_irq */);
+if (rc  0) {
+XEN_PT_ERR(d, unbinding of interrupt INT%c failed.
+(machine irq: %i, err: %d)
+But bravely continuing on..\n,
+   'a' + intx, machine_irq, errno);
+}
+}
+
+/* N.B. xen_pt_config_delete takes care of freeing them. */
+if (s-msi) {
+xen_pt_msi_disable(s);
+}
+if (s-msix) {
+xen_pt_msix_disable(s);
+}
+
+if (machine_irq) {
+xen_pt_mapped_machine_irq[machine_irq]--;
+
+if (xen_pt_mapped_machine_irq[machine_irq] == 0) {
+rc = xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq);
+
+if (rc  0) {
+XEN_PT_ERR(d, unmapping of interrupt %i failed. (err: %d)
+But bravely continuing on..\n,
+   machine_irq, errno);
+}
+}
+s-machine_irq = 0;
+}
+
+/* delete all emulated config registers */
+xen_pt_config_delete(s);
+
+if (s-listener_set) {
+memory_listener_unregister(s-memory_listener);
+memory_listener_unregister(s-io_listener);
+s-listener_set = false;
+}
+if (!xen_host_pci_device_closed(s-real_device)) {
+xen_host_pci_device_put(s-real_device);
+}
+}
 /* init */
 
 static int xen_pt_initfn(PCIDevice *d)
@@ -820,63 +881,7 @@ out:
 
 static void xen_pt_unregister_device(PCIDevice *d)
 {
-XenPCIPassthroughState *s = XEN_PT_DEVICE(d);
-uint8_t machine_irq = s-machine_irq;
-uint8_t intx;
-int rc;
-
- /* Note that if xen_host_pci_device_put had closed config_fd, then
-  * intx value becomes 0xff. */
-intx = xen_pt_pci_intx(s);
-if (machine_irq  !xen_host_pci_device_closed(s-real_device)) {
-rc = xc_domain_unbind_pt_irq(xen_xc, xen_domid, machine_irq,
- PT_IRQ_TYPE_PCI,
- pci_bus_num(d-bus),
- PCI_SLOT(s-dev.devfn),
- intx,
- 0 /* isa_irq */);
-if (rc  0) {
-XEN_PT_ERR(d, unbinding of interrupt INT%c failed.
-(machine irq: %i, err: %d)
-But bravely continuing on..\n,
-   'a' + intx, machine_irq, errno);
-}
-}
-
-/* N.B. xen_pt_config_delete takes care of freeing them. */
-if (s-msi) {
-xen_pt_msi_disable(s);
-}
-if (s-msix) {
-xen_pt_msix_disable(s);
-}
-
-if (machine_irq) {
-xen_pt_mapped_machine_irq[machine_irq]--;
-
-if (xen_pt_mapped_machine_irq[machine_irq] == 0) {
-rc = xc_physdev_unmap_pirq(xen_xc, xen_domid, machine_irq);
-
-if (rc  0) {
-XEN_PT_ERR(d, unmapping of interrupt %i failed. (err: %d)
-But bravely continuing on..\n,
-   machine_irq, errno);
-}
-}
-s-machine_irq = 0;
-}
-
-/* delete all emulated config registers */
-xen_pt_config_delete(s);
-
-if (s-listener_set) {
-memory_listener_unregister(s-memory_listener);
-memory_listener_unregister(s-io_listener);
-s-listener_set = false;
-}
-if (!xen_host_pci_device_closed(s-real_device)) {
-xen_host_pci_device_put(s-real_device);
-}
+xen_pt_destroy(d);
 }
 
 static Property xen_pci_passthrough_properties[] = {
-- 
2.1.0