core/linux-omap to 3.1.5-1

This commit is contained in:
Kevin Mihelich 2011-12-19 17:05:31 -05:00
parent a641c6ed60
commit 471489dfa4
3 changed files with 105 additions and 8 deletions

View file

@ -0,0 +1,93 @@
From f392cbf75615e9d8cb90ef5ffb8d4e752b7be3c7 Mon Sep 17 00:00:00 2001
From: Ming Lei <ming.lei@canonical.com>
Date: Wed, 31 Aug 2011 00:03:13 +0800
Subject: [PATCH] usb: ehci: make HC see up-to-date qh/qtd descriptor ASAP
This patch introduces the helper of ehci_sync_mem to flush
qtd/qh into memory immediately on some ARM, so that HC can
see the up-to-date qtd/qh descriptor asap.
This patch fixs one performance bug on ARM Cortex A9 dual core
platform, which has been reported on quite a few ARM machines
(OMAP4, Tegra 2, snowball...), see details from link of
https://bugs.launchpad.net/bugs/709245.
The patch has been tested ok on OMAP4 panda A1 board, and the
performance of 'dd' over usb mass storage can be increased from
4~5MB/sec to 14~16MB/sec after applying this patch.
Cc: Russell King <linux@arm.linux.org.uk>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
---
drivers/usb/host/ehci-q.c | 18 ++++++++++++++++++
drivers/usb/host/ehci.h | 17 +++++++++++++++++
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
index 0917e3a..b7f9496 100644
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -995,6 +995,12 @@ static void qh_link_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
head->qh_next.qh = qh;
head->hw->hw_next = dma;
+ /*
+ * flush qh descriptor into memory immediately,
+ * see comments in qh_append_tds.
+ */
+ ehci_sync_mem();
+
qh_get(qh);
qh->xacterrs = 0;
qh->qh_state = QH_STATE_LINKED;
@@ -1082,6 +1088,18 @@ static struct ehci_qh *qh_append_tds (
wmb ();
dummy->hw_token = token;
+ /*
+ * Writing to dma coherent buffer on ARM may
+ * be delayed to reach memory, so HC may not see
+ * hw_token of dummy qtd in time, which can cause
+ * the qtd transaction to be executed very late,
+ * and degrade performance a lot. ehci_sync_mem
+ * is added to flush 'token' immediatelly into
+ * memory, so that ehci can execute the transaction
+ * ASAP.
+ */
+ ehci_sync_mem();
+
urb->hcpriv = qh_get (qh);
}
}
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
index 989e0a8..6fb0de8 100644
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -736,6 +736,23 @@ static inline u32 hc32_to_cpup (const struct ehci_hcd *ehci, const __hc32 *x)
#endif
+/*
+ * Writing to dma coherent memory on ARM may be delayed via L2
+ * writing buffer, so introduce the helper which can flush L2 writing
+ * buffer into memory immediately, especially used to flush ehci
+ * descriptor to memory.
+ */
+#ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE
+static inline void ehci_sync_mem()
+{
+ mb();
+}
+#else
+static inline void ehci_sync_mem()
+{
+}
+#endif
+
/*-------------------------------------------------------------------------*/
#ifndef DEBUG
--
1.7.0.4

View file

@ -12,7 +12,7 @@ pkgname=('linux-omap' 'linux-headers-omap')
# pkgname=linux-custom # Build kernel with a different name
_kernelname=${pkgname#linux}
_basekernel=3.1
pkgver=${_basekernel}.4
pkgver=${_basekernel}.5
pkgrel=1
arch=('arm')
url="http://www.kernel.org/"
@ -21,16 +21,18 @@ makedepends=('xmlto' 'docbook-xsl' 'uboot-mkimage')
options=('!strip')
source=("ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-${_basekernel}.tar.bz2"
"ftp://ftp.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.bz2"
"rcn-ee.diff.gz::http://rcn-ee.net/deb/sid-armhf/v3.1.4-x5/patch-3.1.4-x5.diff.gz"
"rcn-ee.diff.gz::http://rcn-ee.net/deb/sid-armhf/v3.1.5-x6/patch-3.1.5-x6.diff.gz"
'config'
'change-default-console-loglevel.patch'
'usb-add-reset-resume-quirk-for-several-webcams.patch')
'usb-add-reset-resume-quirk-for-several-webcams.patch'
'0006-omap4-usb-improvement.patch')
md5sums=('8d43453f8159b2332ad410b19d86a931'
'b8b14bdfbf76cfef8e042e7d1a385fca'
'e646da419ce620ed8be734887ec85dd5'
'5d72a1932baed027ef23e9c055d72621'
'84c040bb8c4f46d351731cb0c05d9474'
'6793994c61ee2c1804dcb0d8cefb66ca'
'87baa7d693f6dad08dbc2b93c39bb7d4'
'9d3c56a4b999c8bfbd4018089a62f662'
'd00814b57448895e65fbbc800e8a58ba')
'd00814b57448895e65fbbc800e8a58ba'
'd4c22c6f6c8c53d595552b6285aeab79')
build() {
cd "${srcdir}/linux-${_basekernel}"
@ -51,6 +53,7 @@ build() {
# rcn-ee patchset
patch -Np1 -i "${srcdir}/rcn-ee.diff"
patch -Np1 -i "${srcdir}/0006-omap4-usb-improvement.patch"
cat "${srcdir}/config" > ./.config

View file

@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 3.1.4 Kernel Configuration
# Linux/arm 3.1.5 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@ -414,6 +414,7 @@ CONFIG_PL310_ERRATA_727915=y
# CONFIG_ARM_ERRATA_754322 is not set
# CONFIG_ARM_ERRATA_754327 is not set
# CONFIG_ARM_ERRATA_764369 is not set
# CONFIG_PL310_ERRATA_769419 is not set
CONFIG_ARM_GIC=y
#