Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753175AbaA3OEU (ORCPT ); Thu, 30 Jan 2014 09:04:20 -0500 Received: from mga09.intel.com ([134.134.136.24]:43983 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753426AbaA3OCy (ORCPT ); Thu, 30 Jan 2014 09:02:54 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.95,750,1384329600"; d="scan'208";a="475123382" From: Mathias Nyman To: Cc: , , , Mathias Nyman Subject: [RFCv2 06/10] xhci: use command structures for xhci_queue_reset_ep() Date: Thu, 30 Jan 2014 16:10:23 +0200 Message-Id: <1391091027-31783-7-git-send-email-mathias.nyman@linux.intel.com> X-Mailer: git-send-email 1.8.1.2 In-Reply-To: <1391091027-31783-1-git-send-email-mathias.nyman@linux.intel.com> References: <1391091027-31783-1-git-send-email-mathias.nyman@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Prepare for the global command ring by using command structures internally in functions calling xhci_queue_reset_ep() Signed-off-by: Mathias Nyman --- drivers/usb/host/xhci-ring.c | 5 +++++ drivers/usb/host/xhci.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index df5b0f8..bf50d28 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -1913,6 +1913,10 @@ static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, struct xhci_td *td, union xhci_trb *event_trb) { struct xhci_virt_ep *ep = &xhci->devs[slot_id]->eps[ep_index]; + struct xhci_command *command; + command = xhci_alloc_command(xhci, false, false, GFP_ATOMIC); + if (!command) + return; ep->ep_state |= EP_HALTED; ep->stopped_td = td; ep->stopped_trb = event_trb; @@ -1926,6 +1930,7 @@ static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, ep->stopped_stream = 0; xhci_ring_cmd_db(xhci); + kfree(command); } /* Check if an error has halted the endpoint ring. The class driver will diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 0c3f0bc..37a1a7e 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -2908,6 +2908,7 @@ void xhci_endpoint_reset(struct usb_hcd *hcd, unsigned long flags; int ret; struct xhci_virt_ep *virt_ep; + struct xhci_command *command; xhci = hcd_to_xhci(hcd); udev = (struct usb_device *) ep->hcpriv; @@ -2930,6 +2931,10 @@ void xhci_endpoint_reset(struct usb_hcd *hcd, return; } + command = xhci_alloc_command(xhci, false, false, GFP_ATOMIC); + if (!command) + return; + xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep, "Queueing reset endpoint command"); spin_lock_irqsave(&xhci->lock, flags); @@ -2948,6 +2953,7 @@ void xhci_endpoint_reset(struct usb_hcd *hcd, virt_ep->stopped_trb = NULL; virt_ep->stopped_stream = 0; spin_unlock_irqrestore(&xhci->lock, flags); + kfree(command); if (ret) xhci_warn(xhci, "FIXME allocate a new ring segment\n"); -- 1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/