From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:47330) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QORfy-0001Dt-OT for qemu-devel@nongnu.org; Mon, 23 May 2011 05:43:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QORfx-0007hJ-Na for qemu-devel@nongnu.org; Mon, 23 May 2011 05:43:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59597) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QORfx-0007h8-AM for qemu-devel@nongnu.org; Mon, 23 May 2011 05:43:49 -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 p4N9hmrd003586 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 23 May 2011 05:43:48 -0400 From: Gerd Hoffmann Date: Mon, 23 May 2011 11:43:31 +0200 Message-Id: <1306143819-30287-11-git-send-email-kraxel@redhat.com> In-Reply-To: <1306143819-30287-1-git-send-email-kraxel@redhat.com> References: <1306143819-30287-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 10/18] usb-linux: track aurbs in list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann This patch adds code to track all async urbs in a linked list, so we can find them without having to pass around a opaque pointer to them. Prerequisite for the cleanups. Signed-off-by: Gerd Hoffmann --- usb-linux.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff --git a/usb-linux.c b/usb-linux.c index 55d914d..3213215 100644 --- a/usb-linux.c +++ b/usb-linux.c @@ -121,6 +121,7 @@ typedef struct USBHostDevice { Notifier exit; struct endp_data endp_table[MAX_ENDPOINTS]; + QLIST_HEAD(, AsyncURB) aurbs; /* Host side address */ int bus_num; @@ -223,22 +224,27 @@ struct AsyncURB { struct usbdevfs_urb urb; struct usbdevfs_iso_packet_desc isocpd[ISO_FRAME_DESC_PER_URB]; + USBHostDevice *hdev; + QLIST_ENTRY(AsyncURB) next; /* For regular async urbs */ USBPacket *packet; - USBHostDevice *hdev; /* For buffered iso handling */ int iso_frame_idx; /* -1 means in flight */ }; -static AsyncURB *async_alloc(void) +static AsyncURB *async_alloc(USBHostDevice *s) { - return (AsyncURB *) qemu_mallocz(sizeof(AsyncURB)); + AsyncURB *aurb = qemu_mallocz(sizeof(AsyncURB)); + aurb->hdev = s; + QLIST_INSERT_HEAD(&s->aurbs, aurb, next); + return aurb; } static void async_free(AsyncURB *aurb) { + QLIST_REMOVE(aurb, next); qemu_free(aurb); } @@ -661,8 +667,7 @@ static int usb_host_handle_data(USBDevice *dev, USBPacket *p) return usb_host_handle_iso_data(s, p, p->pid == USB_TOKEN_IN); } - aurb = async_alloc(); - aurb->hdev = s; + aurb = async_alloc(s); aurb->packet = p; urb = &aurb->urb; @@ -787,8 +792,7 @@ static int usb_host_handle_control(USBDevice *dev, USBPacket *p, return USB_RET_STALL; } - aurb = async_alloc(); - aurb->hdev = s; + aurb = async_alloc(s); aurb->packet = p; /* -- 1.7.1