瀏覽代碼

Revert "USB: EHCI: fix performance regression"

This reverts commit fa38dfcc56b5f6cce787f9aaa5d1830509213802.

It wasn't really a regression and David and Alan are still working
through the issues reported.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Greg Kroah-Hartman 17 年之前
父節點
當前提交
bb7e6984ec
共有 2 個文件被更改,包括 8 次插入10 次删除
  1. 1 2
      drivers/usb/host/ehci-hcd.c
  2. 7 8
      drivers/usb/host/ehci-q.c

+ 1 - 2
drivers/usb/host/ehci-hcd.c

@@ -84,8 +84,7 @@ static const char	hcd_name [] = "ehci_hcd";
 #define EHCI_IAA_MSECS		10		/* arbitrary */
 #define EHCI_IO_JIFFIES		(HZ/10)		/* io watchdog > irq_thresh */
 #define EHCI_ASYNC_JIFFIES	(HZ/20)		/* async idle timeout */
-#define EHCI_SHRINK_JIFFIES	(HZ/100)	/* async qh unlink delay */
-#define EHCI_SHRINK_UFRAMES	(10*8)		/* same value in uframes */
+#define EHCI_SHRINK_JIFFIES	(HZ/200)	/* async qh unlink delay */
 
 /* Initial IRQ latency:  faster than hw default */
 static int log2_irq_thresh = 0;		// 0 to 6

+ 7 - 8
drivers/usb/host/ehci-q.c

@@ -1116,7 +1116,8 @@ static void scan_async (struct ehci_hcd *ehci)
 	struct ehci_qh		*qh;
 	enum ehci_timer_action	action = TIMER_IO_WATCHDOG;
 
-	ehci->stamp = ehci_readl(ehci, &ehci->regs->frame_index);
+	if (!++(ehci->stamp))
+		ehci->stamp++;
 	timer_action_done (ehci, TIMER_ASYNC_SHRINK);
 rescan:
 	qh = ehci->async->qh_next.qh;
@@ -1147,14 +1148,12 @@ rescan:
 			 * doesn't stay idle for long.
 			 * (plus, avoids some kind of re-activation race.)
 			 */
-			if (list_empty(&qh->qtd_list) &&
-					qh->qh_state == QH_STATE_LINKED) {
-				if (!ehci->reclaim &&
-				    ((ehci->stamp - qh->stamp) & 8191) >=
-						EHCI_SHRINK_UFRAMES)
-					start_unlink_async(ehci, qh);
-				else
+			if (list_empty (&qh->qtd_list)) {
+				if (qh->stamp == ehci->stamp)
 					action = TIMER_ASYNC_SHRINK;
+				else if (!ehci->reclaim
+					    && qh->qh_state == QH_STATE_LINKED)
+					start_unlink_async (ehci, qh);
 			}
 
 			qh = qh->qh_next.qh;