[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Xen-devel] [PATCH RFC 1 6/8] xen/pt: Make xen_pt_unreg
From: |
Konrad Rzeszutek Wilk |
Subject: |
Re: [Qemu-devel] [Xen-devel] [PATCH RFC 1 6/8] xen/pt: Make xen_pt_unregister_device idempotent |
Date: |
Thu, 2 Jul 2015 14:54:10 -0400 |
User-agent: |
Mutt/1.5.9i |
> > @@ -858,15 +863,20 @@ static void xen_pt_unregister_device(PCIDevice *d)
> > machine_irq, errno);
> > }
> > }
> > + s->machine_irq = 0;
> > }
> >
> > /* delete all emulated config registers */
> > xen_pt_config_delete(s);
> >
> > - memory_listener_unregister(&s->memory_listener);
> > - memory_listener_unregister(&s->io_listener);
> > -
> > - xen_host_pci_device_put(&s->real_device);
> > + if (s->listener_set) {
> > + memory_listener_unregister(&s->memory_listener);
> > + memory_listener_unregister(&s->io_listener);
> > + s->listener_set = false;
>
> If you call QTAILQ_INIT on memory_listener and io_listener, then you
> simply check on QTAILQ_EMPTY and remove listener_set.
No dice. For that to work they need to be QTAIL_HEAD while
they are of QTAILQ_ENTRY.
That is, the include/exec/memory.h:
struct MemoryListener {
...
AddressSpace *address_space_filter;
QTAILQ_ENTRY(MemoryListener) link;
}
And the QTAILQ_EMPTY checks for '>tqh_first' while the
QTAILQ_ENTRY only defines two pointers: tqe_next and tqe_prev.