From 2c6f2ad6f3b1319b25d78df40abf57da3997d4ba Mon Sep 17 00:00:00 2001 From: Sarah Sharp Date: Fri, 9 Jul 2010 17:08:38 +0200 Subject: [PATCH] --- yaml --- r: 201263 b: refs/heads/master c: d1dc908a251c8cd87c1a1ad4f2c4a40cdbd8286c h: refs/heads/master i: 201261: 778ecf3bed4579b2c07cc1d12011b64baee47700 201259: c552da565b2c8502a54604e940d16eff2e7ad994 201255: ee51e666304519437e02b64c19fcb51e7382ad80 201247: ad5d169ee34640daa50ddffc455a8b9d0d2087d7 v: v3 --- [refs] | 2 +- trunk/drivers/usb/host/xhci-ring.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 896f87fae593..a98b1b5ca5e9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7595931c986f50b1e197ce7b881563e36a7d041e +refs/heads/master: d1dc908a251c8cd87c1a1ad4f2c4a40cdbd8286c diff --git a/trunk/drivers/usb/host/xhci-ring.c b/trunk/drivers/usb/host/xhci-ring.c index 94e6934edb09..bfc99a939455 100644 --- a/trunk/drivers/usb/host/xhci-ring.c +++ b/trunk/drivers/usb/host/xhci-ring.c @@ -2380,16 +2380,19 @@ static int queue_command(struct xhci_hcd *xhci, u32 field1, u32 field2, u32 field3, u32 field4, bool command_must_succeed) { int reserved_trbs = xhci->cmd_ring_reserved_trbs; + int ret; + if (!command_must_succeed) reserved_trbs++; - if (!room_on_ring(xhci, xhci->cmd_ring, reserved_trbs)) { - if (!in_interrupt()) - xhci_err(xhci, "ERR: No room for command on command ring\n"); + ret = prepare_ring(xhci, xhci->cmd_ring, EP_STATE_RUNNING, + reserved_trbs, GFP_ATOMIC); + if (ret < 0) { + xhci_err(xhci, "ERR: No room for command on command ring\n"); if (command_must_succeed) xhci_err(xhci, "ERR: Reserved TRB counting for " "unfailable commands failed.\n"); - return -ENOMEM; + return ret; } queue_trb(xhci, xhci->cmd_ring, false, false, field1, field2, field3, field4 | xhci->cmd_ring->cycle_state);