core/linux-omap to 3.2.7-1

This commit is contained in:
Kevin Mihelich 2012-02-26 12:23:19 -05:00
parent c63a845dab
commit 25bbd12c00
4 changed files with 12 additions and 118 deletions

View file

@ -1,93 +0,0 @@
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,8 +12,8 @@ pkgname=('linux-omap' 'linux-headers-omap')
# pkgname=linux-custom # Build kernel with a different name
_kernelname=${pkgname#linux}
_basekernel=3.2
pkgver=${_basekernel}.6
pkgrel=2
pkgver=${_basekernel}.7
pkgrel=1
arch=('arm')
url="http://www.kernel.org/"
license=('GPL2')
@ -21,17 +21,15 @@ makedepends=('xmlto' 'docbook-xsl' 'uboot-mkimage')
options=('!strip')
source=("ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-${_basekernel}.tar.xz"
"ftp://ftp.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.bz2"
"rcn-ee.diff.gz::http://rcn-ee.net/deb/sid-armhf/v3.2.6-x4/patch-3.2.6-x4.diff.gz"
"rcn-ee.diff.gz::http://rcn-ee.net/deb/sid-armhf/v3.2.7-x4/patch-3.2.7-x4.diff.gz"
'config'
'change-default-console-loglevel.patch'
'0006-omap4-usb-improvement.patch'
'aufs3-3.2.patch.gz')
md5sums=('364066fa18767ec0ae5f4e4abcf9dc51'
'2bd4679899df503177a3b61ae2068749'
'9a38f8bff01e024ea9c82a81bf2b81c3'
'7a43a1c577431757284639bb059af6f2'
'899624bffed6a19578613b672cc9483f'
'c282967958460a088778e39f8f9b19bd'
'83044e2c228068a070c5a84c2f6acd54'
'9d3c56a4b999c8bfbd4018089a62f662'
'd4c22c6f6c8c53d595552b6285aeab79'
'6ea7b005a74be27abb072c934ef15a2c')
build() {
@ -49,7 +47,6 @@ build() {
# ALARM patches
patch -Np1 -i "${srcdir}/rcn-ee.diff"
patch -Np1 -i "${srcdir}/0006-omap4-usb-improvement.patch"
patch -Np1 -i "${srcdir}/aufs3-3.2.patch"
cat "${srcdir}/config" > ./.config

View file

@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 3.2.6 Kernel Configuration
# Linux/arm 3.2.7 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@ -418,7 +418,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_PL310_ERRATA_769419=y
CONFIG_ARM_GIC=y
#
@ -3537,23 +3537,14 @@ CONFIG_OMAP_IOVMM=y
#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
# CONFIG_EXT2_FS is not set
# CONFIG_EXT3_FS is not set
CONFIG_EXT4_FS=y
CONFIG_EXT4_USE_FOR_EXT23=y
CONFIG_EXT4_FS_XATTR=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_JBD2=y
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=y
@ -3711,7 +3702,6 @@ CONFIG_AUFS_BRANCH_MAX_127=y
# CONFIG_AUFS_BRANCH_MAX_32767 is not set
CONFIG_AUFS_SBILIST=y
# CONFIG_AUFS_HNOTIFY is not set
# CONFIG_AUFS_HFSNOTIFY is not set
# CONFIG_AUFS_EXPORT is not set
CONFIG_AUFS_RDU=y
CONFIG_AUFS_PROC_MAP=y

View file

@ -2,7 +2,7 @@
# arg 2: the old package version
KERNEL_NAME=-omap
KERNEL_VERSION=3.2.6-2-ARCH
KERNEL_VERSION=3.2.7-1-ARCH
post_install () {
# updating module dependencies