Hi Gerd,
> -----Original Message-----
> From: Gerd Hoffmann <[email protected]>
> Sent: Thursday, September 24, 2020 11:45 AM
> To: Sai Pavan Boddu <[email protected]>
> Cc: Peter Maydell <[email protected]>; Markus Armbruster
> <[email protected]>; 'Marc-André Lureau'
> <[email protected]>; Paolo Bonzini <[email protected]>;
> Edgar Iglesias <[email protected]>; Francisco Eduardo Iglesias
> <[email protected]>; [email protected]; Alistair Francis
> <[email protected]>; Eduardo Habkost <[email protected]>;
> Ying Fang <[email protected]>; 'Philippe Mathieu-Daudé'
> <[email protected]>; Vikram Garhwal <[email protected]>; Paul
> Zimmerman <[email protected]>; Sai Pavan Boddu
> <[email protected]>
> Subject: Re: [PATCH v9 3/7] usb/hcd-xhci: Split pci wrapper for xhci base
> model
>
> Hi,
>
> > @@ -203,8 +202,10 @@ struct XHCIState {
> > uint32_t numslots;
> > uint32_t flags;
> > uint32_t max_pstreams_mask;
> > - OnOffAuto msi;
> > - OnOffAuto msix;
> > + void (*intr_update)(XHCIState *s, int n, bool enable);
> > + void (*intr_raise)(XHCIState *s, int n, bool level);
> > + void (*vmstate_post_load)(XHCIState *xhci);
>
> No need to create your own post_load hook, there is one in
> VMStateDescription ready for use ;)
[Sai Pavan Boddu] Yes thanks, I did not realize this can be used aswell.
Regards,
Sai Pavan
>
> take care,
> Gerd
>
> [ I can squash that into 3/7 if you have no objections ]
>
> diff --git a/hw/usb/hcd-xhci.h b/hw/usb/hcd-xhci.h index
> 294bdc62aeaf..f859a17e73ee 100644
> --- a/hw/usb/hcd-xhci.h
> +++ b/hw/usb/hcd-xhci.h
> @@ -205,7 +205,6 @@ typedef struct XHCIState {
> uint32_t max_pstreams_mask;
> void (*intr_update)(XHCIState *s, int n, bool enable);
> void (*intr_raise)(XHCIState *s, int n, bool level);
> - void (*vmstate_post_load)(XHCIState *xhci);
> DeviceState *hostOpaque;
>
> /* Operational Registers */
> diff --git a/hw/usb/hcd-xhci-pci.c b/hw/usb/hcd-xhci-pci.c index
> f06a2b7f4c57..77608fb78def 100644
> --- a/hw/usb/hcd-xhci-pci.c
> +++ b/hw/usb/hcd-xhci-pci.c
> @@ -85,19 +85,21 @@ static void xhci_pci_reset(DeviceState *dev)
> device_legacy_reset(DEVICE(&s->xhci));
> }
>
> -static void xhci_pci_vmstate_post_load(XHCIState *xhci)
> +static int xhci_pci_post_load(void *opaque, int version_id)
> {
> - XHCIPciState *s = container_of(xhci, XHCIPciState, xhci);
> + XHCIPciState *s = opaque;
> + XHCIState *xhci = &s->xhci;
> PCIDevice *pci_dev = PCI_DEVICE(s);
> int intr;
>
> - for (intr = 0; intr < xhci->numintrs; intr++) {
> + for (intr = 0; intr < xhci->numintrs; intr++) {
> if (xhci->intr[intr].msix_used) {
> msix_vector_use(pci_dev, intr);
> } else {
> msix_vector_unuse(pci_dev, intr);
> }
> }
> + return 0;
> }
>
> static void usb_xhci_pci_realize(struct PCIDevice *dev, Error **errp) @@ -
> 114,7 +116,6 @@ static void usb_xhci_pci_realize(struct PCIDevice *dev,
> Error **errp)
> object_property_set_link(OBJECT(&s->xhci), "host", OBJECT(s), NULL);
> s->xhci.intr_update = xhci_pci_intr_update;
> s->xhci.intr_raise = xhci_pci_intr_raise;
> - s->xhci.vmstate_post_load = xhci_pci_vmstate_post_load;
> object_property_set_bool(OBJECT(&s->xhci), "realized", true, &err);
> if (err) {
> error_propagate(errp, err);
> @@ -176,6 +177,7 @@ static void usb_xhci_pci_exit(PCIDevice *dev) static
> const VMStateDescription vmstate_xhci_pci = {
> .name = "xhci",
> .version_id = 1,
> + .post_load = xhci_pci_post_load,
> .fields = (VMStateField[]) {
> VMSTATE_PCI_DEVICE(parent_obj, XHCIPciState),
> VMSTATE_MSIX(parent_obj, XHCIPciState), diff --git a/hw/usb/hcd-
> xhci.c b/hw/usb/hcd-xhci.c index 4a6c0e7edb1a..b1b95abb9b29 100644
> --- a/hw/usb/hcd-xhci.c
> +++ b/hw/usb/hcd-xhci.c
> @@ -3457,9 +3457,6 @@ static int usb_xhci_post_load(void *opaque, int
> version_id)
> }
> }
>
> - if (xhci->vmstate_post_load) {
> - xhci->vmstate_post_load(xhci);
> - }
> return 0;
> }
>