From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57032) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sn9Y4-00043j-RF for qemu-devel@nongnu.org; Fri, 06 Jul 2012 10:30:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sn9Y3-0000fT-4z for qemu-devel@nongnu.org; Fri, 06 Jul 2012 10:30:20 -0400 Received: from mx1.redhat.com ([209.132.183.28]:4649) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sn9Y2-0000f7-Ss for qemu-devel@nongnu.org; Fri, 06 Jul 2012 10:30:19 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q66EUGHR025599 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 6 Jul 2012 10:30:17 -0400 Message-ID: <4FF6F69C.2040808@redhat.com> Date: Fri, 06 Jul 2012 16:30:52 +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> In-Reply-To: <1339061486-28513-30-git-send-email-kraxel@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 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. Regards, Hans