From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:58070) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sn9vB-0000ik-4n for qemu-devel@nongnu.org; Fri, 06 Jul 2012 10:54:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sn9v9-00017i-Fd for qemu-devel@nongnu.org; Fri, 06 Jul 2012 10:54:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:16156) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sn9v9-00017H-7D for qemu-devel@nongnu.org; Fri, 06 Jul 2012 10:54:11 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q66Es9EI011237 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 6 Jul 2012 10:54:09 -0400 Message-ID: <4FF6FC35.1000804@redhat.com> Date: Fri, 06 Jul 2012 16:54:45 +0200 From: Hans de Goede MIME-Version: 1.0 References: <1339061486-28513-1-git-send-email-kraxel@redhat.com> <1339061486-28513-30-git-send-email-kraxel@redhat.com> <4FF6F69C.2040808@redhat.com> In-Reply-To: <4FF6F69C.2040808@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 29/37] ehci: kick async schedule on wakeup List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org Hi, On 07/06/2012 04:30 PM, Hans de Goede wrote: > Hi, > > On 06/07/2012 11:31 AM, Gerd Hoffmann wrote: >> Kick async schedule when we get a wakeup >> notification from a usb device. >> >> Signed-off-by: Gerd Hoffmann >> --- >> hw/usb/hcd-ehci.c | 2 ++ >> 1 files changed, 2 insertions(+), 0 deletions(-) >> >> diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c >> index 8b2dfed..f8ed80d 100644 >> --- a/hw/usb/hcd-ehci.c >> +++ b/hw/usb/hcd-ehci.c >> @@ -852,6 +852,8 @@ static void ehci_wakeup(USBPort *port) >> USBPort *companion = s->companion_ports[port->index]; >> if (companion->ops->wakeup) { >> companion->ops->wakeup(companion); >> + } else { >> + qemu_bh_schedule(s->async_bh); >> } >> } >> } >> > > This is wrong, this puts the added else inside the > "if (portsc & PORTSC_POWNER) {" block, iow it will only > trigger when the port is redirected to the companion controller, > it should be the else of the "if (portsc & PORTSC_POWNER)" so that > the async schedule gets kicked on wakeup when the device is connected > to the ehci (rather then to an companion uhci). > > Notice how the if where the else now belongs to is unconditionally > dereferencing companion in the form of companion->ops, it can do > this because the "if (portsc & PORTSC_POWNER)" check ensures there is > a companion port for this device, the second level if is to see if > the companion has wakeup support. I've just send a patch fixing this. One last remark though, do we support wakeup in the EHCI-code at all? Regards, Hans