Message ID | 1378714842-31912-1-git-send-email-kraxel@redhat.com |
---|---|
State | New |
Headers | show |
Hi, On 09/09/2013 10:20 AM, Gerd Hoffmann wrote: > We'll need a pointer to the actual pci/sysbus device, > stick a pointer to it into the EHCIState struct. > > https://bugzilla.redhat.com/show_bug.cgi?id=1005495 Looks like we've been working on exactly the same bug at the same time, but we've come up with slightly different solutions. If we're going to go this way (which seems the best), you should also modify the qemu_sglist_init call in ehci_init_transfer for consistency, and drop the bus and qbus variable declarations at the top of the functions as those will be unused then. Regards, Hans
On Mo, 2013-09-09 at 11:04 +0200, Hans de Goede wrote: > Hi, > > On 09/09/2013 10:20 AM, Gerd Hoffmann wrote: > > We'll need a pointer to the actual pci/sysbus device, > > stick a pointer to it into the EHCIState struct. > > > > https://bugzilla.redhat.com/show_bug.cgi?id=1005495 > > Looks like we've been working on exactly the same bug at the > same time, but we've come up with slightly different solutions. Yep, and then "git send-email" exactly the same minute ;) > If we're going to go this way (which seems the best), you > should also modify the qemu_sglist_init call in > ehci_init_transfer for consistency, and drop the bus and qbus > variable declarations at the top of the functions as those will > be unused then. Makes sense indeed. Done, v2 sent. cheers, Gerd
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index 137e200..162680c 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -1486,7 +1486,7 @@ static int ehci_process_itd(EHCIState *ehci, return -1; } - qemu_sglist_init(&ehci->isgl, DEVICE(ehci), 2, ehci->as); + qemu_sglist_init(&ehci->isgl, ehci->device, 2, ehci->as); if (off + len > 4096) { /* transfer crosses page border */ uint32_t len2 = off + len - 4096; @@ -2529,6 +2529,7 @@ void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp) s->frame_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, ehci_frame_timer, s); s->async_bh = qemu_bh_new(ehci_frame_timer, s); + s->device = dev; qemu_register_reset(ehci_reset, s); qemu_add_vm_change_state_handler(usb_ehci_vm_state_change, s); diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h index 15a28e8..065c9fa 100644 --- a/hw/usb/hcd-ehci.h +++ b/hw/usb/hcd-ehci.h @@ -255,6 +255,7 @@ typedef QTAILQ_HEAD(EHCIQueueHead, EHCIQueue) EHCIQueueHead; struct EHCIState { USBBus bus; + DeviceState *device; qemu_irq irq; MemoryRegion mem; AddressSpace *as;
We'll need a pointer to the actual pci/sysbus device, stick a pointer to it into the EHCIState struct. https://bugzilla.redhat.com/show_bug.cgi?id=1005495 Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/usb/hcd-ehci.c | 3 ++- hw/usb/hcd-ehci.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-)