* [U-Boot] [PATCH v3] arm926ejs: add NXP LPC32x0 cpu series support
From: Albert ARIBAUD @ 2011-10-31 17:42 UTC (permalink / raw)
To: u-boot
In-Reply-To: <4EA49D8E.2050704@mleia.com>
Hi Vladimir,
Le 24/10/2011 01:04, Vladimir Zapolskiy a ?crit :
> Hi Albert,
>
> On 22.10.2011 02:31, Albert ARIBAUD wrote:
>> Hi Vladimir,
>>
>> Le 18/10/2011 17:55, Vladimir Zapolskiy a ?crit :
>>> This change adds initial support for NXP LPC32x0 SoC series.
>>>
>>> Signed-off-by: Vladimir Zapolskiy<vz@mleia.com>
>>> ---
>>> Changes from v2 to v3:
>>> * checkpatch.pl reports zero errors and warnings
>>>
>>> Changes from v1 to v2:
>>> * BIT(n) and SBF(s, v) macro are not used anymore
>>> * removed NS16550 and 14-clock UART definitions from uart.h
>>> * added devices.c file, which contains standard UART preinitialization
>>> routine
>>> * added get_serial_clock() function, it returns actual frequency of
>>> UART clock
>>> * __udelay() realization is simplified, no need of interrupt handling
>>
>> As it stands, this is dead code until some board uses it; I imagine you
>> have board waiting for this support. Can you submit the SoC and board
>> code as a patch set? This way, it will be obvious for all that the SoC
>> code in this patch has actual use.
>
> you're right, I have a board to make support for. However I presume that
> U-boot maintainers won't be happy to include a board with
> CONFIG_ENV_IS_NOWHERE, and unfortunately flash driver isn't yet ready
> for publishing.
CONFIG_ENV_IS_NOWHERE is the board( maintainer)'s business.
Ditto for the FLASH driver, if it is not required for use of the board
(e.g., if U-Boot can fire up and does not need the FLASH to boot an OS,
then a broken FLASH driver is an inconvenience, not a showstopper).
> I'd like to get an advice, if you think that weakly supported but
> working U-boot on the board has chances to be included to arm-next I can
> send the patchset right now for review, otherwise I'll spend some time
> (one week approximately) to finish NAND driver.
IMO, the acceptable state of a board is the board maintainer's affair,
with a bare minimum that U-Boot must be able to play its role as a
bootloader.
Anyway, since that is for next, not master, and since you think you can
add the missing support far before the next merge window, I suggest you
complete board support and add it to V4.
Amicalement,
--
Albert.
^ permalink raw reply
* [PATCH 2/2] gpsd: fix build with python2.7 in sysroot and python2.6 on host
From: Martin Jansa @ 2011-10-31 17:35 UTC (permalink / raw)
To: openembedded-devel
In-Reply-To: <1320082546-31376-1-git-send-email-Martin.Jansa@gmail.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
.../gpsd/gpsd-2.95/fix-build-with-python2.7.patch | 15 +++++++++++++++
meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb | 3 ++-
2 files changed, 17 insertions(+), 1 deletions(-)
create mode 100644 meta-oe/recipes-navigation/gpsd/gpsd-2.95/fix-build-with-python2.7.patch
diff --git a/meta-oe/recipes-navigation/gpsd/gpsd-2.95/fix-build-with-python2.7.patch b/meta-oe/recipes-navigation/gpsd/gpsd-2.95/fix-build-with-python2.7.patch
new file mode 100644
index 0000000..6bba2b8
--- /dev/null
+++ b/meta-oe/recipes-navigation/gpsd/gpsd-2.95/fix-build-with-python2.7.patch
@@ -0,0 +1,15 @@
+Without this patch python2.6 from host could be preferred over python from native sysroot.
+
+Upstream-Status: Pending
+diff -uNr gpsd-2.95.orig/configure.ac gpsd-2.95/configure.ac
+--- gpsd-2.95.orig/configure.ac 2011-10-31 18:26:08.860719033 +0100
++++ gpsd-2.95/configure.ac 2011-10-31 18:27:47.718716963 +0100
+@@ -31,7 +31,7 @@
+ dnl AM_PATH_PYTHON provided with automake can be too old. Look
+ dnl for newer python first, and include 2.6 on the list.
+ m4_define([_AM_PYTHON_INTERPRETER_LIST],
+- [python2.6 python2.5 python2.4 python])
++ [python2.7 python2.6 python2.5 python2.4 python])
+ AM_PATH_PYTHON([2.4])
+ ac_python=yes
+ if test "x$PYTHON" = "x"; then
diff --git a/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb b/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb
index a6bf308..cdcb77c 100644
--- a/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb
+++ b/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d217a23f408e91c94359447735bc1800"
DEPENDS = "dbus-glib ncurses python libusb1"
PROVIDES = "virtual/gpsd"
-PR = "r1"
+PR = "r2"
EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
--x-libraries=${STAGING_LIBDIR} \
@@ -15,6 +15,7 @@ EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
SRC_URI = "http://download.berlios.de/${PN}/${P}.tar.gz;name=gpsd \
file://libtool.patch \
+ file://fix-build-with-python2.7.patch \
file://gpsd-default \
file://gpsd \
file://60-gpsd.rules"
--
1.7.7.1
^ permalink raw reply related
* [PATCH 1/2] recipes: bump PR after python upgrade
From: Martin Jansa @ 2011-10-31 17:35 UTC (permalink / raw)
To: openembedded-devel
* should be applied only after python is upgraded in oe-core from 2.6.6
to 2.7.2, pull request is sent to oe-core ML
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
.../recipes-devtools/python/python-ecore_svn.bb | 2 +-
.../recipes-devtools/python/python-edbus_svn.bb | 2 +-
.../recipes-devtools/python/python-edje_svn.bb | 2 +-
.../python/python-elementary_svn.bb | 2 +-
.../recipes-devtools/python/python-emotion_svn.bb | 2 +-
.../recipes-devtools/python/python-evas_svn.bb | 2 +-
meta-gnome/recipes-gnome/gtk+/gtk+3_3.0.11.bb | 2 ++
.../python/python-cheetah_2.4.4.bb | 2 +-
.../python/python-cython_0.15.1.bb | 2 +-
.../python/python-dateutil_1.4.1.bb | 2 +-
.../recipes-devtools/python/python-docutils_0.5.bb | 1 +
.../recipes-devtools/python/python-lxml_2.2.8.bb | 1 +
.../recipes-devtools/python/python-numeric_24.2.bb | 2 +-
.../recipes-devtools/python/python-numpy_1.4.1.bb | 1 +
.../recipes-devtools/python/python-pexpect_2.3.bb | 2 +-
.../python/python-phoneutils_git.bb | 2 +-
.../python/python-pyalsaaudio_0.4.bb | 2 +-
.../recipes-devtools/python/python-pyserial_2.4.bb | 2 +-
.../recipes-devtools/python/python-pyudev_0.11.bb | 2 +-
.../recipes-devtools/python/python-pyyaml_svn.bb | 2 +-
.../python/python-setuptools_0.6c11.bb | 2 +-
.../python/python-sqlalchemy_0.7.1.bb | 2 +-
.../recipes-devtools/python/python-tornado_git.bb | 1 +
.../python/python-vobject_0.8.1c.bb | 2 +-
meta-oe/recipes-graphics/pango/pango.inc | 2 +-
meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb | 2 ++
meta-oe/recipes-support/pidgin/pidgin.inc | 2 +-
27 files changed, 29 insertions(+), 21 deletions(-)
diff --git a/meta-efl/recipes-devtools/python/python-ecore_svn.bb b/meta-efl/recipes-devtools/python/python-ecore_svn.bb
index a6ec5e6..1300e24 100644
--- a/meta-efl/recipes-devtools/python/python-ecore_svn.bb
+++ b/meta-efl/recipes-devtools/python/python-ecore_svn.bb
@@ -1,7 +1,7 @@
require python-efl.inc
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRCREV = "${EFL_SRCREV}"
DEPENDS += "python-evas ecore"
RDEPENDS_${PN} += "python-evas"
diff --git a/meta-efl/recipes-devtools/python/python-edbus_svn.bb b/meta-efl/recipes-devtools/python/python-edbus_svn.bb
index 518f7c2..256a52a 100644
--- a/meta-efl/recipes-devtools/python/python-edbus_svn.bb
+++ b/meta-efl/recipes-devtools/python/python-edbus_svn.bb
@@ -1,7 +1,7 @@
require python-efl.inc
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRCREV = "${EFL_SRCREV}"
DEPENDS += "edbus python-dbus"
RDEPENDS_${PN} += "python-dbus"
diff --git a/meta-efl/recipes-devtools/python/python-edje_svn.bb b/meta-efl/recipes-devtools/python/python-edje_svn.bb
index 8afcbfd..ee974d4 100644
--- a/meta-efl/recipes-devtools/python/python-edje_svn.bb
+++ b/meta-efl/recipes-devtools/python/python-edje_svn.bb
@@ -1,7 +1,7 @@
require python-efl.inc
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRCREV = "${EFL_SRCREV}"
DEPENDS += "edje python-evas"
RDEPENDS_${PN} += "python-evas"
diff --git a/meta-efl/recipes-devtools/python/python-elementary_svn.bb b/meta-efl/recipes-devtools/python/python-elementary_svn.bb
index ffb6d5e..fd4ea6d 100644
--- a/meta-efl/recipes-devtools/python/python-elementary_svn.bb
+++ b/meta-efl/recipes-devtools/python/python-elementary_svn.bb
@@ -1,7 +1,7 @@
require python-efl.inc
LICENSE = "LGPLv3"
LIC_FILES_CHKSUM = "file://COPYING;md5=6a6a8e020838b23406c81b19c1d46df6"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRCREV = "${EFL_SRCREV}"
DEPENDS += "elementary python-evas"
RDEPENDS_${PN} += "python-evas python-ecore python-edje"
diff --git a/meta-efl/recipes-devtools/python/python-emotion_svn.bb b/meta-efl/recipes-devtools/python/python-emotion_svn.bb
index 89002c3..a39c0c8 100644
--- a/meta-efl/recipes-devtools/python/python-emotion_svn.bb
+++ b/meta-efl/recipes-devtools/python/python-emotion_svn.bb
@@ -1,7 +1,7 @@
require python-efl.inc
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRCREV = "${EFL_SRCREV}"
DEPENDS += "emotion python-evas"
RDEPENDS_${PN} += "python-ecore"
diff --git a/meta-efl/recipes-devtools/python/python-evas_svn.bb b/meta-efl/recipes-devtools/python/python-evas_svn.bb
index 79844be..aa4d52f 100644
--- a/meta-efl/recipes-devtools/python/python-evas_svn.bb
+++ b/meta-efl/recipes-devtools/python/python-evas_svn.bb
@@ -1,6 +1,6 @@
require python-efl.inc
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRCREV = "${EFL_SRCREV}"
DEPENDS += "evas"
diff --git a/meta-gnome/recipes-gnome/gtk+/gtk+3_3.0.11.bb b/meta-gnome/recipes-gnome/gtk+/gtk+3_3.0.11.bb
index 712ca87..0278a2f 100644
--- a/meta-gnome/recipes-gnome/gtk+/gtk+3_3.0.11.bb
+++ b/meta-gnome/recipes-gnome/gtk+/gtk+3_3.0.11.bb
@@ -5,6 +5,8 @@ HOMEPAGE = "http://www.gtk.org"
BUGTRACKER = "https://bugzilla.gnome.org/"
SECTION = "libs"
+PR = "r1"
+
DEPENDS = "glib-2.0 pango atk jpeg libpng libxext libxcursor \
gtk-doc-native docbook-utils-native libxrandr libgcrypt \
libxdamage libxrender libxcomposite cairo gdk-pixbuf"
diff --git a/meta-oe/recipes-devtools/python/python-cheetah_2.4.4.bb b/meta-oe/recipes-devtools/python/python-cheetah_2.4.4.bb
index e1a4053..c07e969 100644
--- a/meta-oe/recipes-devtools/python/python-cheetah_2.4.4.bb
+++ b/meta-oe/recipes-devtools/python/python-cheetah_2.4.4.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=aff1107514aa6aae948f9fe71fdc393b"
SRCNAME = "Cheetah"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://pypi.python.org/packages/source/C/Cheetah/Cheetah-${PV}.tar.gz"
S = "${WORKDIR}/${SRCNAME}-${PV}"
diff --git a/meta-oe/recipes-devtools/python/python-cython_0.15.1.bb b/meta-oe/recipes-devtools/python/python-cython_0.15.1.bb
index 3b85601..72d98cb 100644
--- a/meta-oe/recipes-devtools/python/python-cython_0.15.1.bb
+++ b/meta-oe/recipes-devtools/python/python-cython_0.15.1.bb
@@ -6,7 +6,7 @@ LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e23fadd6ceef8c618fc1c65191d846fa"
SRCNAME = "Cython"
BBCLASSEXTEND = "native"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://www.cython.org/release/${SRCNAME}-${PV}.tar.gz \
file://0001-Don-t-append-docs-to-_Extension.extension.__doc__.patch \
diff --git a/meta-oe/recipes-devtools/python/python-dateutil_1.4.1.bb b/meta-oe/recipes-devtools/python/python-dateutil_1.4.1.bb
index e69b946..d1ebfc0 100644
--- a/meta-oe/recipes-devtools/python/python-dateutil_1.4.1.bb
+++ b/meta-oe/recipes-devtools/python/python-dateutil_1.4.1.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d82268718c68bda0b091006ec6e583c6"
SRCNAME = "${PN}"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://labix.org/download/python-dateutil/${SRCNAME}-${PV}.tar.gz"
S = "${WORKDIR}/${SRCNAME}-${PV}"
diff --git a/meta-oe/recipes-devtools/python/python-docutils_0.5.bb b/meta-oe/recipes-devtools/python/python-docutils_0.5.bb
index 1e6893d..adecd8f 100644
--- a/meta-oe/recipes-devtools/python/python-docutils_0.5.bb
+++ b/meta-oe/recipes-devtools/python/python-docutils_0.5.bb
@@ -3,6 +3,7 @@ HOMEPAGE = "http://docutils.sourceforge.net"
SECTION = "devel/python"
LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://COPYING.txt;md5=ac6ee29ac0310c091afab5ac4bea2fa3"
+PR = "r1"
DEPENDS = "python"
diff --git a/meta-oe/recipes-devtools/python/python-lxml_2.2.8.bb b/meta-oe/recipes-devtools/python/python-lxml_2.2.8.bb
index e19c776..dcb161a 100644
--- a/meta-oe/recipes-devtools/python/python-lxml_2.2.8.bb
+++ b/meta-oe/recipes-devtools/python/python-lxml_2.2.8.bb
@@ -4,6 +4,7 @@ HOMEPAGE = "http://codespeak.net/lxml"
LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://LICENSES.txt;md5=7de92baeb3b7bfaebe72404155fdb346"
SRCNAME = "lxml"
+PR = "r1"
DEPENDS = "libxml2 libxslt"
RDEPENDS_${PN} += "libxml2 libxslt python-compression"
diff --git a/meta-oe/recipes-devtools/python/python-numeric_24.2.bb b/meta-oe/recipes-devtools/python/python-numeric_24.2.bb
index 1bee01d..c45a6a6 100644
--- a/meta-oe/recipes-devtools/python/python-numeric_24.2.bb
+++ b/meta-oe/recipes-devtools/python/python-numeric_24.2.bb
@@ -3,7 +3,7 @@ SECTION = "devel/python"
LICENSE = "PSF & LLNL"
LIC_FILES_CHKSUM = "file://Legal.htm;md5=e3ce75dedd4043918d15979ae43e312e"
-PR = "ml1"
+PR = "ml2"
SRC_URI = "${SOURCEFORGE_MIRROR}/numpy/Numeric-${PV}.tar.gz"
S = "${WORKDIR}/Numeric-${PV}"
diff --git a/meta-oe/recipes-devtools/python/python-numpy_1.4.1.bb b/meta-oe/recipes-devtools/python/python-numpy_1.4.1.bb
index 44d60b1..36ab622 100644
--- a/meta-oe/recipes-devtools/python/python-numpy_1.4.1.bb
+++ b/meta-oe/recipes-devtools/python/python-numpy_1.4.1.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "A sophisticated Numeric Processing Package for Python"
SECTION = "devel/python"
LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3c42211d73c3faa1026e671dd39883fa"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/numpy/numpy-${PV}.tar.gz \
file://config.h \
diff --git a/meta-oe/recipes-devtools/python/python-pexpect_2.3.bb b/meta-oe/recipes-devtools/python/python-pexpect_2.3.bb
index c4d7486..9a76ff6 100644
--- a/meta-oe/recipes-devtools/python/python-pexpect_2.3.bb
+++ b/meta-oe/recipes-devtools/python/python-pexpect_2.3.bb
@@ -3,7 +3,7 @@ SECTION = "devel/python"
LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://LICENSE;md5=04a2bf11b85ce49d4a8c0c413fd34404"
SRCNAME = "pexpect"
-PR = "ml1"
+PR = "ml2"
SRC_URI = "${SOURCEFORGE_MIRROR}/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
S = "${WORKDIR}/${SRCNAME}-${PV}"
diff --git a/meta-oe/recipes-devtools/python/python-phoneutils_git.bb b/meta-oe/recipes-devtools/python/python-phoneutils_git.bb
index b46a772..a3c3c93 100644
--- a/meta-oe/recipes-devtools/python/python-phoneutils_git.bb
+++ b/meta-oe/recipes-devtools/python/python-phoneutils_git.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://phoneutils/c_phoneutils.pyx;endline=18;md5=ca321e4ec3
SRCREV = "8a7c719e0c3f1f8c10f77f17422da02d7177f0dd"
PV = "0.0.2+gitr${SRCPV}"
-PR = "r3"
+PR = "r4"
SRC_URI = "git://git.shr-project.org/repo/libphone-utils.git;protocol=http;branch=master"
S = "${WORKDIR}/git/src/python"
diff --git a/meta-oe/recipes-devtools/python/python-pyalsaaudio_0.4.bb b/meta-oe/recipes-devtools/python/python-pyalsaaudio_0.4.bb
index 2c3a622..5faf39c 100644
--- a/meta-oe/recipes-devtools/python/python-pyalsaaudio_0.4.bb
+++ b/meta-oe/recipes-devtools/python/python-pyalsaaudio_0.4.bb
@@ -4,7 +4,7 @@ DEPENDS = "alsa-lib"
LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://LICENSE;md5=1a3b161aa0fcec32a0c8907a2219ad9d"
SRCNAME = "pyalsaaudio"
-PR = "ml0"
+PR = "ml1"
SRC_URI = "${SOURCEFORGE_MIRROR}/pyalsaaudio/${SRCNAME}-${PV}.tar.gz"
S = "${WORKDIR}/${SRCNAME}-${PV}"
diff --git a/meta-oe/recipes-devtools/python/python-pyserial_2.4.bb b/meta-oe/recipes-devtools/python/python-pyserial_2.4.bb
index 4684744..9dc54de 100644
--- a/meta-oe/recipes-devtools/python/python-pyserial_2.4.bb
+++ b/meta-oe/recipes-devtools/python/python-pyserial_2.4.bb
@@ -3,7 +3,7 @@ SECTION = "devel/python"
LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7424386ffe323e815ee62ee9ad591dd8"
SRCNAME = "pyserial"
-PR = "ml2"
+PR = "ml3"
SRC_URI = "${SOURCEFORGE_MIRROR}/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
S = "${WORKDIR}/${SRCNAME}-${PV}"
diff --git a/meta-oe/recipes-devtools/python/python-pyudev_0.11.bb b/meta-oe/recipes-devtools/python/python-pyudev_0.11.bb
index 03a948a..3aaefb4 100644
--- a/meta-oe/recipes-devtools/python/python-pyudev_0.11.bb
+++ b/meta-oe/recipes-devtools/python/python-pyudev_0.11.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://pypi.python.org/pypi/pyudev"
SECTION = "devel/python"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
-PR = "r0"
+PR = "r1"
SRCNAME = "pyudev"
SRC_URI = "http://pypi.python.org/packages/source/p/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
diff --git a/meta-oe/recipes-devtools/python/python-pyyaml_svn.bb b/meta-oe/recipes-devtools/python/python-pyyaml_svn.bb
index 965b1cc..b40b7a6 100644
--- a/meta-oe/recipes-devtools/python/python-pyyaml_svn.bb
+++ b/meta-oe/recipes-devtools/python/python-pyyaml_svn.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=6015f088759b10e0bc2bf64898d4ae17"
DEPENDS = "libyaml python-cython-native"
SRCREV = "344"
PV = "3.08+svnr${SRCPV}"
-PR = "ml0"
+PR = "ml1"
SRC_URI = "\
svn://svn.pyyaml.org/pyyaml;module=trunk;proto=http \
diff --git a/meta-oe/recipes-devtools/python/python-setuptools_0.6c11.bb b/meta-oe/recipes-devtools/python/python-setuptools_0.6c11.bb
index ca7335e..32e2e57 100644
--- a/meta-oe/recipes-devtools/python/python-setuptools_0.6c11.bb
+++ b/meta-oe/recipes-devtools/python/python-setuptools_0.6c11.bb
@@ -5,7 +5,7 @@ LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://setup.py;beginline=23;endline=23;md5=8a314270dd7a8dbca741775415f1716e"
SRCNAME = "setuptools"
-PR = "ml2"
+PR = "ml3"
DEPENDS += "python"
DEPENDS_virtclass-native += "python-native"
diff --git a/meta-oe/recipes-devtools/python/python-sqlalchemy_0.7.1.bb b/meta-oe/recipes-devtools/python/python-sqlalchemy_0.7.1.bb
index a50ce2e..06d0f70 100644
--- a/meta-oe/recipes-devtools/python/python-sqlalchemy_0.7.1.bb
+++ b/meta-oe/recipes-devtools/python/python-sqlalchemy_0.7.1.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.sqlalchemy.org/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e88f48967a8bd1fe88f5425f7e659dbf"
RDEPENDS_${PN} += "python-numbers"
-PR = "r0"
+PR = "r1"
SRCNAME = "SQLAlchemy"
SRC_URI = "${SOURCEFORGE_MIRROR}/sqlalchemy/${SRCNAME}-${PV}.tar.gz"
diff --git a/meta-oe/recipes-devtools/python/python-tornado_git.bb b/meta-oe/recipes-devtools/python/python-tornado_git.bb
index 6dbb8ad..ebbc7d1 100644
--- a/meta-oe/recipes-devtools/python/python-tornado_git.bb
+++ b/meta-oe/recipes-devtools/python/python-tornado_git.bb
@@ -3,6 +3,7 @@ LICENSE = "Apache"
LIC_FILES_CHKSUM = "file://README;md5=e7fb9954003d7cd93322ccf282210d1c"
PV = "2.1.1"
+PR = "r1"
SRCREV = "970b43bddf276d7ce0022252709fcac1ff1f8c64"
SRC_URI = "git://github.com/facebook/tornado.git"
diff --git a/meta-oe/recipes-devtools/python/python-vobject_0.8.1c.bb b/meta-oe/recipes-devtools/python/python-vobject_0.8.1c.bb
index 85affe8..050c999 100644
--- a/meta-oe/recipes-devtools/python/python-vobject_0.8.1c.bb
+++ b/meta-oe/recipes-devtools/python/python-vobject_0.8.1c.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
HOMEPAGE = "http://vobject.skyhouseconsulting.com/"
SRCNAME = "vobject"
RDEPENDS_${PN} = "python python-dateutil"
-PR = "r2"
+PR = "r3"
SRC_URI = "http://vobject.skyhouseconsulting.com/${SRCNAME}-${PV}.tar.gz"
S = "${WORKDIR}/${SRCNAME}-${PV}"
diff --git a/meta-oe/recipes-graphics/pango/pango.inc b/meta-oe/recipes-graphics/pango/pango.inc
index b098691..341d0e3 100644
--- a/meta-oe/recipes-graphics/pango/pango.inc
+++ b/meta-oe/recipes-graphics/pango/pango.inc
@@ -18,7 +18,7 @@ PACKAGES_DYNAMIC_virtclass-native = ""
RRECOMMENDS_${PN} = "pango-module-basic-x pango-module-basic-fc"
-INC_PR = "r1"
+INC_PR = "r2"
# seems to go wrong with default cflags
FULL_OPTIMIZATION_arm = "-O2"
diff --git a/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb b/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb
index c65f538..a6bf308 100644
--- a/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb
+++ b/meta-oe/recipes-navigation/gpsd/gpsd_2.95.bb
@@ -5,6 +5,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d217a23f408e91c94359447735bc1800"
DEPENDS = "dbus-glib ncurses python libusb1"
PROVIDES = "virtual/gpsd"
+PR = "r1"
+
EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
--x-libraries=${STAGING_LIBDIR} \
--enable-dbus \
diff --git a/meta-oe/recipes-support/pidgin/pidgin.inc b/meta-oe/recipes-support/pidgin/pidgin.inc
index 91ed9a2..1a35457 100644
--- a/meta-oe/recipes-support/pidgin/pidgin.inc
+++ b/meta-oe/recipes-support/pidgin/pidgin.inc
@@ -3,7 +3,7 @@ SECTION = "x11/network"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
DEPENDS = "python startup-notification avahi gtk+ ncurses gnutls virtual/libintl gstreamer dbus"
-INC_PR = "r1"
+INC_PR = "r2"
inherit autotools gettext pkgconfig gconf perlnative
--
1.7.7.1
^ permalink raw reply related
* RE: GATT Dbus API on BlueZ - attirbute-api.txt modifications
From: Tsai, Mike @ 2011-10-31 17:41 UTC (permalink / raw)
To: Ganir, Chen, Claudio Takahasi; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <7769C83744F2C34A841232EF77AEA20C01DCAA9265@dnce01.ent.ti.com>
SGkgQ2hlbi9DbGF1ZGlvLA0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogbGlu
dXgtYmx1ZXRvb3RoLW93bmVyQHZnZXIua2VybmVsLm9yZyBbbWFpbHRvOmxpbnV4LWJsdWV0b290
aC1vd25lckB2Z2VyLmtlcm5lbC5vcmddIE9uIEJlaGFsZiBPZiBHYW5pciwgQ2hlbg0KU2VudDog
V2VkbmVzZGF5LCBPY3RvYmVyIDI2LCAyMDExIDEyOjIwIEFNDQpUbzogQ2xhdWRpbyBUYWthaGFz
aQ0KQ2M6IGxpbnV4LWJsdWV0b290aEB2Z2VyLmtlcm5lbC5vcmcNClN1YmplY3Q6IEdBVFQgRGJ1
cyBBUEkgb24gQmx1ZVogLSBhdHRpcmJ1dGUtYXBpLnR4dCBtb2RpZmljYXRpb25zDQoNCkhpLg0K
DQpIZXJlJ3MgbXkgcHJvcG9zYWwgZm9yIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgZXhpc3Rp
bmcgYXR0cmlidXRlLWFwaS5kb2MgZmlsZS4NCg0KVGhlc2UgYWRkaXRpb25zIGluY2x1ZGUgOg0K
MS4gU3VwcG9ydCBmb3IgbW9yZSBwcm9wZXJ0aWVzLCBzdWNoIGFzIHdyaXRhYmxlLCByZWFkYWJs
ZSwgbm90aWZ5IDIuIFJlbW92ZSBWYWx1ZSBmcm9tIHRoZSBwcm9wZXJ0aWVzLCBhbmQgaGFuZGxl
IHdyaXRlL3JlYWQgd2l0aCBzcGVjaWZpYyBmdW5jdGlvbnMuIFRoaXMgd2FzIGRvbmUgc2luY2Ug
Y3VycmVudGx5IHRoZSB2YWx1ZSBpcyBvbmx5IHJlYWQgb25jZSBmcm9tIHRoZSBzZXJ2ZXIsIGFu
ZCB0aGVyZSBpcyBubyB3YXkgdG8gcmVmcmVzaCB0aGUgdmFsdWUgdXNpbmcgdGhlIGRidXMgQVBJ
LiBJbiBhZGRpdGlvbiwgdGhlIHZhbHVlIGNhbiBiZSB3cml0dGVuIGluIG11bHRpcGxlIHdheXMg
KHdlIGN1cnJlbnRseSBzdXBwb3J0IHdyaXRlIHdpdGggcmVzcG9uc2UgYW5kIHdyaXRlIHdpdGhv
dXQgcmVzcG9uc2UsIGJ1dCBmdXR1cmUgd3JpdGUgbWV0aG9kcyBpbmNsdWRlIHdyaXRlIHJlbGlh
YmxlIGFuZCB3cml0ZSBzaWduZWQsIHdoaWNoIG1heSBiZSByZXF1aXJlZCBieSBwcm9maWxlcyBp
biB0aGUgZnV0dXJlKS4NCg0KSGVyZSdzIHRoZSBkaWZmIGZyb20gdGhlIGN1cnJlbnQgZG9jcy9h
dHRyaWJ1dGUtYXBpLnR4dCBmaWxlIDoNCg0KLS0tLT44LS0tLS0tLS0tLS0tLS0tDQpkaWZmIC0t
Z2l0IGEvZG9jL2F0dHJpYnV0ZS1hcGkudHh0IGIvZG9jL2F0dHJpYnV0ZS1hcGkudHh0IGluZGV4
IDk4ZDdmMzAuLmZiYzY5NTcgMTAwNjQ0DQotLS0gYS9kb2MvYXR0cmlidXRlLWFwaS50eHQNCisr
KyBiL2RvYy9hdHRyaWJ1dGUtYXBpLnR4dA0KQEAgLTExMiw2ICsxMTIsMTcgQEAgTWV0aG9kcwkJ
ZGljdCBHZXRQcm9wZXJ0aWVzKCkNCiANCiAJCQlQb3NzaWJsZSBFcnJvcnM6IG9yZy5ibHVlei5F
cnJvci5JbnZhbGlkQXJndW1lbnRzDQogDQorCQlhcnJheXtieXRlfSBSZWFkVmFsdWUoKQ0KKw0K
KwkJICAgIFJlYWQgdGhlIHZhbHVlIG9mIHRoZSBjaGFyYWN0ZXJpc3RpYy4NCisNCisJCWludCBX
cml0ZVZhbHVlKGFycmF5e2J5dGV9IHZhbHVlLCBpbnQgbWV0aG9kKQ0KKw0KKwkJICAgIFdyaXRl
IHRoZSB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyaXN0aWMsIHdpdGggc3BlY2lmaWVkIG1ldGhvZCA6
DQorCQkgICAgMDogV3JpdGUgd2l0aG91dCByZXNwb25zZS4gQWx3YXlzIHJldHVybiAwLg0KKwkJ
ICAgIDE6IFdyaXRlIHdpdGggcmVzcG9uc2UuIFJldHVybiBzZXJ2ZXIgcmVzcG9uc2UgY29kZS4N
CisJCSAgICBPdGhlciB3cml0ZSBtZXRob2RzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4N
CisNCiBQcm9wZXJ0aWVzIAlzdHJpbmcgVVVJRCBbcmVhZG9ubHldDQogDQogCQkJVVVJRDEyOCBv
ZiB0aGlzIGNoYXJhY3RlcmlzdGljLg0KQEAgLTE0MiwxNSArMTUzLDU4IEBAIFByb3BlcnRpZXMg
CXN0cmluZyBVVUlEIFtyZWFkb25seV0NCiAJCQkgIHVpbnQxNiB8IERlc2NyaXB0aW9uOiBEZXNj
cmlwdGlvbiBvZiB0aGUgY2hhcmFjdGVyaXN0aWMgZGVmaW5lZA0KIAkJCSAgICAgICAgIHwgaW4g
YSBoaWdoIGxheWVyIHByb2ZpbGUuDQogDQotCQlhcnJheXtieXRlfSBWYWx1ZSBbcmVhZHdyaXRl
XQ0KLQ0KLQkJCVJhdyB2YWx1ZSBvZiB0aGUgQ2hhcmFjdGVyaXN0aWMgVmFsdWUgYXR0cmlidXRl
Lg0KLQ0KIAkJc3RyaW5nIFJlcHJlc2VudGF0aW9uIChvZiB0aGUgYmluYXJ5IFZhbHVlKSBbcmVh
ZG9ubHldDQogDQogCQkJRnJpZW5kbHkgcmVwcmVzZW50YXRpb24gb2YgdGhlIENoYXJhY3Rlcmlz
dGljIFZhbHVlDQogCQkJYmFzZWQgb24gdGhlIGZvcm1hdCBhdHRyaWJ1dGUuDQogDQorCQlib29s
ZWFuIEJyb2FkY2FzdCBbcmVhZHdyaXRlXQ0KKw0KKwkJICAgIEluZGljYXRlcyB3aGV0aGVyIHRo
aXMgY2hhcmFjdGVyaXN0aWMgaXMgYnJvYWRjYXN0ZWQgb3Igbm90Lg0KKwkJICAgIElmIEdBVFQg
U2VydmVyIENoYXJhY3RlcmlzdGljIENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcg0KKwkJICAgIGlz
IG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgY2hhcmFjdGVyaXN0aWMsIG9yIGlmIHRoZSBjaGFyYWN0
ZXJpc3RpYw0KKwkJICAgIHByb3BlcnRpZXMgZG8gbm90IGFsbG93IHRoaXMsIHdyaXRpbmcgdG8g
dGhpcyBwcm9wZXJ0eSBpcyBub3QNCisJCSAgICBhbGxvd2VkLg0KKw0KKwkJYm9vbGVhbiBJbmRp
Y2F0ZSBbcmVhZHdyaXRlXQ0KKw0KKwkJICAgIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY2hhcmFj
dGVyaXN0aWMgaXMgbm90aWZpZWQgb3Igbm90Lg0KKwkJICAgIElmIEdBVFQgQ2xpZW50IENoYXJh
Y3RlcmlzdGljIENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcg0KKwkJICAgIGlzIG5vdCBhdmFpbGFi
bGUgZm9yIHRoaXMgY2hhcmFjdGVyaXN0aWMsIG9yIGlmIHRoZSBjaGFyYWN0ZXJpc3RpYw0KKwkJ
ICAgIHByb3BlcnRpZXMgZG8gbm90IGFsbG93IHRoaXMsIHdyaXRpbmcgdG8gdGhpcyBwcm9wZXJ0
eSBpcyBub3QNCisJCSAgICBhbGxvd2VkLg0KKw0KKwkJYm9vbGVhbiBOb3RpZnkgW3JlYWR3cml0
ZV0NCisNCisJCSAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNoYXJhY3RlcmlzdGljIGlzIGlu
ZGljYXRlZCBvciBub3QuDQorCQkgICAgSWYgR0FUVCBDbGllbnQgQ2hhcmFjdGVyaXN0aWMgQ29u
ZmlndXJhdGlvbiBkZXNjcmlwdG9yDQorCQkgICAgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBj
aGFyYWN0ZXJpc3RpYywgb3IgaWYgdGhlIGNoYXJhY3RlcmlzdGljDQorCQkgICAgcHJvcGVydGll
cyBkbyBub3QgYWxsb3cgdGhpcywgd3JpdGluZyB0byB0aGlzIHByb3BlcnR5IGlzIG5vdA0KKwkJ
ICAgIGFsbG93ZWQuDQorDQorCQlib29sZWFuIFJlYWRhYmxlIFtyZWFkb25seV0NCisNCisJCSAg
ICBJbmRpY2F0ZXMgd2V0aGVyIHRoaXMgY2hhcmFjdGVyaXN0aWMgdmFsdWUgY2FuIGJlIHJlYWQu
DQorDQorCQlib29sZWFuIFdyaXRhYmxlTm9Sc3AgW3JlYWRvbmx5XQ0KKw0KKwkJICAgIEluZGlj
YXRlcyB3aGV0aGVyIHRoaXMgY2hhcmFjdGVyaXN0aWMgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gd2l0
aG91dA0KKwkJICAgIHJlc3BvbnNlLg0KKw0KKwkJYm9vbGVhbiBXcml0YWJsZVJzcCBbcmVhZG9u
bHldDQorDQorCQkgICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjaGFyYWN0ZXJpc3RpYyBjYW4g
YmUgd3JpdHRlbiB3aXRoIHJlc3BvbnNlLg0KKw0KKwkJYm9vbGVhbiBXcml0YWJsZVNpZ25lZCBb
cmVhZG9ubHldDQorDQorCQkgICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjaGFyYWN0ZXJpc3Rp
YyBjYW4gYmUgd3JpdHRlbiB3aXRoIHNpZ25lZA0KKwkJICAgIGF1dGhlbnRpY2F0aW9uIG1ldGhv
ZC4NCisNCisJCWJvb2xlYW4gV3JpdGFibGVSZWxpYWJsZSBbcmVhZG9ubHldDQorDQorCQkgICAg
SW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjaGFyYWN0ZXJpc3RpYyBjYW4gYmUgd3JpdHRlbiB3aXRo
IHRoZQ0KKwkJICAgIHJlbGlhYmxlIHdyaXRlIHByb2NlZHVyZS4NCisNCiANCiBDaGFyYWN0ZXJp
c3RpYyBXYXRjaGVyIGhpZXJhcmNoeQ0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Cg0KSSB3b3VsZCBhcHByZWNpYXRlIHlvdXIgY29tbWVudHMgb24gdGhpcy4NCg0KVGhhbmtzLA0K
Q2hlbiBHYW5pcg0KDQpbTVRdSG93IGNhbiB0aGlzIGhhbmRsZSB0aGUgbXVsdGlwbGUgaW5zdGFu
Y2VzIG9mIHNhbWUgY2hhcmFjdGVyaXN0aWNzIHdpdGhpbiBhIHNpbmdsZSBzZXJ2aWNlPyBUaGUg
Y2hhcmFjdGVyaXN0aWMgVVVJRCB3aWxsIG5vdCBiZSB1bmlxdWUgaW4gdGhhdCBjYXNlLiBBbHNv
LCBob3cgaXMgdGhlIHByb2ZpbGUgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWMgZGVzY3JpcHRvciBo
YW5kbGVkPw0KDQpDaGVlcnMsDQoNCk1pa2UNCg0K
^ permalink raw reply
* Re: [Qemu-devel] Problem under OSX Lion: GThread-ERROR **: GThread system may only be initialized once
From: Andreas Färber @ 2011-10-31 16:40 UTC (permalink / raw)
To: Daniel P. Berrange, Juan Pineda; +Cc: aliguori, qemu-devel
In-Reply-To: <20111031163604.GH27570@redhat.com>
Am 31.10.2011 17:36, schrieb Daniel P. Berrange:
> On Mon, Oct 31, 2011 at 09:25:26AM -0700, Juan Pineda wrote:
>> The current Qemu master branch crashes under OSX with a GThread error.
>> Commenting out vlc.c line 2188 (call to g_thread_init) allows it to run
>> successfully.
>
> As a general rule all calls to 'g_thread_init(NULL)' should be protected
> by a conditional thus:
>
> if (!g_thread_supported())
> g_thread_init(NULL);
>
> Even though QEMU calls g_thread_init() very early in main(), there is
> always the possibility that some library QEMU links to, has got an ELF
> initializer, triggering before main(), which calls g_thread_init().
Thanks to both of you! I checked: vl.c is the only use without such
condition. So it seems this regression was introduced through
coroutine-gthread.c and is not specific to Darwin. I'll post a patch
shortly.
Andreas
^ permalink raw reply
* RE: [net-next-2.6 PATCH 0/6 RFC v3] macvlan: MAC Address filtering support for passthru mode
From: Rose, Gregory V @ 2011-10-31 17:39 UTC (permalink / raw)
To: Roopa Prabhu, netdev@vger.kernel.org
Cc: sri@us.ibm.com, dragos.tatulea@gmail.com, kvm@vger.kernel.org,
arnd@arndb.de, mst@redhat.com, davem@davemloft.net,
mchan@broadcom.com, dwang2@cisco.com, shemminger@vyatta.com,
eric.dumazet@gmail.com, kaber@trash.net, benve@cisco.com
In-Reply-To: <CAD42458.3856A%roprabhu@cisco.com>
> -----Original Message-----
> From: Roopa Prabhu [mailto:roprabhu@cisco.com]
> Sent: Monday, October 31, 2011 10:09 AM
> To: Rose, Gregory V; netdev@vger.kernel.org
> Cc: sri@us.ibm.com; dragos.tatulea@gmail.com; kvm@vger.kernel.org;
> arnd@arndb.de; mst@redhat.com; davem@davemloft.net; mchan@broadcom.com;
> dwang2@cisco.com; shemminger@vyatta.com; eric.dumazet@gmail.com;
> kaber@trash.net; benve@cisco.com
> Subject: Re: [net-next-2.6 PATCH 0/6 RFC v3] macvlan: MAC Address
> filtering support for passthru mode
>
>
>
>
> On 10/31/11 9:38 AM, "Rose, Gregory V" <gregory.v.rose@intel.com> wrote:
>
> >> -----Original Message-----
> >> From: netdev-owner@vger.kernel.org [mailto:netdev-
> owner@vger.kernel.org]
> >> On Behalf Of Roopa Prabhu
> >> Sent: Friday, October 28, 2011 7:34 PM
> >> To: netdev@vger.kernel.org
> >> Cc: sri@us.ibm.com; dragos.tatulea@gmail.com; kvm@vger.kernel.org;
> >> arnd@arndb.de; mst@redhat.com; davem@davemloft.net; Rose, Gregory V;
> >> mchan@broadcom.com; dwang2@cisco.com; shemminger@vyatta.com;
> >> eric.dumazet@gmail.com; kaber@trash.net; benve@cisco.com
> >> Subject: [net-next-2.6 PATCH 0/6 RFC v3] macvlan: MAC Address filtering
> >> support for passthru mode
> >>
> >> v2 -> v3
> >> - Moved set and get filter ops from rtnl_link_ops to netdev_ops
> >> - Support for SRIOV VFs.
> >> [Note: The get filters msg might get too big for SRIOV vfs.
> >> But this patch follows existing sriov vf get code and
> >> accomodate filters for all VF's in a PF.
> >> And for the SRIOV case I have only tested the fact that the VF
> >> arguments are getting delivered to rtnetlink correctly. The rest of
> >> the code follows existing sriov vf handling code so it should work
> >> just fine]
> >> - Fixed all op and netlink attribute names to start with IFLA_RX_FILTER
> >> - Changed macvlan filter ops to call corresponding lowerdev op if
> lowerdev
> >> supports it for passthru mode. Else it falls back on macvlan handling
> >> the
> >> filters locally as in v1 and v2
> >>
> >> v1 -> v2
> >> - Instead of TUNSETTXFILTER introduced rtnetlink interface for the same
> >>
> >
> > [snip...]
> >
> >>
> >> This patch series implements the following
> >> 01/6 rtnetlink: Netlink interface for setting MAC and VLAN filters
> >> 02/6 netdev: Add netdev_ops to set and get MAC/VLAN rx filters
> >> 03/6 rtnetlink: Add support to set MAC/VLAN filters
> >> 04/6 rtnetlink: Add support to get MAC/VLAN filters
> >> 05/6 macvlan: Add support to set MAC/VLAN filter netdev ops
> >> 06/6 macvlan: Add support to get MAC/VLAN filter netdev ops
> >>
> >> Please comment. Thanks.
> >
> > After some preliminary review this looks pretty good to me in so far as
> adding
> > the necessary hooks to do what I need to do. I appreciate your effort
> on
> > this.
> >
> > I'm sort of a hands-on type of person so I need to apply this patch to a
> > private git tree and then take it for a test drive (so to speak). If I have
> > further comments I'll get back to you.
> >
> Sounds good.
>
> > Did you have any plans for modifying any user space tools such as 'ip' to use
> > this interface?
> >
>
> Yes, I have an iproute2 sample patch for setting and displaying the filters
> which I have been using to test this interface. I can send the patch to you
> after some cleanup if you think it will be useful for you to try out this
> interface.
>
> Thanks Greg.
Yes, please do.
Thanks,
- Greg
^ permalink raw reply
* Re: what's the proper value for BB_NUMBER_THREADS?
From: Gary Thomas @ 2011-10-31 17:39 UTC (permalink / raw)
To: Robert P. J. Day; +Cc: yocto
In-Reply-To: <alpine.DEB.2.02.1110311323050.8545@localhost6.localdomain6>
On 2011-10-31 11:25, Robert P. J. Day wrote:
> On Mon, 31 Oct 2011, Mark Hatle wrote:
>
>> On 10/30/11 11:15 AM, Robert P. J. Day wrote:
>>> On Sun, 30 Oct 2011, Christian Gagneraud wrote:
>>>
>>>> On 30/10/11 15:32, Robert P. J. Day wrote:
>>>>>
>>>>> all the docs recommend twice the number of cores (AFAICT), yet the
>>>>> template local.conf file suggests that, for a quad core, the value of
>>>>> 4 would be appropriate. shouldn't that say 8? same with
>>>>> PARALLEL_MAKE?
>>>>
>>>> Hi Robert,
>>>>
>>>> The Poky ref manual says (rule of thumb) x2 for BB_NUMBER_THREADS,
>>>> and x1.5 for PARALLEL_MAKE.
>>>
>>> if that's the case, anyone object to my submitting a patch to
>>> update local.conf.sample appropriately?
>>>
>>> rday
>>>
>>
>> I agree the manual and local.conf files should match. The issue
>> seems to be that the perfect values are subjective. Things like
>> memory, disk speed, chipset latency, and of course processor
>> speed/cores all affect the optimal setting. But we do need a
>> consistent rule of thumb.. I myself usually use x2 for both THREADS
>> and MAKE.
>
> that's what i would normally use, assuming that having an overly
> high value for either of those settings can't possibly hurt. if
> that's the consensus, i can adjust the references to say 2x everywhere
> that i know of. just let me know.
Look back in the archives - I think it was Richard that did a fairly
extensive study of this and he (whoever it was) found that there were
saturation points and trying to get beyond them had a negative impact.
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
^ permalink raw reply
* Default device XRUNs with perriods=2
From: Alan Horstmann @ 2011-10-31 17:38 UTC (permalink / raw)
To: alsa-devel; +Cc: Takashi Iwai
Hi,
I am trying to debug/fix some problems with Portaudio on Linux platform, and
would appreciate assistance from Alsa experts.
The 'default' pcm on the test systems here (Suse 9 and SLED10), is standard
for the configuration and includes dmix and plug conversion, with fixed
period of 1024 at 48000. Pulseaudio is not on these systems.
When playing data (using a polling mechanism) at 48000 both 3 (or more) and 2
periods of buffer work fine; with the fixed period of 1024 the lowest latency
is 2 * 1024 / 48000 = 42.6ms.
However, at 44100, 2 periods does not run properly at all, but 3 does. The
periods in this case are (940, 941) due to the rate conversion.
What I see (captured on another machine) from start of the stream is one
21.3ms period of good audio, a discontinuity followed by some variable amount
of out-of-sync audio, and a section of silence.
I believe that the discontinuity corresponds to the point at which
snd_pcm_poll_descriptors_revents() returns POLLERR and portaudio detects the
POLLERR and restarts the stream, so that after a certain delay there is
another 21.3ms of audio, POLLERR, now no out-of-sync audio, just silence,
before it all repeats. So it stutters only outputting 21.3ms bursts of
audio.
The CPU usage during this is about 2%. I am suspecting some
mis-configuration, or is it wrong to expect this to work at 2 periods due to
the rate conversion etc?
Any pointers etc would be really appreciated. This is the info dump:-
ACCESS: MMAP_INTERLEAVED
FORMAT: FLOAT_LE
SUBFORMAT: STD
SAMPLE_BITS: 32
FRAME_BITS: 64
CHANNELS: 2
RATE: 44100
PERIOD_TIME: (21333 21334)
PERIOD_SIZE: (940 941)
PERIOD_BYTES: (7520 7528)
PERIODS: 2
BUFFER_TIME: (42653 42654)
BUFFER_SIZE: 1881
BUFFER_BYTES: 15048
TICK_TIME: 0
start_mode: DATA
xrun_mode: STOP
tstamp_mode: MMAP
period_step: 1
sleep_min: 0
avail_min: 940
xfer_align: 1
silence_threshold: 0
silence_size: 4235635449541951488
boundary: 4235635449541951488
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : FLOAT_LE
subformat : STD
channels : 2
rate : 44100
exact rate : 44100 (44100/1)
msbits : 32
buffer_size : 1881
period_size : 940
period_time : 21333
tick_time : 0
tstamp_mode : MMAP
period_step : 1
sleep_min : 0
avail_min : 940
xfer_align : 1
start_threshold : 940
stop_threshold : 1881
silence_threshold: 0
silence_size : 4235635449541951488
boundary : 4235635449541951488
Regards
Alan
^ permalink raw reply
* Re: [git pull] FireWire updates post 3.1
From: Stefan Richter @ 2011-10-31 17:36 UTC (permalink / raw)
To: linux-kernel; +Cc: Linus Torvalds, Andrew Morton, linux1394-devel
In-Reply-To: <20111031183259.4427c1e6@stein>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=US-ASCII, Size: 52850 bytes --]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
> Linus, please pull from the for-linus branch at
>
> git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git for-linus
>
> head sha1: a572e688cf5d99d2382016c7241ec37b523b0137
>
> to receive the following updates for the IEEE 1394 (FireWire) subsystem.
commit a572e688cf5d99d2382016c7241ec37b523b0137
Author: Clemens Ladisch <clemens@ladisch.de>
Date: Sat Oct 15 23:12:23 2011 +0200
firewire: ohci: fix isochronous DMA synchronization
Add the dma_sync_single_* calls necessary to ensure proper cache
synchronization for isochronous data buffers on non-coherent
architectures.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index b697714..6628fea 100644
- --- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -126,6 +126,7 @@ struct context {
struct fw_ohci *ohci;
u32 regs;
int total_allocation;
+ u32 current_bus;
bool running;
bool flushing;
@@ -1057,6 +1058,7 @@ static void context_tasklet(unsigned long data)
address = le32_to_cpu(last->branch_address);
z = address & 0xf;
address &= ~0xf;
+ ctx->current_bus = address;
/* If the branch address points to a buffer outside of the
* current buffer, advance to the next buffer. */
@@ -2697,6 +2699,7 @@ static int handle_ir_packet_per_buffer(struct context *context,
struct iso_context *ctx =
container_of(context, struct iso_context, context);
struct descriptor *pd;
+ u32 buffer_dma;
__le32 *ir_header;
void *p;
@@ -2707,6 +2710,16 @@ static int handle_ir_packet_per_buffer(struct context *context,
/* Descriptor(s) not done yet, stop iteration */
return 0;
+ while (!(d->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))) {
+ d++;
+ buffer_dma = le32_to_cpu(d->data_address);
+ dma_sync_single_range_for_cpu(context->ohci->card.device,
+ buffer_dma & PAGE_MASK,
+ buffer_dma & ~PAGE_MASK,
+ le16_to_cpu(d->req_count),
+ DMA_FROM_DEVICE);
+ }
+
p = last + 1;
copy_iso_headers(ctx, p);
@@ -2729,11 +2742,19 @@ static int handle_ir_buffer_fill(struct context *context,
{
struct iso_context *ctx =
container_of(context, struct iso_context, context);
+ u32 buffer_dma;
if (!last->transfer_status)
/* Descriptor(s) not done yet, stop iteration */
return 0;
+ buffer_dma = le32_to_cpu(last->data_address);
+ dma_sync_single_range_for_cpu(context->ohci->card.device,
+ buffer_dma & PAGE_MASK,
+ buffer_dma & ~PAGE_MASK,
+ le16_to_cpu(last->req_count),
+ DMA_FROM_DEVICE);
+
if (le16_to_cpu(last->control) & DESCRIPTOR_IRQ_ALWAYS)
ctx->base.callback.mc(&ctx->base,
le32_to_cpu(last->data_address) +
@@ -2744,6 +2765,43 @@ static int handle_ir_buffer_fill(struct context *context,
return 1;
}
+static inline void sync_it_packet_for_cpu(struct context *context,
+ struct descriptor *pd)
+{
+ __le16 control;
+ u32 buffer_dma;
+
+ /* only packets beginning with OUTPUT_MORE* have data buffers */
+ if (pd->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))
+ return;
+
+ /* skip over the OUTPUT_MORE_IMMEDIATE descriptor */
+ pd += 2;
+
+ /*
+ * If the packet has a header, the first OUTPUT_MORE/LAST descriptor's
+ * data buffer is in the context program's coherent page and must not
+ * be synced.
+ */
+ if ((le32_to_cpu(pd->data_address) & PAGE_MASK) ==
+ (context->current_bus & PAGE_MASK)) {
+ if (pd->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))
+ return;
+ pd++;
+ }
+
+ do {
+ buffer_dma = le32_to_cpu(pd->data_address);
+ dma_sync_single_range_for_cpu(context->ohci->card.device,
+ buffer_dma & PAGE_MASK,
+ buffer_dma & ~PAGE_MASK,
+ le16_to_cpu(pd->req_count),
+ DMA_TO_DEVICE);
+ control = pd->control;
+ pd++;
+ } while (!(control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS)));
+}
+
static int handle_it_packet(struct context *context,
struct descriptor *d,
struct descriptor *last)
@@ -2760,6 +2818,8 @@ static int handle_it_packet(struct context *context,
/* Descriptor(s) not done yet, stop iteration */
return 0;
+ sync_it_packet_for_cpu(context, d);
+
i = ctx->header_length;
if (i + 4 < PAGE_SIZE) {
/* Present this value as big-endian to match the receive code */
@@ -3129,6 +3189,10 @@ static int queue_iso_transmit(struct iso_context *ctx,
page_bus = page_private(buffer->pages[page]);
pd[i].data_address = cpu_to_le32(page_bus + offset);
+ dma_sync_single_range_for_device(ctx->context.ohci->card.device,
+ page_bus, offset, length,
+ DMA_TO_DEVICE);
+
payload_index += length;
}
@@ -3153,6 +3217,7 @@ static int queue_iso_packet_per_buffer(struct iso_context *ctx,
struct fw_iso_buffer *buffer,
unsigned long payload)
{
+ struct device *device = ctx->context.ohci->card.device;
struct descriptor *d, *pd;
dma_addr_t d_bus, page_bus;
u32 z, header_z, rest;
@@ -3207,6 +3272,10 @@ static int queue_iso_packet_per_buffer(struct iso_context *ctx,
page_bus = page_private(buffer->pages[page]);
pd->data_address = cpu_to_le32(page_bus + offset);
+ dma_sync_single_range_for_device(device, page_bus,
+ offset, length,
+ DMA_FROM_DEVICE);
+
offset = (offset + length) & ~PAGE_MASK;
rest -= length;
if (offset == 0)
@@ -3266,6 +3335,10 @@ static int queue_iso_buffer_fill(struct iso_context *ctx,
page_bus = page_private(buffer->pages[page]);
d->data_address = cpu_to_le32(page_bus + offset);
+ dma_sync_single_range_for_device(ctx->context.ohci->card.device,
+ page_bus, offset, length,
+ DMA_FROM_DEVICE);
+
rest -= length;
offset = 0;
page++;
commit 32eaeae177bf77fbc224c35262add45bd5e6abb3
Author: Clemens Ladisch <clemens@ladisch.de>
Date: Sat Oct 15 18:14:39 2011 +0200
firewire: ohci: work around selfID junk due to wrong gap count
If a device's firmware initiates a bus reset by setting the IBR bit in
PHY register 1 without resetting the gap count field to 63 (and without
having sent a PHY configuration packet beforehand), the gap count of
this node will remain at the old value after the bus reset and thus be
inconsistent with the gap count on all other nodes.
The bus manager is supposed to detect the inconsistent gap count values
in the self ID packets and correct them by issuing another bus reset.
However, if the buggy device happens to be the cycle master, and if it
sends a cycle start packet immediately after the bus reset (which is
likely after a long bus reset), then the time between the end of the
selfID phase and the start of the cycle start packet will be based on
the too-small gap count value, so this gap will be too short to be
detected as a subaction gap by the other nodes. This means that the
cycle start packet will be assumed to be self ID data, and will be
stored after the actual self ID quadlets in the self ID buffer.
This garbage in the self ID buffer made firewire-core ignore all of the
self ID data, and thus prevented the Linux bus manager from correcting
the problem. Furthermore, because the bus reset handling was aborted
completely, asynchronous transfers would be no longer handled correctly,
and fw_run_transaction() would hang until the next bus reset.
To fix this, make the detection of inconsistent self IDs more
discriminating: If the invalid data in the self ID buffer looks like
a cycle start packet, we can assume that the previous data in the buffer
is correctly received self ID information, and process it normally.
(We inspect only the first quadlet of the cycle start packet, because
this value is different enough from any valid self ID quadlet, and many
controllers do not store the cycle start packet in five quadlets because
they expect self ID data to have an even number of quadlets.)
This bug has been observed when a bus-powered DesktopKonnekt6 is
switched off with its power button.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index bffc2ad..b697714 100644
- --- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -1860,8 +1860,22 @@ static void bus_reset_work(struct work_struct *work)
for (i = 1, j = 0; j < self_id_count; i += 2, j++) {
if (ohci->self_id_cpu[i] != ~ohci->self_id_cpu[i + 1]) {
- - fw_notify("inconsistent self IDs\n");
- - return;
+ /*
+ * If the invalid data looks like a cycle start packet,
+ * it's likely to be the result of the cycle master
+ * having a wrong gap count. In this case, the self IDs
+ * so far are valid and should be processed so that the
+ * bus manager can then correct the gap count.
+ */
+ if (cond_le32_to_cpu(ohci->self_id_cpu[i])
+ == 0xffff008f) {
+ fw_notify("ignoring spurious self IDs\n");
+ self_id_count = j;
+ break;
+ } else {
+ fw_notify("inconsistent self IDs\n");
+ return;
+ }
}
ohci->self_id_buffer[j] =
cond_le32_to_cpu(ohci->self_id_cpu[i]);
commit a74477db9171e677b7a37b89e6e0ac8a15ba1f26
Author: Stephan Gatzka <stephan@gatzka.org>
Date: Mon Sep 26 21:44:30 2011 +0200
firewire: net: Use posted writes
Change memory region to ohci "middle address space". This effectively
reduces the number of packets by 50%.
[Stefan R.:] This eliminates 1394 ack packets and improved throughput
by a few percent in some tests with an S400a connection with and without
gap count optimization. Since firewire-net taxes the AR-req DMA unit of
a FireWire controller much more than firewire-sbp2 (which uses the
middle address space with PCI posted writes too), this commit also
changes a related error printk into a ratelimited one as a precaution.
Side note: The IPv4-over-1394 drivers of Mac OS X 10.4, Windows XP SP3,
and the Thesycon 1394 bus driver for Windows all use the middle address
space too.
Signed-off-by: Stephan Gatzka <stephan@gatzka.org>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
index d1fad1f..a20f45b 100644
- --- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -1121,17 +1121,12 @@ static int fwnet_broadcast_start(struct fwnet_device *dev)
unsigned u;
if (dev->local_fifo == FWNET_NO_FIFO_ADDR) {
- - /* outside OHCI posted write area? */
- - static const struct fw_address_region region = {
- - .start = 0xffff00000000ULL,
- - .end = CSR_REGISTER_BASE,
- - };
- -
dev->handler.length = 4096;
dev->handler.address_callback = fwnet_receive_packet;
dev->handler.callback_data = dev;
- - retval = fw_core_add_address_handler(&dev->handler, ®ion);
+ retval = fw_core_add_address_handler(&dev->handler,
+ &fw_high_memory_region);
if (retval < 0)
goto failed_initial;
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index 399d592..bffc2ad 100644
- --- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -2045,7 +2045,8 @@ static irqreturn_t irq_handler(int irq, void *data)
reg_read(ohci, OHCI1394_PostedWriteAddressLo);
reg_write(ohci, OHCI1394_IntEventClear,
OHCI1394_postedWriteErr);
- - fw_error("PCI posted write error\n");
+ if (printk_ratelimit())
+ fw_error("PCI posted write error\n");
}
if (unlikely(event & OHCI1394_cycleTooLong)) {
commit 4ec4a67aa100268b4ac5ae32b54843d975969969
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date: Mon Sep 19 00:20:48 2011 +0200
firewire: use clamp and min3 macros
Use kernel.h's convenience macros. Also omit a printk that should never
happen and won't matter much if it ever happened.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-transaction.c
index 334b82a..855ab3f 100644
- --- a/drivers/firewire/core-transaction.c
+++ b/drivers/firewire/core-transaction.c
@@ -1046,8 +1046,8 @@ static void update_split_timeout(struct fw_card *card)
cycles = card->split_timeout_hi * 8000 + (card->split_timeout_lo >> 19);
- - cycles = max(cycles, 800u); /* minimum as per the spec */
- - cycles = min(cycles, 3u * 8000u); /* maximum OHCI timeout */
+ /* minimum per IEEE 1394, maximum which doesn't overflow OHCI */
+ cycles = clamp(cycles, 800u, 3u * 8000u);
card->split_timeout_cycles = cycles;
card->split_timeout_jiffies = DIV_ROUND_UP(cycles * HZ, 8000);
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
index 03a7a85..d1fad1f 100644
- --- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -502,11 +502,7 @@ static struct fwnet_peer *fwnet_peer_find_by_node_id(struct fwnet_device *dev,
static unsigned fwnet_max_payload(unsigned max_rec, unsigned speed)
{
max_rec = min(max_rec, speed + 8);
- - max_rec = min(max_rec, 0xbU); /* <= 4096 */
- - if (max_rec < 8) {
- - fw_notify("max_rec %x out of range\n", max_rec);
- - max_rec = 8;
- - }
+ max_rec = clamp(max_rec, 8U, 11U); /* 512...4096 */
return (1 << (max_rec + 1)) - RFC2374_FRAG_HDR_SIZE;
}
diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
index 8a8047d..68375bc 100644
- --- a/drivers/firewire/sbp2.c
+++ b/drivers/firewire/sbp2.c
@@ -1164,8 +1164,8 @@ static int sbp2_probe(struct device *dev)
* specifies the max payload size as 2 ^ (max_payload + 2), so
* if we set this to max_speed + 7, we get the right value.
*/
- - tgt->max_payload = min(device->max_speed + 7, 10U);
- - tgt->max_payload = min(tgt->max_payload, device->card->max_receive - 1);
+ tgt->max_payload = min3(device->max_speed + 7, 10U,
+ device->card->max_receive - 1);
/* Do the login in a workqueue so we can easily reschedule retries. */
list_for_each_entry(lu, &tgt->lu_list, link)
commit b810e4ae111cb8b4c0ccbbe7ff4ea0a23c671e4f
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date: Mon Sep 19 09:29:30 2011 +0200
firewire: ohci: optimize TSB41BA3D detection
Takes less source code and machine code, and less runtime with PHYs
other than TSB41BA3D (e.g. TSB81BA3 with device ID 0x831304 which takes
one instead of six read_paged_phy_reg now).
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index 862fdf3..399d592 100644
- --- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -2159,38 +2159,26 @@ static int configure_1394a_enhancements(struct fw_ohci *ohci)
return 0;
}
- -#define TSB41BA3D_VID 0x00080028
- -#define TSB41BA3D_PID 0x00833005
- -
static int probe_tsb41ba3d(struct fw_ohci *ohci)
{
- - int reg, i, vendor_id, product_id;
+ /* TI vendor ID = 0x080028, TSB41BA3D product ID = 0x833005 (sic) */
+ static const u8 id[] = { 0x08, 0x00, 0x28, 0x83, 0x30, 0x05, };
+ int reg, i;
reg = read_phy_reg(ohci, 2);
if (reg < 0)
return reg;
+ if ((reg & PHY_EXTENDED_REGISTERS) != PHY_EXTENDED_REGISTERS)
+ return 0;
- - if ((reg & PHY_EXTENDED_REGISTERS) == PHY_EXTENDED_REGISTERS) {
- - vendor_id = 0;
- - for (i = 10; i < 13; i++) {
- - reg = read_paged_phy_reg(ohci, 1, i);
- - if (reg < 0)
- - return reg;
- - vendor_id = (vendor_id << 8) | reg;
- - }
- - product_id = 0;
- - for (i = 13; i < 16; i++) {
- - reg = read_paged_phy_reg(ohci, 1, i);
- - if (reg < 0)
- - return reg;
- - product_id = (product_id << 8) | reg;
- - }
- -
- - if ((vendor_id == TSB41BA3D_VID) &&
- - (product_id == TSB41BA3D_PID))
- - return 1;
+ for (i = ARRAY_SIZE(id) - 1; i >= 0; i--) {
+ reg = read_paged_phy_reg(ohci, 1, i + 10);
+ if (reg < 0)
+ return reg;
+ if (reg != id[i])
+ return 0;
}
- - return 0;
+ return 1;
}
static int ohci_enable(struct fw_card *card,
commit 28897fb73c848eb441e54e859d0b64ad6b44d2e6
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date: Mon Sep 19 00:17:37 2011 +0200
firewire: ohci: TSB41BA3D support tweaks
Fix: phy_reg_mutex must be held over the write/read_phy_reg pair which
gets PHY port status.
Only print to the log when a TSB41BA3D was found. By far most TSB82AA2
cards have a TSB81BA3, and firewire-ohci can keep quiet about that.
Shorten some strings and comments. Change some whitespace.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index b983581..862fdf3 100644
- --- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -325,7 +325,7 @@ MODULE_PARM_DESC(quirks, "Chip quirks (default = 0"
", AR/selfID endianess = " __stringify(QUIRK_BE_HEADERS)
", no 1394a enhancements = " __stringify(QUIRK_NO_1394A)
", disable MSI = " __stringify(QUIRK_NO_MSI)
- - ", workaround for TI SLLZ059 errata = " __stringify(QUIRK_TI_SLLZ059)
+ ", TI SLLZ059 erratum = " __stringify(QUIRK_TI_SLLZ059)
")");
#define OHCI_PARAM_DEBUG_AT_AR 1
@@ -1730,12 +1730,8 @@ static int get_status_for_port(struct fw_ohci *ohci, int port_index)
mutex_lock(&ohci->phy_reg_mutex);
reg = write_phy_reg(ohci, 7, port_index);
- - mutex_unlock(&ohci->phy_reg_mutex);
- - if (reg < 0)
- - return reg;
- -
- - mutex_lock(&ohci->phy_reg_mutex);
- - reg = read_phy_reg(ohci, 8);
+ if (reg >= 0)
+ reg = read_phy_reg(ohci, 8);
mutex_unlock(&ohci->phy_reg_mutex);
if (reg < 0)
return reg;
@@ -1754,6 +1750,7 @@ static int get_self_id_pos(struct fw_ohci *ohci, u32 self_id,
{
int i;
u32 entry;
+
for (i = 0; i < self_id_count; i++) {
entry = ohci->self_id_buffer[i];
if ((self_id & 0xff000000) == (entry & 0xff000000))
@@ -1765,33 +1762,16 @@ static int get_self_id_pos(struct fw_ohci *ohci, u32 self_id,
}
/*
- - * This function implements a work around for the Texas Instruments PHY
- - * TSB41BA3D. This phy has a bug at least in combination with the TI
- - * LLCs TSB82AA2B and TSB12LV26. The selfid coming from the locally
- - * connected phy is not propagated into the selfid buffer of the OHCI
- - * (see http://www.ti.com/litv/pdf/sllz059 for details).
- - * The main idea is to construct the selfid ourselves.
+ * TI TSB82AA2B and TSB12LV26 do not receive the selfID of a locally
+ * attached TSB41BA3D phy; see http://www.ti.com/litv/pdf/sllz059.
+ * Construct the selfID from phy register contents.
+ * FIXME: How to determine the selfID.i flag?
*/
- -
static int find_and_insert_self_id(struct fw_ohci *ohci, int self_id_count)
{
- - int reg;
- - int i;
- - int pos;
- - int status;
- - u32 self_id;
- -
- -/*
- - * preset bits in self_id
- - *
- - * link active: 0b1
- - * speed: 0b11
- - * bridge: 0b00
- - * contender: 0b1
- - * initiated reset: 0b0
- - * more packets: 0b0
- - */
- - self_id = 0x8040C800;
+ int reg, i, pos, status;
+ /* link active 1, speed 3, bridge 0, contender 1, more packets 0 */
+ u32 self_id = 0x8040c800;
reg = reg_read(ohci, OHCI1394_NodeID);
if (!(reg & OHCI1394_NodeID_idValid)) {
@@ -1800,16 +1780,12 @@ static int find_and_insert_self_id(struct fw_ohci *ohci, int self_id_count)
}
self_id |= ((reg & 0x3f) << 24); /* phy ID */
- - mutex_lock(&ohci->phy_reg_mutex);
- - reg = read_phy_reg(ohci, 4);
- - mutex_unlock(&ohci->phy_reg_mutex);
+ reg = ohci_read_phy_reg(&ohci->card, 4);
if (reg < 0)
return reg;
self_id |= ((reg & 0x07) << 8); /* power class */
- - mutex_lock(&ohci->phy_reg_mutex);
- - reg = read_phy_reg(ohci, 1);
- - mutex_unlock(&ohci->phy_reg_mutex);
+ reg = ohci_read_phy_reg(&ohci->card, 1);
if (reg < 0)
return reg;
self_id |= ((reg & 0x3f) << 16); /* gap count */
@@ -1894,7 +1870,7 @@ static void bus_reset_work(struct work_struct *work)
if (ohci->quirks & QUIRK_TI_SLLZ059) {
self_id_count = find_and_insert_self_id(ohci, self_id_count);
if (self_id_count < 0) {
- - fw_notify("could not construct local self IDs\n");
+ fw_notify("could not construct local self ID\n");
return;
}
}
@@ -2188,10 +2164,7 @@ static int configure_1394a_enhancements(struct fw_ohci *ohci)
static int probe_tsb41ba3d(struct fw_ohci *ohci)
{
- - int reg;
- - int i;
- - int vendor_id;
- - int product_id;
+ int reg, i, vendor_id, product_id;
reg = read_phy_reg(ohci, 2);
if (reg < 0)
@@ -2214,7 +2187,7 @@ static int probe_tsb41ba3d(struct fw_ohci *ohci)
}
if ((vendor_id == TSB41BA3D_VID) &&
- - (product_id == TSB41BA3D_PID))
+ (product_id == TSB41BA3D_PID))
return 1;
}
return 0;
@@ -2226,7 +2199,7 @@ static int ohci_enable(struct fw_card *card,
struct fw_ohci *ohci = fw_ohci(card);
struct pci_dev *dev = to_pci_dev(card->device);
u32 lps, seconds, version, irqs;
- - int i, ret, tsb41ba3d_found;
+ int i, ret;
if (software_reset(ohci)) {
fw_error("Failed to reset ohci card.\n");
@@ -2258,14 +2231,13 @@ static int ohci_enable(struct fw_card *card,
}
if (ohci->quirks & QUIRK_TI_SLLZ059) {
- - tsb41ba3d_found = probe_tsb41ba3d(ohci);
- - if (tsb41ba3d_found < 0)
- - return tsb41ba3d_found;
- - if (!tsb41ba3d_found) {
- - fw_notify("No TSB41BA3D found, "
- - "resetting QUIRK_TI_SLLZ059\n");
+ ret = probe_tsb41ba3d(ohci);
+ if (ret < 0)
+ return ret;
+ if (ret)
+ fw_notify("local TSB41BA3D phy\n");
+ else
ohci->quirks &= ~QUIRK_TI_SLLZ059;
- - }
}
reg_write(ohci, OHCI1394_HCControlClear,
commit 25935ebebd861182ac58ecea67718bb6a617c7cb
Author: Stephan Gatzka <stephan@gatzka.org>
Date: Mon Sep 12 22:23:53 2011 +0200
firewire: ohci: Add support for TSB41BA3D phy
This patch implements a work around for the Texas Instruments PHY
TSB41BA3D. This phy has a bug at least in combination with the TI LLCs
TSB82AA2B and TSB12LV26. The selfid coming from the locally connected
phy is not propagated into the selfid buffer of the OHCI (see
http://www.ti.com/litv/pdf/sllz059 for details). The main idea is to
construct the selfid ourselves.
Signed-off-by: Stephan Gatzka <stephan@gatzka.org>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index c026f46..b983581 100644
- --- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -264,6 +264,8 @@ static char ohci_driver_name[] = KBUILD_MODNAME;
#define PCI_DEVICE_ID_AGERE_FW643 0x5901
#define PCI_DEVICE_ID_JMICRON_JMB38X_FW 0x2380
#define PCI_DEVICE_ID_TI_TSB12LV22 0x8009
+#define PCI_DEVICE_ID_TI_TSB12LV26 0x8020
+#define PCI_DEVICE_ID_TI_TSB82AA2 0x8025
#define PCI_VENDOR_ID_PINNACLE_SYSTEMS 0x11bd
#define QUIRK_CYCLE_TIMER 1
@@ -271,6 +273,7 @@ static char ohci_driver_name[] = KBUILD_MODNAME;
#define QUIRK_BE_HEADERS 4
#define QUIRK_NO_1394A 8
#define QUIRK_NO_MSI 16
+#define QUIRK_TI_SLLZ059 32
/* In case of multiple matches in ohci_quirks[], only the first one is used. */
static const struct {
@@ -300,6 +303,12 @@ static const struct {
{PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TSB12LV22, PCI_ANY_ID,
QUIRK_CYCLE_TIMER | QUIRK_RESET_PACKET | QUIRK_NO_1394A},
+ {PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TSB12LV26, PCI_ANY_ID,
+ QUIRK_RESET_PACKET | QUIRK_TI_SLLZ059},
+
+ {PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TSB82AA2, PCI_ANY_ID,
+ QUIRK_RESET_PACKET | QUIRK_TI_SLLZ059},
+
{PCI_VENDOR_ID_TI, PCI_ANY_ID, PCI_ANY_ID,
QUIRK_RESET_PACKET},
@@ -316,6 +325,7 @@ MODULE_PARM_DESC(quirks, "Chip quirks (default = 0"
", AR/selfID endianess = " __stringify(QUIRK_BE_HEADERS)
", no 1394a enhancements = " __stringify(QUIRK_NO_1394A)
", disable MSI = " __stringify(QUIRK_NO_MSI)
+ ", workaround for TI SLLZ059 errata = " __stringify(QUIRK_TI_SLLZ059)
")");
#define OHCI_PARAM_DEBUG_AT_AR 1
@@ -1714,6 +1724,114 @@ static u32 update_bus_time(struct fw_ohci *ohci)
return ohci->bus_time | cycle_time_seconds;
}
+static int get_status_for_port(struct fw_ohci *ohci, int port_index)
+{
+ int reg;
+
+ mutex_lock(&ohci->phy_reg_mutex);
+ reg = write_phy_reg(ohci, 7, port_index);
+ mutex_unlock(&ohci->phy_reg_mutex);
+ if (reg < 0)
+ return reg;
+
+ mutex_lock(&ohci->phy_reg_mutex);
+ reg = read_phy_reg(ohci, 8);
+ mutex_unlock(&ohci->phy_reg_mutex);
+ if (reg < 0)
+ return reg;
+
+ switch (reg & 0x0f) {
+ case 0x06:
+ return 2; /* is child node (connected to parent node) */
+ case 0x0e:
+ return 3; /* is parent node (connected to child node) */
+ }
+ return 1; /* not connected */
+}
+
+static int get_self_id_pos(struct fw_ohci *ohci, u32 self_id,
+ int self_id_count)
+{
+ int i;
+ u32 entry;
+ for (i = 0; i < self_id_count; i++) {
+ entry = ohci->self_id_buffer[i];
+ if ((self_id & 0xff000000) == (entry & 0xff000000))
+ return -1;
+ if ((self_id & 0xff000000) < (entry & 0xff000000))
+ return i;
+ }
+ return i;
+}
+
+/*
+ * This function implements a work around for the Texas Instruments PHY
+ * TSB41BA3D. This phy has a bug at least in combination with the TI
+ * LLCs TSB82AA2B and TSB12LV26. The selfid coming from the locally
+ * connected phy is not propagated into the selfid buffer of the OHCI
+ * (see http://www.ti.com/litv/pdf/sllz059 for details).
+ * The main idea is to construct the selfid ourselves.
+ */
+
+static int find_and_insert_self_id(struct fw_ohci *ohci, int self_id_count)
+{
+ int reg;
+ int i;
+ int pos;
+ int status;
+ u32 self_id;
+
+/*
+ * preset bits in self_id
+ *
+ * link active: 0b1
+ * speed: 0b11
+ * bridge: 0b00
+ * contender: 0b1
+ * initiated reset: 0b0
+ * more packets: 0b0
+ */
+ self_id = 0x8040C800;
+
+ reg = reg_read(ohci, OHCI1394_NodeID);
+ if (!(reg & OHCI1394_NodeID_idValid)) {
+ fw_notify("node ID not valid, new bus reset in progress\n");
+ return -EBUSY;
+ }
+ self_id |= ((reg & 0x3f) << 24); /* phy ID */
+
+ mutex_lock(&ohci->phy_reg_mutex);
+ reg = read_phy_reg(ohci, 4);
+ mutex_unlock(&ohci->phy_reg_mutex);
+ if (reg < 0)
+ return reg;
+ self_id |= ((reg & 0x07) << 8); /* power class */
+
+ mutex_lock(&ohci->phy_reg_mutex);
+ reg = read_phy_reg(ohci, 1);
+ mutex_unlock(&ohci->phy_reg_mutex);
+ if (reg < 0)
+ return reg;
+ self_id |= ((reg & 0x3f) << 16); /* gap count */
+
+ for (i = 0; i < 3; i++) {
+ status = get_status_for_port(ohci, i);
+ if (status < 0)
+ return status;
+ self_id |= ((status & 0x3) << (6 - (i * 2)));
+ }
+
+ pos = get_self_id_pos(ohci, self_id, self_id_count);
+ if (pos >= 0) {
+ memmove(&(ohci->self_id_buffer[pos+1]),
+ &(ohci->self_id_buffer[pos]),
+ (self_id_count - pos) * sizeof(*ohci->self_id_buffer));
+ ohci->self_id_buffer[pos] = self_id;
+ self_id_count++;
+ }
+ return self_id_count;
+}
+
static void bus_reset_work(struct work_struct *work)
{
struct fw_ohci *ohci =
@@ -1755,10 +1873,12 @@ static void bus_reset_work(struct work_struct *work)
* bit extra to get the actual number of self IDs.
*/
self_id_count = (reg >> 3) & 0xff;
- - if (self_id_count == 0 || self_id_count > 252) {
+
+ if (self_id_count > 252) {
fw_notify("inconsistent self IDs\n");
return;
}
+
generation = (cond_le32_to_cpu(ohci->self_id_cpu[0]) >> 16) & 0xff;
rmb();
@@ -1770,6 +1890,19 @@ static void bus_reset_work(struct work_struct *work)
ohci->self_id_buffer[j] =
cond_le32_to_cpu(ohci->self_id_cpu[i]);
}
+
+ if (ohci->quirks & QUIRK_TI_SLLZ059) {
+ self_id_count = find_and_insert_self_id(ohci, self_id_count);
+ if (self_id_count < 0) {
+ fw_notify("could not construct local self IDs\n");
+ return;
+ }
+ }
+
+ if (self_id_count == 0) {
+ fw_notify("inconsistent self IDs\n");
+ return;
+ }
rmb();
/*
@@ -2050,13 +2183,50 @@ static int configure_1394a_enhancements(struct fw_ohci *ohci)
return 0;
}
+#define TSB41BA3D_VID 0x00080028
+#define TSB41BA3D_PID 0x00833005
+
+static int probe_tsb41ba3d(struct fw_ohci *ohci)
+{
+ int reg;
+ int i;
+ int vendor_id;
+ int product_id;
+
+ reg = read_phy_reg(ohci, 2);
+ if (reg < 0)
+ return reg;
+
+ if ((reg & PHY_EXTENDED_REGISTERS) == PHY_EXTENDED_REGISTERS) {
+ vendor_id = 0;
+ for (i = 10; i < 13; i++) {
+ reg = read_paged_phy_reg(ohci, 1, i);
+ if (reg < 0)
+ return reg;
+ vendor_id = (vendor_id << 8) | reg;
+ }
+ product_id = 0;
+ for (i = 13; i < 16; i++) {
+ reg = read_paged_phy_reg(ohci, 1, i);
+ if (reg < 0)
+ return reg;
+ product_id = (product_id << 8) | reg;
+ }
+
+ if ((vendor_id == TSB41BA3D_VID) &&
+ (product_id == TSB41BA3D_PID))
+ return 1;
+ }
+ return 0;
+}
+
static int ohci_enable(struct fw_card *card,
const __be32 *config_rom, size_t length)
{
struct fw_ohci *ohci = fw_ohci(card);
struct pci_dev *dev = to_pci_dev(card->device);
u32 lps, seconds, version, irqs;
- - int i, ret;
+ int i, ret, tsb41ba3d_found;
if (software_reset(ohci)) {
fw_error("Failed to reset ohci card.\n");
@@ -2087,6 +2257,17 @@ static int ohci_enable(struct fw_card *card,
return -EIO;
}
+ if (ohci->quirks & QUIRK_TI_SLLZ059) {
+ tsb41ba3d_found = probe_tsb41ba3d(ohci);
+ if (tsb41ba3d_found < 0)
+ return tsb41ba3d_found;
+ if (!tsb41ba3d_found) {
+ fw_notify("No TSB41BA3D found, "
+ "resetting QUIRK_TI_SLLZ059\n");
+ ohci->quirks &= ~QUIRK_TI_SLLZ059;
+ }
+ }
+
reg_write(ohci, OHCI1394_HCControlClear,
OHCI1394_HCControl_noByteSwapData);
commit 2d7a36e23300d268599f6eae4093643d22fbb356
Author: Stephan Gatzka <stephan@gatzka.org>
Date: Mon Jul 25 22:16:24 2011 +0200
firewire: ohci: Move code from the bus reset tasklet into a workqueue
Code inside bus_reset_work may now sleep. This is a prerequisite to
support a phy from Texas Instruments cleanly. The patch to support this
phy will be submitted later.
Signed-off-by: Stephan Gatzka <stephan@gatzka.org>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index fd7170a..c026f46 100644
- --- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -42,6 +42,7 @@
#include <linux/string.h>
#include <linux/time.h>
#include <linux/vmalloc.h>
+#include <linux/workqueue.h>
#include <asm/byteorder.h>
#include <asm/page.h>
@@ -226,7 +227,7 @@ struct fw_ohci {
__le32 *self_id_cpu;
dma_addr_t self_id_bus;
- - struct tasklet_struct bus_reset_tasklet;
+ struct work_struct bus_reset_work;
u32 self_id_buffer[512];
};
@@ -859,7 +860,7 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer)
*
* Alas some chips sometimes emit bus reset packets with a
* wrong generation. We set the correct generation for these
- - * at a slightly incorrect time (in bus_reset_tasklet).
+ * at a slightly incorrect time (in bus_reset_work).
*/
if (evt == OHCI1394_evt_bus_reset) {
if (!(ohci->quirks & QUIRK_RESET_PACKET))
@@ -1713,9 +1714,10 @@ static u32 update_bus_time(struct fw_ohci *ohci)
return ohci->bus_time | cycle_time_seconds;
}
- -static void bus_reset_tasklet(unsigned long data)
+static void bus_reset_work(struct work_struct *work)
{
- - struct fw_ohci *ohci = (struct fw_ohci *)data;
+ struct fw_ohci *ohci =
+ container_of(work, struct fw_ohci, bus_reset_work);
int self_id_count, i, j, reg;
int generation, new_generation;
unsigned long flags;
@@ -1887,7 +1889,7 @@ static irqreturn_t irq_handler(int irq, void *data)
log_irqs(event);
if (event & OHCI1394_selfIDComplete)
- - tasklet_schedule(&ohci->bus_reset_tasklet);
+ queue_work(fw_workqueue, &ohci->bus_reset_work);
if (event & OHCI1394_RQPkt)
tasklet_schedule(&ohci->ar_request_ctx.tasklet);
@@ -2260,7 +2262,7 @@ static int ohci_set_config_rom(struct fw_card *card,
* then set up the real values for the two registers.
*
* We use ohci->lock to avoid racing with the code that sets
- - * ohci->next_config_rom to NULL (see bus_reset_tasklet).
+ * ohci->next_config_rom to NULL (see bus_reset_work).
*/
next_config_rom =
@@ -3239,8 +3241,7 @@ static int __devinit pci_probe(struct pci_dev *dev,
spin_lock_init(&ohci->lock);
mutex_init(&ohci->phy_reg_mutex);
- - tasklet_init(&ohci->bus_reset_tasklet,
- - bus_reset_tasklet, (unsigned long)ohci);
+ INIT_WORK(&ohci->bus_reset_work, bus_reset_work);
err = pci_request_region(dev, 0, ohci_driver_name);
if (err) {
@@ -3382,6 +3383,7 @@ static void pci_remove(struct pci_dev *dev)
ohci = pci_get_drvdata(dev);
reg_write(ohci, OHCI1394_IntMaskClear, ~0);
flush_writes(ohci);
+ cancel_work_sync(&ohci->bus_reset_work);
fw_core_remove_card(&ohci->card);
/*
commit 32ce38f40337cf4a805552e494354d961587c838
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date: Sat Aug 27 15:35:23 2011 +0200
firewire: sbp2: fold two functions into one
sbp2_release_target() is folded into its primary user, sbp2_remove().
The only other caller, a failure path in sbp2_probe(), now uses
sbp2_remove(). This adds unnecessary cancel_delayed_work_sync() calls
to that failure path but results in less code and text.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
index 09b79e9..8a8047d 100644
- --- a/drivers/firewire/sbp2.c
+++ b/drivers/firewire/sbp2.c
@@ -1110,7 +1110,7 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model,
}
static struct scsi_host_template scsi_driver_template;
- -static void sbp2_release_target(struct sbp2_target *tgt);
+static int sbp2_remove(struct device *dev);
static int sbp2_probe(struct device *dev)
{
@@ -1153,7 +1153,7 @@ static int sbp2_probe(struct device *dev)
if (sbp2_scan_unit_dir(tgt, unit->directory, &model,
&firmware_revision) < 0)
- - goto fail_release_target;
+ goto fail_remove;
sbp2_clamp_management_orb_timeout(tgt);
sbp2_init_workarounds(tgt, model, firmware_revision);
@@ -1173,8 +1173,8 @@ static int sbp2_probe(struct device *dev)
return 0;
- - fail_release_target:
- - sbp2_release_target(tgt);
+ fail_remove:
+ sbp2_remove(dev);
return -ENOMEM;
fail_shost_put:
@@ -1200,18 +1200,21 @@ static void sbp2_update(struct fw_unit *unit)
}
}
- -static void sbp2_release_target(struct sbp2_target *tgt)
+static int sbp2_remove(struct device *dev)
{
+ struct fw_unit *unit = fw_unit(dev);
+ struct fw_device *device = fw_parent_device(unit);
+ struct sbp2_target *tgt = dev_get_drvdata(&unit->device);
struct sbp2_logical_unit *lu, *next;
struct Scsi_Host *shost =
container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
struct scsi_device *sdev;
- - struct fw_device *device = target_device(tgt);
/* prevent deadlocks */
sbp2_unblock(tgt);
list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
+ cancel_delayed_work_sync(&lu->work);
sdev = scsi_device_lookup(shost, 0, 0, sbp2_lun2int(lu->lun));
if (sdev) {
scsi_remove_device(sdev);
@@ -1239,19 +1242,6 @@ static void sbp2_release_target(struct sbp2_target *tgt)
fw_notify("released %s, target %d:0:0\n", tgt->bus_id, shost->host_no);
scsi_host_put(shost);
- -}
- -
- -static int sbp2_remove(struct device *dev)
- -{
- - struct fw_unit *unit = fw_unit(dev);
- - struct sbp2_target *tgt = dev_get_drvdata(&unit->device);
- - struct sbp2_logical_unit *lu;
- -
- - list_for_each_entry(lu, &tgt->lu_list, link)
- - cancel_delayed_work_sync(&lu->work);
- -
- - sbp2_release_target(tgt);
- -
return 0;
}
commit b2af07b6844aade3a6d69511625bef2b1cb609cc
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date: Sat Aug 27 15:34:32 2011 +0200
firewire: sbp2: move some code to more sensible places
Implement sbp2_queue_work(), which is now a very simple accessor to one
of the struct sbp2_logical_unit members, right after the definition of
struct sbp2_logical_unit.
Put the sbp2_reconnect() implementation right after the sbp2_login()
implementation. They are both part of the SBP-2 access protocol.
Implement the driver methods sbp2_probe(), spp2_update(), sbp2_remove()
in this order, reflecting the lifetime of an SBP-2 target.
Place the sbp2_release_target() implementation right next to
sbp2_remove() which is its primary user, and after sbp2_probe() which is
the counterpart to sbp2_release_target().
There are no changes to the implementations here, or at least not meant
to be.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
index a2715b2..09b79e9 100644
- --- a/drivers/firewire/sbp2.c
+++ b/drivers/firewire/sbp2.c
@@ -154,6 +154,11 @@ struct sbp2_logical_unit {
bool blocked;
};
+static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay)
+{
+ queue_delayed_work(fw_workqueue, &lu->work, delay);
+}
+
/*
* We create one struct sbp2_target per IEEE 1212 Unit Directory
* and one struct Scsi_Host per sbp2_target.
@@ -771,52 +776,6 @@ static int sbp2_lun2int(u16 lun)
return scsilun_to_int(&eight_bytes_lun);
}
- -static void sbp2_release_target(struct sbp2_target *tgt)
- -{
- - struct sbp2_logical_unit *lu, *next;
- - struct Scsi_Host *shost =
- - container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
- - struct scsi_device *sdev;
- - struct fw_device *device = target_device(tgt);
- -
- - /* prevent deadlocks */
- - sbp2_unblock(tgt);
- -
- - list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
- - sdev = scsi_device_lookup(shost, 0, 0, sbp2_lun2int(lu->lun));
- - if (sdev) {
- - scsi_remove_device(sdev);
- - scsi_device_put(sdev);
- - }
- - if (lu->login_id != INVALID_LOGIN_ID) {
- - int generation, node_id;
- - /*
- - * tgt->node_id may be obsolete here if we failed
- - * during initial login or after a bus reset where
- - * the topology changed.
- - */
- - generation = device->generation;
- - smp_rmb(); /* node_id vs. generation */
- - node_id = device->node_id;
- - sbp2_send_management_orb(lu, node_id, generation,
- - SBP2_LOGOUT_REQUEST,
- - lu->login_id, NULL);
- - }
- - fw_core_remove_address_handler(&lu->address_handler);
- - list_del(&lu->link);
- - kfree(lu);
- - }
- - scsi_remove_host(shost);
- - fw_notify("released %s, target %d:0:0\n", tgt->bus_id, shost->host_no);
- -
- - scsi_host_put(shost);
- -}
- -
- -static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay)
- -{
- - queue_delayed_work(fw_workqueue, &lu->work, delay);
- -}
- -
/*
* Write retransmit retry values into the BUSY_TIMEOUT register.
* - The single-phase retry protocol is supported by all SBP-2 devices, but the
@@ -955,6 +914,57 @@ static void sbp2_login(struct work_struct *work)
PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
}
+static void sbp2_reconnect(struct work_struct *work)
+{
+ struct sbp2_logical_unit *lu =
+ container_of(work, struct sbp2_logical_unit, work.work);
+ struct sbp2_target *tgt = lu->tgt;
+ struct fw_device *device = target_device(tgt);
+ int generation, node_id, local_node_id;
+
+ if (fw_device_is_shutdown(device))
+ return;
+
+ generation = device->generation;
+ smp_rmb(); /* node IDs must not be older than generation */
+ node_id = device->node_id;
+ local_node_id = device->card->node_id;
+
+ if (sbp2_send_management_orb(lu, node_id, generation,
+ SBP2_RECONNECT_REQUEST,
+ lu->login_id, NULL) < 0) {
+ /*
+ * If reconnect was impossible even though we are in the
+ * current generation, fall back and try to log in again.
+ *
+ * We could check for "Function rejected" status, but
+ * looking at the bus generation as simpler and more general.
+ */
+ smp_rmb(); /* get current card generation */
+ if (generation == device->card->generation ||
+ lu->retries++ >= 5) {
+ fw_error("%s: failed to reconnect\n", tgt->bus_id);
+ lu->retries = 0;
+ PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
+ }
+ sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
+
+ return;
+ }
+
+ tgt->node_id = node_id;
+ tgt->address_high = local_node_id << 16;
+ smp_wmb(); /* node IDs must not be older than generation */
+ lu->generation = generation;
+
+ fw_notify("%s: reconnected to LUN %04x (%d retries)\n",
+ tgt->bus_id, lu->lun, lu->retries);
+
+ sbp2_agent_reset(lu);
+ sbp2_cancel_orbs(lu);
+ sbp2_conditionally_unblock(lu);
+}
+
static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
{
struct sbp2_logical_unit *lu;
@@ -1100,6 +1110,7 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model,
}
static struct scsi_host_template scsi_driver_template;
+static void sbp2_release_target(struct sbp2_target *tgt);
static int sbp2_probe(struct device *dev)
{
@@ -1171,87 +1182,77 @@ static int sbp2_probe(struct device *dev)
return -ENOMEM;
}
- -static int sbp2_remove(struct device *dev)
+static void sbp2_update(struct fw_unit *unit)
{
- - struct fw_unit *unit = fw_unit(dev);
struct sbp2_target *tgt = dev_get_drvdata(&unit->device);
struct sbp2_logical_unit *lu;
- - list_for_each_entry(lu, &tgt->lu_list, link)
- - cancel_delayed_work_sync(&lu->work);
- -
- - sbp2_release_target(tgt);
+ fw_device_enable_phys_dma(fw_parent_device(unit));
- - return 0;
+ /*
+ * Fw-core serializes sbp2_update() against sbp2_remove().
+ * Iteration over tgt->lu_list is therefore safe here.
+ */
+ list_for_each_entry(lu, &tgt->lu_list, link) {
+ sbp2_conditionally_block(lu);
+ lu->retries = 0;
+ sbp2_queue_work(lu, 0);
+ }
}
- -static void sbp2_reconnect(struct work_struct *work)
+static void sbp2_release_target(struct sbp2_target *tgt)
{
- - struct sbp2_logical_unit *lu =
- - container_of(work, struct sbp2_logical_unit, work.work);
- - struct sbp2_target *tgt = lu->tgt;
+ struct sbp2_logical_unit *lu, *next;
+ struct Scsi_Host *shost =
+ container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
+ struct scsi_device *sdev;
struct fw_device *device = target_device(tgt);
- - int generation, node_id, local_node_id;
- -
- - if (fw_device_is_shutdown(device))
- - return;
- - generation = device->generation;
- - smp_rmb(); /* node IDs must not be older than generation */
- - node_id = device->node_id;
- - local_node_id = device->card->node_id;
+ /* prevent deadlocks */
+ sbp2_unblock(tgt);
- - if (sbp2_send_management_orb(lu, node_id, generation,
- - SBP2_RECONNECT_REQUEST,
- - lu->login_id, NULL) < 0) {
- - /*
- - * If reconnect was impossible even though we are in the
- - * current generation, fall back and try to log in again.
- - *
- - * We could check for "Function rejected" status, but
- - * looking at the bus generation as simpler and more general.
- - */
- - smp_rmb(); /* get current card generation */
- - if (generation == device->card->generation ||
- - lu->retries++ >= 5) {
- - fw_error("%s: failed to reconnect\n", tgt->bus_id);
- - lu->retries = 0;
- - PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
+ list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
+ sdev = scsi_device_lookup(shost, 0, 0, sbp2_lun2int(lu->lun));
+ if (sdev) {
+ scsi_remove_device(sdev);
+ scsi_device_put(sdev);
}
- - sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
- -
- - return;
+ if (lu->login_id != INVALID_LOGIN_ID) {
+ int generation, node_id;
+ /*
+ * tgt->node_id may be obsolete here if we failed
+ * during initial login or after a bus reset where
+ * the topology changed.
+ */
+ generation = device->generation;
+ smp_rmb(); /* node_id vs. generation */
+ node_id = device->node_id;
+ sbp2_send_management_orb(lu, node_id, generation,
+ SBP2_LOGOUT_REQUEST,
+ lu->login_id, NULL);
+ }
+ fw_core_remove_address_handler(&lu->address_handler);
+ list_del(&lu->link);
+ kfree(lu);
}
+ scsi_remove_host(shost);
+ fw_notify("released %s, target %d:0:0\n", tgt->bus_id, shost->host_no);
- - tgt->node_id = node_id;
- - tgt->address_high = local_node_id << 16;
- - smp_wmb(); /* node IDs must not be older than generation */
- - lu->generation = generation;
- -
- - fw_notify("%s: reconnected to LUN %04x (%d retries)\n",
- - tgt->bus_id, lu->lun, lu->retries);
- -
- - sbp2_agent_reset(lu);
- - sbp2_cancel_orbs(lu);
- - sbp2_conditionally_unblock(lu);
+ scsi_host_put(shost);
}
- -static void sbp2_update(struct fw_unit *unit)
+static int sbp2_remove(struct device *dev)
{
+ struct fw_unit *unit = fw_unit(dev);
struct sbp2_target *tgt = dev_get_drvdata(&unit->device);
struct sbp2_logical_unit *lu;
- - fw_device_enable_phys_dma(fw_parent_device(unit));
+ list_for_each_entry(lu, &tgt->lu_list, link)
+ cancel_delayed_work_sync(&lu->work);
- - /*
- - * Fw-core serializes sbp2_update() against sbp2_remove().
- - * Iteration over tgt->lu_list is therefore safe here.
- - */
- - list_for_each_entry(lu, &tgt->lu_list, link) {
- - sbp2_conditionally_block(lu);
- - lu->retries = 0;
- - sbp2_queue_work(lu, 0);
- - }
+ sbp2_release_target(tgt);
+
+ return 0;
}
#define SBP2_UNIT_SPEC_ID_ENTRY 0x0000609e
commit 6ff8147d075da2e1eb69fab2ee75104c59f573e0
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date: Sat Aug 27 15:33:34 2011 +0200
firewire: sbp2: remove obsolete reference counting
Since commit 0278ccd9d53e07c4e699432b2fed9de6c56f506c "firewire: sbp2:
fix panic after rmmod with slow targets", the lifetime of an sbp2_target
instance does no longer extent past the return of sbp2_remove().
Therefore it is no longer necessary to call fw_unit_get/put() and
fw_device_get/put() in sbp2_probe/remove().
Furthermore, said commit also ensures that lu->work is not going to be
executed or requeued at a time when the sbp2_target is no longer in use.
Hence there is no need for sbp2_target reference counting for lu->work.
Other concurrent contexts:
- Processes which access the sysfs of the SCSI host device or of one
of its subdevices are safe because these interfaces are all removed
by scsi_remove_device/host() in sbp2_release_target().
- SBP-2 command block ORB transactions are finished when
scsi_remove_device() in sbp2_release_target() returns.
- SBP-2 management ORB transactions are finished when
cancel_delayed_work_sync(&lu->work) before sbp2_release_target()
returns.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
index 17cef86..a2715b2 100644
- --- a/drivers/firewire/sbp2.c
+++ b/drivers/firewire/sbp2.c
@@ -159,7 +159,6 @@ struct sbp2_logical_unit {
* and one struct Scsi_Host per sbp2_target.
*/
struct sbp2_target {
- - struct kref kref;
struct fw_unit *unit;
const char *bus_id;
struct list_head lu_list;
@@ -772,9 +771,8 @@ static int sbp2_lun2int(u16 lun)
return scsilun_to_int(&eight_bytes_lun);
}
- -static void sbp2_release_target(struct kref *kref)
+static void sbp2_release_target(struct sbp2_target *tgt)
{
- - struct sbp2_target *tgt = container_of(kref, struct sbp2_target, kref);
struct sbp2_logical_unit *lu, *next;
struct Scsi_Host *shost =
container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
@@ -811,30 +809,12 @@ static void sbp2_release_target(struct kref *kref)
scsi_remove_host(shost);
fw_notify("released %s, target %d:0:0\n", tgt->bus_id, shost->host_no);
- - fw_unit_put(tgt->unit);
scsi_host_put(shost);
- - fw_device_put(device);
- -}
- -
- -static void sbp2_target_get(struct sbp2_target *tgt)
- -{
- - kref_get(&tgt->kref);
- -}
- -
- -static void sbp2_target_put(struct sbp2_target *tgt)
- -{
- - kref_put(&tgt->kref, sbp2_release_target);
}
- -/*
- - * Always get the target's kref when scheduling work on one its units.
- - * Each workqueue job is responsible to call sbp2_target_put() upon return.
- - */
static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay)
{
- - sbp2_target_get(lu->tgt);
- - if (!queue_delayed_work(fw_workqueue, &lu->work, delay))
- - sbp2_target_put(lu->tgt);
+ queue_delayed_work(fw_workqueue, &lu->work, delay);
}
/*
@@ -877,7 +857,7 @@ static void sbp2_login(struct work_struct *work)
int generation, node_id, local_node_id;
if (fw_device_is_shutdown(device))
- - goto out;
+ return;
generation = device->generation;
smp_rmb(); /* node IDs must not be older than generation */
@@ -899,7 +879,7 @@ static void sbp2_login(struct work_struct *work)
/* Let any waiting I/O fail from now on. */
sbp2_unblock(lu->tgt);
}
- - goto out;
+ return;
}
tgt->node_id = node_id;
@@ -925,7 +905,8 @@ static void sbp2_login(struct work_struct *work)
if (lu->has_sdev) {
sbp2_cancel_orbs(lu);
sbp2_conditionally_unblock(lu);
- - goto out;
+
+ return;
}
if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
@@ -957,7 +938,8 @@ static void sbp2_login(struct work_struct *work)
lu->has_sdev = true;
scsi_device_put(sdev);
sbp2_allow_block(lu);
- - goto out;
+
+ return;
out_logout_login:
smp_rmb(); /* generation may have changed */
@@ -971,8 +953,6 @@ static void sbp2_login(struct work_struct *work)
* lu->work already. Reset the work from reconnect to login.
*/
PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
- - out:
- - sbp2_target_put(tgt);
}
static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
@@ -1141,7 +1121,6 @@ static int sbp2_probe(struct device *dev)
tgt = (struct sbp2_target *)shost->hostdata;
dev_set_drvdata(&unit->device, tgt);
tgt->unit = unit;
- - kref_init(&tgt->kref);
INIT_LIST_HEAD(&tgt->lu_list);
tgt->bus_id = dev_name(&unit->device);
tgt->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4];
@@ -1154,9 +1133,6 @@ static int sbp2_probe(struct device *dev)
if (scsi_add_host(shost, &unit->device) < 0)
goto fail_shost_put;
- - fw_device_get(device);
- - fw_unit_get(unit);
- -
/* implicit directory ID */
tgt->directory_id = ((unit->directory - device->config_rom) * 4
+ CSR_CONFIG_ROM) & 0xffffff;
@@ -1166,7 +1142,7 @@ static int sbp2_probe(struct device *dev)
if (sbp2_scan_unit_dir(tgt, unit->directory, &model,
&firmware_revision) < 0)
- - goto fail_tgt_put;
+ goto fail_release_target;
sbp2_clamp_management_orb_timeout(tgt);
sbp2_init_workarounds(tgt, model, firmware_revision);
@@ -1183,10 +1159,11 @@ static int sbp2_probe(struct device *dev)
/* Do the login in a workqueue so we can easily reschedule retries. */
list_for_each_entry(lu, &tgt->lu_list, link)
sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
+
return 0;
- - fail_tgt_put:
- - sbp2_target_put(tgt);
+ fail_release_target:
+ sbp2_release_target(tgt);
return -ENOMEM;
fail_shost_put:
@@ -1203,7 +1180,8 @@ static int sbp2_remove(struct device *dev)
list_for_each_entry(lu, &tgt->lu_list, link)
cancel_delayed_work_sync(&lu->work);
- - sbp2_target_put(tgt);
+ sbp2_release_target(tgt);
+
return 0;
}
@@ -1216,7 +1194,7 @@ static void sbp2_reconnect(struct work_struct *work)
int generation, node_id, local_node_id;
if (fw_device_is_shutdown(device))
- - goto out;
+ return;
generation = device->generation;
smp_rmb(); /* node IDs must not be older than generation */
@@ -1241,7 +1219,8 @@ static void sbp2_reconnect(struct work_struct *work)
PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
}
sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
- - goto out;
+
+ return;
}
tgt->node_id = node_id;
@@ -1255,8 +1234,6 @@ static void sbp2_reconnect(struct work_struct *work)
sbp2_agent_reset(lu);
sbp2_cancel_orbs(lu);
sbp2_conditionally_unblock(lu);
- - out:
- - sbp2_target_put(tgt);
}
static void sbp2_update(struct fw_unit *unit)
- --
Stefan Richter
- -=====-==-== =-=- =====
http://arcgraph.de/sr/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (GNU/Linux)
iQIcBAEBAgAGBQJOrty8AAoJEHnzb7JUXXnQECMP/2+h8RGRPQP2d4zgAWQJ6lix
kbUs8gyZVh7k6w3mLct5Tb1Hbwi7Fy/ARorRFgoMiduRdi4gaxkN22H7OH0E6RPY
i4dbBUBIZouPMtu4+qvgpbdDw6kp56xdMQLwhpy0QobzFTrE9qbxnMjOUuKZzDAw
+6l/Mshx9VwskEypSeSG5SLGd1kS5AtPeKYX3eGZ+7TkfNiLmk3KH3vsL46NEKy1
3dSXeyMPAhBhfg4PtD6oRYIOwQBbB5/3y8JmINSEuOTmwulvx6HC/YnkSpodyG1d
NZe746m3yCEEU8L3/ALdsYkOdHdPaQSRQbMk4bJmKRkf5kIfaX2KW3mWajY+FjS/
4ucBBuwItYOVFQSasX4E8Oeimd8CzbREU+iuDUZ3T+iiVRIbSJXoDXgyQdbCdCb2
XAV4gOHhHbEKOmNLzoqPPIo5h0YMWbQNvIEx23HeTA5xV2BFB67/kF8RjCJFsrvK
8kWBAz4AXfHS6+Su7o6iX/CZvUJP2DEC8qTIVTYriz5ym96zA4+cLU8ZzjX/Vcia
ug9yVBzNn0VijH1w1E8msLiae5QlAbF9Ls5KLY9XlLkTOmgHQQR73eYvZqZXdZti
aCErVdSw37GIRUgSLDQuAAfpayspZT80ILuScmNreWL/opfzJ3kfoerzBEutlS9N
1nQaTkYeanlqLUYFxsrp
=UNzK
-----END PGP SIGNATURE-----
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply
* [PATCH] drm: serialize access to list of debugfs files
From: Marcin Slusarz @ 2011-10-31 17:33 UTC (permalink / raw)
To: Daniel Vetter; +Cc: nouveau, dri-devel
In-Reply-To: <20111031170000.GA3415@joi.lan>
Nouveau, when configured with debugfs, creates debugfs files for every
channel, so structure holding list of files needs to be protected from
simultaneous changes by multiple threads.
Without this patch it's possible to hit kernel oops in
drm_debugfs_remove_files just by running a couple of xterms with
looped glxinfo.
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
---
drivers/gpu/drm/drm_debugfs.c | 12 +++++++++---
drivers/gpu/drm/i915/i915_debugfs.c | 5 ++++-
include/drm/drmP.h | 4 +++-
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
index 9d2668a..d34d4fc 100644
--- a/drivers/gpu/drm/drm_debugfs.c
+++ b/drivers/gpu/drm/drm_debugfs.c
@@ -120,7 +120,10 @@ int drm_debugfs_create_files(struct drm_info_list *files, int count,
tmp->minor = minor;
tmp->dent = ent;
tmp->info_ent = &files[i];
- list_add(&(tmp->list), &(minor->debugfs_nodes.list));
+
+ mutex_lock(&minor->debugfs_lock);
+ list_add(&tmp->list, &minor->debugfs_list);
+ mutex_unlock(&minor->debugfs_lock);
}
return 0;
@@ -148,7 +151,8 @@ int drm_debugfs_init(struct drm_minor *minor, int minor_id,
char name[64];
int ret;
- INIT_LIST_HEAD(&minor->debugfs_nodes.list);
+ INIT_LIST_HEAD(&minor->debugfs_list);
+ mutex_init(&minor->debugfs_lock);
sprintf(name, "%d", minor_id);
minor->debugfs_root = debugfs_create_dir(name, root);
if (!minor->debugfs_root) {
@@ -194,8 +198,9 @@ int drm_debugfs_remove_files(struct drm_info_list *files, int count,
struct drm_info_node *tmp;
int i;
+ mutex_lock(&minor->debugfs_lock);
for (i = 0; i < count; i++) {
- list_for_each_safe(pos, q, &minor->debugfs_nodes.list) {
+ list_for_each_safe(pos, q, &minor->debugfs_list) {
tmp = list_entry(pos, struct drm_info_node, list);
if (tmp->info_ent == &files[i]) {
debugfs_remove(tmp->dent);
@@ -204,6 +209,7 @@ int drm_debugfs_remove_files(struct drm_info_list *files, int count,
}
}
}
+ mutex_unlock(&minor->debugfs_lock);
return 0;
}
EXPORT_SYMBOL(drm_debugfs_remove_files);
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 3c395a5..fdad293 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1505,7 +1505,10 @@ drm_add_fake_info_node(struct drm_minor *minor,
node->minor = minor;
node->dent = ent;
node->info_ent = (void *) key;
- list_add(&node->list, &minor->debugfs_nodes.list);
+
+ mutex_lock(&minor->debugfs_lock);
+ list_add(&node->list, &minor->debugfs_list);
+ mutex_unlock(&minor->debugfs_lock);
return 0;
}
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 9b7c2bb..40e9ea3 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -989,7 +989,9 @@ struct drm_minor {
struct proc_dir_entry *proc_root; /**< proc directory entry */
struct drm_info_node proc_nodes;
struct dentry *debugfs_root;
- struct drm_info_node debugfs_nodes;
+
+ struct list_head debugfs_list;
+ struct mutex debugfs_lock; /* Protects debugfs_list. */
struct drm_master *master; /* currently active master for this node */
struct list_head master_list;
--
1.7.7
^ permalink raw reply related
* [git pull] FireWire updates post 3.1
From: Stefan Richter @ 2011-10-31 17:32 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel, linux1394-devel
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=US-ASCII, Size: 3142 bytes --]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Linus, please pull from the for-linus branch at
git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git for-linus
head sha1: a572e688cf5d99d2382016c7241ec37b523b0137
to receive the following updates for the IEEE 1394 (FireWire) subsystem.
We have got
- some janitorial work,
- support for the TI TSB41BA3D S400beta phy as local phy,
- bandwidth improvement of IPv4-over-1394 between 2%...30%
(depending on particular hardware; the gains are apparently at the
lower end of this range in case of typical PC hardware),
- a fix for certain topology scanning border cases,
- DMA mapping fixes.
The latter fix introduces false runtime warnings from the DMA debug
facility. Clemens posted a fix for that in
https://lkml.org/lkml/2011/10/15/104 and I will keep any eye on it
making its way into your tree eventually.
Everything has been in linux-next for a while, also during the
kernel.org downtime. Since most or all of the patches were not Cc'd
to LKML, I will post the full log and diff in a follow-up.
Clemens Ladisch (2):
firewire: ohci: work around selfID junk due to wrong gap count
firewire: ohci: fix isochronous DMA synchronization
Stefan Richter (6):
firewire: sbp2: remove obsolete reference counting
firewire: sbp2: move some code to more sensible places
firewire: sbp2: fold two functions into one
firewire: ohci: TSB41BA3D support tweaks
firewire: ohci: optimize TSB41BA3D detection
firewire: use clamp and min3 macros
Stephan Gatzka (3):
firewire: ohci: Move code from the bus reset tasklet into a workqueue
firewire: ohci: Add support for TSB41BA3D phy
firewire: net: Use posted writes
drivers/firewire/core-transaction.c | 4 +-
drivers/firewire/net.c | 15 +--
drivers/firewire/ohci.c | 255 ++++++++++++++++++++++++++++++++--
drivers/firewire/sbp2.c | 260 +++++++++++++++--------------------
4 files changed, 362 insertions(+), 172 deletions(-)
Thanks,
- --
Stefan Richter
- -=====-==-== =-=- =====
http://arcgraph.de/sr/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (GNU/Linux)
iQIcBAEBAgAGBQJOrtvYAAoJEHnzb7JUXXnQ4KQP/1MAWOaSdSNxQT4xQHL0rGxp
5Nkn9PGjnfov3mxPrLP3gYHNIsL2u17KMYjtv4IyqsjUCNt7E9DWe5o3xPGRtk8d
qhicn/9ZO++mEJzrfjcIFuslOT7kEK9AhoO0h7hwyaRpr3zWbM+Xc2HoofnIEavQ
l2qAix1CZ9dU4ISyQcopkVb30Du6y71p/ebjD4kBCgOPkdzF6TbPC3+iNcekFNWA
sUm0cDcN6perJz1gcVCf0M/dd3dvrCrEISlNGJOwSPmdrIYSb0xGZF54Kfil+OCT
5N7PDOFF21dCwu540qF1JyUVuPL/+up4rEb3ksQwHnDFckk88vr2IViU/pGFoeee
OIC+tMW6FgN/2WNgAKLZCL/QVeJfYg+VBR1Wc/0z9SMalV0cjfmRSwKLljAV9hSc
9xTxownXP4Aw5bBKHcuXAje4MlXdTnLp+L98GlMoJl2PzH/v+am/pKiN2IWBVJ7C
ZmEtOcimSzZwglj7JTuuPyZi7Uig9Su2kSgPjwkNK+HBeXVGlQAdd1FqAf/jdNRI
HyWb7F5NWbpLvSmT50TcGEJFRA3wk6k2zUqBqp5SjPlqxTmEla/96n5o24toqlq3
4dGRWVeVJOaINwJCW608KuOelFsB/7HGw2u4Wi5Im3cGxE2FZncJQ0t4FiPnet4e
MHzU84nZUZGaIwRZlBLn
=4lH3
-----END PGP SIGNATURE-----
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply
* Re: [PATCH 12/13] mtd/docg3: add ECC correction code
From: Mike Dunn @ 2011-10-31 17:32 UTC (permalink / raw)
To: Robert Jarzmik; +Cc: linux-mtd
In-Reply-To: <87vcr586a0.fsf@free.fr>
On 10/31/2011 09:39 AM, Robert Jarzmik wrote:
> Mike Dunn <mikedunn@newsguy.com> writes:
>
>> Another explanatory comment here...
>> /* undo last step in BCH alg (modulo mirroring not needed) */
> Is that the same as the function comment about bit reversing (the modulo
> mirroring part) ? If so, the function comment might not be clear enough. If not,
> could you explain a bit further please ?
>
>
No, the "modulo mirroring" is not the same as the bit reversal. See Ivan's
explanation here:
http://lists.infradead.org/pipermail/linux-mtd/2011-October/038060.html
Obviously the comment doesn't give much technical detail, but it points anyone
puzzled by the step in the right direction. I don't like cryptic steps that
give no explanation whatsoever. Just MHO.
Thanks,
Mike
^ permalink raw reply
* Re: [PATCH 05/13] mtd/docg3: add multiple floor support
From: Mike Dunn @ 2011-10-31 17:32 UTC (permalink / raw)
To: linux-mtd
In-Reply-To: <1319824292-11085-6-git-send-email-robert.jarzmik@free.fr>
On 10/28/2011 10:51 AM, Robert Jarzmik wrote:
> Add support for multiple floors, ie. cascaded docg3
> chips. There might be 4 docg3 chips cascaded, sharing the
> same address space, and providing up to 4 times the storage
> capacity of a unique chip.
>
> Each floor will be seen as an independant mtd device.
>
Do we know of any products that contain multiple doc devices in a cascaded
configuration?
Thanks,
Mike
^ permalink raw reply
* Re: Linux 3.1-rc9
From: Simon Kirby @ 2011-10-31 17:32 UTC (permalink / raw)
To: Thomas Gleixner, David Miller
Cc: Peter Zijlstra, Linus Torvalds, Linux Kernel Mailing List,
Dave Jones, Martin Schwidefsky, Ingo Molnar, Network Development
In-Reply-To: <20111025202049.GB25043@hostway.ca>
On Tue, Oct 25, 2011 at 01:20:49PM -0700, Simon Kirby wrote:
> On Mon, Oct 24, 2011 at 12:02:03PM -0700, Simon Kirby wrote:
>
> > Ok, hit the hang about 4 more times, but only this morning on a box with
> > a serial cable attached. Yay!
>
> Here's lockdep output from another box. This one looks a bit different.
One more, again a bit different. The last few lockups have looked like
this. Not sure why, but we're hitting this at a few a day now. Thomas,
this is without your patch, but as you said, that's right before a free
and should print a separate lockdep warning.
No "huh" lines until after the trace on this one. I'll move to 3.1 with
cherry-picked b0691c8e now.
Simon-
[104661.173798]
[104661.173801] =======================================================
[104661.179922] [ INFO: possible circular locking dependency detected ]
[104661.179922] 3.1.0-rc10-hw-lockdep+ #51
[104661.179922] -------------------------------------------------------
[104661.179922] watchdog.pl/29331 is trying to acquire lock:
[104661.179922] (slock-AF_INET/1){+.-.-.}, at: [<ffffffff81664887>] tcp_v4_rcv+0x867/0xc10
[104661.179922]
[104661.179922] but task is already holding lock:
[104661.179922] (slock-AF_INET){+.-.-.}, at: [<ffffffff81604540>] sk_clone+0x120/0x420
[104661.179922]
[104661.179922] which lock already depends on the new lock.
[104661.179922]
[104661.179922]
[104661.179922] the existing dependency chain (in reverse order) is:
[104661.239412]
[104661.239412] -> #1 (slock-AF_INET){+.-.-.}:
[104661.244767] [<ffffffff8109a7b9>] lock_acquire+0x109/0x140
[104661.244767] [<ffffffff816f55fc>] _raw_spin_lock+0x3c/0x50
[104661.244767] [<ffffffff81604540>] sk_clone+0x120/0x420
[104661.244767] [<ffffffff8164cb33>] inet_csk_clone+0x13/0x90
[104661.244767] [<ffffffff816669a5>] tcp_create_openreq_child+0x25/0x4d0
[104661.244767] [<ffffffff81664c78>] tcp_v4_syn_recv_sock+0x48/0x2c0
[104661.244767] [<ffffffff816667f5>] tcp_check_req+0x335/0x4c0
[104661.244767] [<ffffffff81663e5e>] tcp_v4_do_rcv+0x29e/0x460
[104661.244767] [<ffffffff816648ac>] tcp_v4_rcv+0x88c/0xc10
[104661.244767] [<ffffffff81641960>] ip_local_deliver_finish+0x100/0x2f0
[104661.244767] [<ffffffff81641bdd>] ip_local_deliver+0x8d/0xa0
[104661.244767] [<ffffffff81641203>] ip_rcv_finish+0x1a3/0x510
[104661.244767] [<ffffffff816417e2>] ip_rcv+0x272/0x2f0
[104661.244767] [<ffffffff81610d67>] __netif_receive_skb+0x4d7/0x560
[104661.244767] [<ffffffff81610ec0>] process_backlog+0xd0/0x1e0
[104661.244767] [<ffffffff81613880>] net_rx_action+0x140/0x2c0
[104661.244767] [<ffffffff810640b8>] __do_softirq+0x138/0x250
[104661.244767] [<ffffffff817002bc>] call_softirq+0x1c/0x30
[104661.244767] [<ffffffff810153c5>] do_softirq+0x95/0xd0
[104661.244767] [<ffffffff81063dbd>] local_bh_enable_ip+0xed/0x110
[104661.244767] [<ffffffff816f5e9f>] _raw_spin_unlock_bh+0x3f/0x50
[104661.244767] [<ffffffff81602e41>] release_sock+0x161/0x1d0
[104661.244767] [<ffffffff816762ed>] inet_stream_connect+0x6d/0x2f0
[104661.244767] [<ffffffff815fcfeb>] kernel_connect+0xb/0x10
[104661.244767] [<ffffffff816aaf86>] xs_tcp_setup_socket+0x2a6/0x4c0
[104661.244767] [<ffffffff81078cf9>] process_one_work+0x1e9/0x560
[104661.244767] [<ffffffff81079403>] worker_thread+0x193/0x420
[104661.244767] [<ffffffff81080466>] kthread+0x96/0xb0
[104661.244767] [<ffffffff817001c4>] kernel_thread_helper+0x4/0x10
[104661.244767]
[104661.244767] -> #0 (slock-AF_INET/1){+.-.-.}:
[104661.244767] [<ffffffff8109a000>] __lock_acquire+0x2040/0x2180
[104661.244767] [<ffffffff8109a7b9>] lock_acquire+0x109/0x140
[104661.244767] [<ffffffff816f55aa>] _raw_spin_lock_nested+0x3a/0x50
[104661.244767] [<ffffffff81664887>] tcp_v4_rcv+0x867/0xc10
[104661.244767] [<ffffffff81641960>] ip_local_deliver_finish+0x100/0x2f0
[104661.244767] [<ffffffff81641bdd>] ip_local_deliver+0x8d/0xa0
[104661.244767] [<ffffffff81641203>] ip_rcv_finish+0x1a3/0x510
[104661.244767] [<ffffffff816417e2>] ip_rcv+0x272/0x2f0
[104661.244767] [<ffffffff81610d67>] __netif_receive_skb+0x4d7/0x560
[104661.244767] [<ffffffff81612e24>] netif_receive_skb+0x104/0x120
[104661.244767] [<ffffffff81612f70>] napi_skb_finish+0x50/0x70
[104661.244767] [<ffffffff81613635>] napi_gro_receive+0xc5/0xd0
[104661.244767] [<ffffffffa000ad50>] bnx2_poll_work+0x610/0x1560 [bnx2]
[104661.244767] [<ffffffffa000bde6>] bnx2_poll+0x66/0x250 [bnx2]
[104661.244767] [<ffffffff81613880>] net_rx_action+0x140/0x2c0
[104661.244767] [<ffffffff810640b8>] __do_softirq+0x138/0x250
[104661.244767] [<ffffffff817002bc>] call_softirq+0x1c/0x30
[104661.244767] [<ffffffff810153c5>] do_softirq+0x95/0xd0
[104661.244767] [<ffffffff81063c8d>] irq_exit+0xdd/0x110
[104661.244767] [<ffffffff81014b74>] do_IRQ+0x64/0xe0
[104661.244767] [<ffffffff816f6273>] ret_from_intr+0x0/0x1a
[104661.244767] [<ffffffff816f65b5>] page_fault+0x25/0x30
[104661.244767]
[104661.244767] other info that might help us debug this:
[104661.244767]
[104661.244767] Possible unsafe locking scenario:
[104661.244767]
[104661.244767] CPU0 CPU1
[104661.244767] ---- ----
[104661.244767] lock(slock-AF_INET);
[104661.244767] lock(slock-AF_INET);
[104661.244767] lock(slock-AF_INET);
[104661.244767] lock(slock-AF_INET);
[104661.244767]
[104661.244767] *** DEADLOCK ***
[104661.244767]
[104661.244767] 3 locks held by watchdog.pl/29331:
[104661.244767] #0: (slock-AF_INET){+.-.-.}, at: [<ffffffff81604540>] sk_clone+0x120/0x420
[104661.244767] #1: (rcu_read_lock){.+.+..}, at: [<ffffffff816109f5>] __netif_receive_skb+0x165/0x560
[104661.244767] #2: (rcu_read_lock){.+.+..}, at: [<ffffffff816418a0>] ip_local_deliver_finish+0x40/0x2f0
[104661.244767]
[104661.244767] stack backtrace:
[104661.244767] Pid: 29331, comm: watchdog.pl Not tainted 3.1.0-rc10-hw-lockdep+ #51
[104661.244767] Call Trace:
[104661.244767] <IRQ> [<ffffffff81097eab>] print_circular_bug+0x21b/0x330
[104661.244767] [<ffffffff8109a000>] __lock_acquire+0x2040/0x2180
[104661.244767] [<ffffffff8109a7b9>] lock_acquire+0x109/0x140
[104661.244767] [<ffffffff81664887>] ? tcp_v4_rcv+0x867/0xc10
[104661.244767] [<ffffffff816f55aa>] _raw_spin_lock_nested+0x3a/0x50
[104661.244767] [<ffffffff81664887>] ? tcp_v4_rcv+0x867/0xc10
[104661.244767] [<ffffffff81664887>] tcp_v4_rcv+0x867/0xc10
[104661.244767] [<ffffffff816418a0>] ? ip_local_deliver_finish+0x40/0x2f0
[104661.244767] [<ffffffff81636978>] ? nf_hook_slow+0x148/0x1a0
[104661.244767] [<ffffffff81641960>] ip_local_deliver_finish+0x100/0x2f0
[104661.244767] [<ffffffff816418a0>] ? ip_local_deliver_finish+0x40/0x2f0
[104661.244767] [<ffffffff81641bdd>] ip_local_deliver+0x8d/0xa0
[104661.244767] [<ffffffff81641203>] ip_rcv_finish+0x1a3/0x510
[104661.244767] [<ffffffff816417e2>] ip_rcv+0x272/0x2f0
[104661.244767] [<ffffffff81610d67>] __netif_receive_skb+0x4d7/0x560
[104661.244767] [<ffffffff816109f5>] ? __netif_receive_skb+0x165/0x560
[104661.244767] [<ffffffff81612e24>] netif_receive_skb+0x104/0x120
[104661.244767] [<ffffffff81612d43>] ? netif_receive_skb+0x23/0x120
[104661.244767] [<ffffffff816133ab>] ? dev_gro_receive+0x29b/0x380
[104661.244767] [<ffffffff816132a2>] ? dev_gro_receive+0x192/0x380
[104661.244767] [<ffffffff81612f70>] napi_skb_finish+0x50/0x70
[104661.244767] [<ffffffff81613635>] napi_gro_receive+0xc5/0xd0
[104661.244767] [<ffffffffa000ad50>] bnx2_poll_work+0x610/0x1560 [bnx2]
[104661.244767] [<ffffffffa000bde6>] bnx2_poll+0x66/0x250 [bnx2]
[104661.244767] [<ffffffff81613880>] net_rx_action+0x140/0x2c0
[104661.244767] [<ffffffff810640b8>] __do_softirq+0x138/0x250
[104661.244767] [<ffffffff817002bc>] call_softirq+0x1c/0x30
[104661.244767] [<ffffffff810153c5>] do_softirq+0x95/0xd0
[104661.244767] [<ffffffff81063c8d>] irq_exit+0xdd/0x110
[104661.244767] [<ffffffff81014b74>] do_IRQ+0x64/0xe0
[104661.244767] [<ffffffff816f6273>] common_interrupt+0x73/0x73
[104661.244767] <EOI> [<ffffffff816f99b3>] ? do_page_fault+0x93/0x520
[104661.244767] [<ffffffff816f99af>] ? do_page_fault+0x8f/0x520
[104661.244767] [<ffffffff81149afc>] ? vfsmount_lock_local_unlock+0x1c/0x40
[104661.244767] [<ffffffff8114a79b>] ? mntput_no_expire+0x3b/0x150
[104661.244767] [<ffffffff8114a8ca>] ? mntput+0x1a/0x30
[104661.244767] [<ffffffff8112c540>] ? fput+0x190/0x230
[104661.244767] [<ffffffff813a60ed>] ? trace_hardirqs_off_thunk+0x3a/0x3c
[104661.244767] [<ffffffff816f65b5>] page_fault+0x25/0x30
[104661.897577] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102?
[104661.923653] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102?
[104663.418206] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102?
[104666.420003] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102?
[104672.425159] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102?
[104684.423542] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000102, exited with 00000103?
[104691.206752] huh, entered softirq 3 NET_RX ffffffff81613740 preempt_count 00000101, exited with 00000102?
^ permalink raw reply
* [U-Boot] [PATCH 5/7] omap_gpmc: use SOFTECC in SPL if it's enabled
From: Ilya Yanok @ 2011-10-31 17:30 UTC (permalink / raw)
To: u-boot
In-Reply-To: <4EA152C9.1040407@gmail.com>
Hi Simon,
On 21.10.2011 15:08, Simon Schwarz wrote:
> Another thing just poped into my mind, ATM I have a DMA patch for
> devkit8000 on the ML:
> http://article.gmane.org/gmane.comp.boot-loaders.u-boot/109744
> http://article.gmane.org/gmane.comp.boot-loaders.u-boot/112661
>
> It speeds up the process of copying the u-boot/linux image. ATM this is
> in combination with HW ecc and I doubt that it will work seamlessly with
> SW-ecc, yet. However IMHO DMA in combination with SW-ecc could be nearly
> as fast as using HW-ecc.
>
> So maybe an adaption is worth a try?
Ok, I've finally taken a look at it. Adaption is very straight forward
actually. This works for me:
diff --git a/drivers/mtd/nand/nand_spl_simple.c
b/drivers/mtd/nand/nand_spl_simple.c
index 1402a35..1248f8f 100644
--- a/drivers/mtd/nand/nand_spl_simple.c
+++ b/drivers/mtd/nand/nand_spl_simple.c
@@ -284,7 +284,8 @@ static int nand_read_page_dma(int block, int page,
void *dst)
for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
res += omap3_dma_conf_transfer(0, nand_chip.IO_ADDR_R,
(uint32_t *)p, CONFIG_SYS_NAND_ECCSIZE/4);
- this->ecc.hwctl(&mtd, NAND_ECC_READ);
+ if (this->ecc.mode != NAND_ECC_SOFT)
+ this->ecc.hwctl(&mtd, NAND_ECC_READ);
res += omap3_dma_start_transfer(0);
/* correct ecc from former transfer */
if (ecc_wait.valid != 0)
Regards, Ilya.
^ permalink raw reply related
* 群发软件+买家搜索机+109届广交会买家、海关数据,B2B询盘买家500万。
From: 仅10元每天 @ 2011-10-31 17:30 UTC (permalink / raw)
To: ssterdahtl, familyhomestorage, domaine.de.kersial, noorvarc,
linux-mtd, dteg, dusky, bjbagwell, andy_co, shalom_cpr, ailily
群发软件+109届广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。
群发软件+109届广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。
1、群发软件: 操作简单,功能强大,模仿人工操作模式,到达率高,日发送5万封以上。
2、500万买家资源: 赠送的500万买家资源库,更新 (可以按照您的产品提取出来,更精准开发)。
3、超级海外买家Email搜索机: 内置了600万行业关键词,根据长尾词搜索,结果更精确匹配;每天能搜索1-2万以上买家真实EMAIL,成单率高。
要的抓紧联系QQ: 911585605 或者立即回复邮箱: 911585605@qq.com
要的抓紧联系QQ: 911585605 或者立即回复邮箱: 911585605@qq.com
要的抓紧联系QQ: 911585605 或者立即回复邮箱: 911585605@qq.com
免费赠送:
一共8个包(数据是全行业的,按照行业分好类,并且可以按照关键词查询的):
1,2011春季109届广交会买家现场询盘数据库新鲜出炉,超级新鲜买家,新鲜数据,容易成单!
2,购买后可以免费更新2011秋季广交会+2012春季广交会买家数据。太超值了。
3,最新全球买家库,共451660条数据。 (最新更新日期 2011-05-16日)
4,2008年,2009年,2010年 春季+秋季广交会买家名录,103 104 105 106 107 108 共六届 共120.6万数据。
5,2010年国际促销协会(PPAI)成员名单 PPAI Members Directory,非常重要的大买家。
6,2010年到香港采购的国外客人名录(香港贸发局提供),共7.2万数据,超级重要的买家。
7,48.68万条最新买家询盘,购买后每月更新 1-2万条,包括2部分,1,最新的询盘 2,最新的展会买家。免费更新36个月。
8,2009年海关提单数据piers版数据 1千万。
诚信为本,支持支付宝担保交易 (先发货并安装设置群发软件,然后付款) 彻底打消您的 顾虑。
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
^ permalink raw reply
* Re: bigalloc and max file size
From: Coly Li @ 2011-10-31 17:39 UTC (permalink / raw)
To: Ted Ts'o
Cc: Andreas Dilger, Andreas Dilger, linux-ext4 development,
Alex Zhuravlev, Tao Ma, hao.bigrat@gmail.com
In-Reply-To: <20111031162223.GD16825@thunk.org>
On 2011年11月01日 00:22, Ted Ts'o Wrote:
> On Mon, Oct 31, 2011 at 10:08:20AM -0600, Andreas Dilger wrote:
>> On 2011-10-31, at 4:22 AM, Theodore Tso <tytso@MIT.EDU> wrote:
[snip]
> I'm curious why TaoBao is so interested in changing the extent
> encoding for bigalloc file systems. Currently we can support up to 1
> EB worth of physical block numbers, and 16TB of logical block numbers.
> Are you concerned about bumping into the 1 EB file system limit? Or
> the 16 TB file size limit? Or something else?
>
In some application, we allocate a big file which occupies most space of a file system, while the file system built on
(expensive) SSD. In such configuration, we want less blocks allocated for inode table and bitmap. If the max extent
length could be much big, there is chance to have much less block groups, which results more blocks for regular file.
Current bigalloc code does well already, but there is still chance to do better. The sys-admin team believe
cluster-based-extent can help Ext4 to consume as less meta data memory as raw disk does, and gain as more available data
blocks as raw disks does, too. This is a small number on one single SSD, but in our cluster environment, this effort can
help to save a recognized amount of capex.
Further more, for HDFS with 128MB data block file, and the file system is formatted with 1MB cluster bigalloc. In worst
case, only one extent block read is needed to access an 128MB data block file. (However, this case is about a chunk size
more than 64K, not compulsory for cluster-based-extent)
With inline-data and cluster-based-extent to bigalloc, we get more closed to the above goal.
P.S. When I finish typing this email, I find Andreas also explain the similar reason in his email, much more simple and
clear :-)
--
Coly Li
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: Wishlist: Add support for software-rf-switch in Fujitsu-Siemens notebook
From: Tino Schmidt @ 2011-10-31 17:30 UTC (permalink / raw)
To: Ben Hutchings
Cc: Jonathan Nieder, linux-input, Miloslav Trmac,
Martin Večeřa, Jonathan Woithe, Éric Piel, 631664
In-Reply-To: <1318824232.3340.1.camel@deadeye>
> On Sun, 2011-10-16 at 22:25 +0200, Tino Schmidt wrote:
> [...]
>
>> Hi,
>> I'm sorry for the long delay but I can use the laptop only on weekend.
>> Here is the output:
>>
>> # modprobe wistron_btns force=1
>> FATAL: Error inserting wistron_btns
>> (/lib/modules/2.6.26-2-686/kernel/drivers/input/misc/wistron_btns.ko):
>> No such device
>>
> It looks like this model is rather different, maybe not a Wistron design
> at all.
>
> I would prefer you to test against Linux 3.0, but it appears that the
> model detection has not changed since 2.6.26.
>
>
>> # dmesg
>> [ 168.628474] wistron_btns: BIOS entry point not found
>>
>> and
>> # grep . /sys/class/dmi/id/*_{vendor,name,version}
>> /sys/class/dmi/id/bios_vendor:FUJITSU SIEMENS
>> /sys/class/dmi/id/board_vendor:FUJITSU SIEMENS
>> /sys/class/dmi/id/chassis_vendor:FUJITSU SIEMENS
>> /sys/class/dmi/id/sys_vendor:FUJITSU SIEMENS
>> /sys/class/dmi/id/board_name:AMILO A1655
>> /sys/class/dmi/id/product_name:AMILO A Series
>> /sys/class/dmi/id/bios_version:1.0C-8044-8A20
>> /sys/class/dmi/id/board_version:Rev0.4b
>> /sys/class/dmi/id/chassis_version:N/A
>> /sys/class/dmi/id/product_version:0100
>>
> Please build and test the attached driver (make&& insmod
> amilo-rfkill.ko). It provides a standard rfkill device which you can
> control with e.g. the 'rfkill' command, and will only bind to specific
> models.
>
> If this works, I'll submit the code upstream.
>
> Ben.
>
>
Hi Ben,
Thank you for your code!
Before I built the module (Kernel 2.6.32) I had to insert the include
line #include <asm/io.h> ( -> inb()-function ?)
With Kernel 2.6.26 I couldn't even built the module.
But loading of the module failed:
# insmod amilo-rfkill.ko
insmod: error inserting 'amilo-rfkill.ko': -1 No such device
In kernel 2.6.32 exists /dev/rfkill but
# rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: yes
# rfkill unblock all
# rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: yes
doesn't work here. Nothing changed.
Thanks,
Tino
^ permalink raw reply
* Re: [Qemu-devel] [PATCH v3 0/3] TLS abstraction layer for thread-local cpu_single_env on Linux
From: Jan Kiszka @ 2011-10-31 17:28 UTC (permalink / raw)
To: Peter Maydell
Cc: Anthony Liguori, Dr. David Alan Gilbert, patches@linaro.org,
qemu-devel@nongnu.org, Paolo Bonzini, Andreas Färber
In-Reply-To: <CAFEAcA_LS1zC8_o_bQ+X4sz8+6TUPvUus0D9-7y1ARw=ws9PyQ@mail.gmail.com>
On 2011-10-31 14:40, Peter Maydell wrote:
> An early ping since I have no idea who counts as the submaintainer
> for this patchset and it definitely needs to go in for 1.0...
I think it's rather a central system this touches. So it's likely a
super-maintainer thing.
Anyway, you have my ack on these patches as well.
Thanks,
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
^ permalink raw reply
* No audio with HFP
From: Scott Haynie @ 2011-10-31 17:28 UTC (permalink / raw)
To: linux-bluetooth@vger.kernel.org
Hi,
Simply trying to place a handsfree call via bluetooth/HFP on Ubuntu 11.04 (or 11.10). The call gets placed (using ofono cmds), but I hear no audio through the PC in/out. I follow the steps outlined by Gustavo Padovan here, which involved manually setting up loopback btw bluez & Alsa:
http://padovan.org/blog/2010/02/handsfree-profile-into-bluez-and-ofono/
Eventually got that to produce A2DP audio (Ubuntu 11.10, bluez 4.96, PA 1:1.0). But as for HFP, still nothing. When I selected "Handsfree Gateway" PA profile for my BT device, I can hear an audio stream open up but still no voice.
Tried various configurations/versions of bluez, pulseaudio, ofono, all to no avail (including building all of them from their latest source).
Tried several combinations of Enable flags in /etc/bluetooth/audio.conf. Currently I get closest with "Enable=Source,Sink,Gateway,Headset".
Saw lots of commits related to HFP recently--- none of which are in an official bluez release yet-- are these supposed to fix these issues once and for all?
http://git.kernel.org/?p=bluetooth/bluez.git;a=history;f=audio/gateway.c;hb=HEAD
Since I have complete control of my PC, is there a known configuration that works on Ubuntu? A2DP is nice, but I'm more interested in getting HFP to work properly.
Scott
^ permalink raw reply
* Re: [PATCH 09/14] KVM: PPC: Add generic single register ioctls
From: Jan Kiszka @ 2011-10-31 17:26 UTC (permalink / raw)
To: Avi Kivity
Cc: Alexander Graf, kvm-ppc@vger.kernel.org, kvm list,
Marcelo Tosatti
In-Reply-To: <4EAEA447.5050804@redhat.com>
On 2011-10-31 14:36, Avi Kivity wrote:
> On 10/31/2011 09:53 AM, Alexander Graf wrote:
>> Right now we transfer a static struct every time we want to get or set
>> registers. Unfortunately, over time we realize that there are more of
>> these than we thought of before and the extensibility and flexibility of
>> transferring a full struct every time is limited.
>>
>> So this is a new approach to the problem. With these new ioctls, we can
>> get and set a single register that is identified by an ID. This allows for
>> very precise and limited transmittal of data. When we later realize that
>> it's a better idea to shove over multiple registers at once, we can reuse
>> most of the infrastructure and simply implement a GET_MANY_REGS / SET_MANY_REGS
>> interface.
>>
>> The only downpoint I see to this one is that it needs to pad to 1024 bits
>> (hardware is already on 512 bit registers, so I wanted to leave some room)
>> which is slightly too much for transmitting only 64 bits. But if that's all
>> the tradeoff we have to do for getting an extensible interface, I'd say go
>> for it nevertheless.
>
> Do we want this for x86 too? How often do we want just one register?
On x86, a single register is probably only interesting for debugging
purposes. Things that matter (performance wise) are in kvm.run, anything
else does not worry that much about speed. At least for now. I'm still
waiting for Kemari to propose some get/set optimizations, but there is
obviously not that much to gain or still bigger fish to fry.
Also, x86 is less regular than PPC. And where it is fairly regular, we
already have a GET/SET_MANY interface: MSRs.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
^ permalink raw reply
* Re: [PATCH 09/14] KVM: PPC: Add generic single register ioctls
From: Jan Kiszka @ 2011-10-31 17:26 UTC (permalink / raw)
To: Avi Kivity
Cc: Alexander Graf, kvm-ppc@vger.kernel.org, kvm list,
Marcelo Tosatti
In-Reply-To: <4EAEA447.5050804@redhat.com>
On 2011-10-31 14:36, Avi Kivity wrote:
> On 10/31/2011 09:53 AM, Alexander Graf wrote:
>> Right now we transfer a static struct every time we want to get or set
>> registers. Unfortunately, over time we realize that there are more of
>> these than we thought of before and the extensibility and flexibility of
>> transferring a full struct every time is limited.
>>
>> So this is a new approach to the problem. With these new ioctls, we can
>> get and set a single register that is identified by an ID. This allows for
>> very precise and limited transmittal of data. When we later realize that
>> it's a better idea to shove over multiple registers at once, we can reuse
>> most of the infrastructure and simply implement a GET_MANY_REGS / SET_MANY_REGS
>> interface.
>>
>> The only downpoint I see to this one is that it needs to pad to 1024 bits
>> (hardware is already on 512 bit registers, so I wanted to leave some room)
>> which is slightly too much for transmitting only 64 bits. But if that's all
>> the tradeoff we have to do for getting an extensible interface, I'd say go
>> for it nevertheless.
>
> Do we want this for x86 too? How often do we want just one register?
On x86, a single register is probably only interesting for debugging
purposes. Things that matter (performance wise) are in kvm.run, anything
else does not worry that much about speed. At least for now. I'm still
waiting for Kemari to propose some get/set optimizations, but there is
obviously not that much to gain or still bigger fish to fry.
Also, x86 is less regular than PPC. And where it is fairly regular, we
already have a GET/SET_MANY interface: MSRs.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
^ permalink raw reply
* Re: what's the proper value for BB_NUMBER_THREADS?
From: Robert P. J. Day @ 2011-10-31 17:25 UTC (permalink / raw)
To: Mark Hatle; +Cc: yocto
In-Reply-To: <4EAED7B0.4050909@windriver.com>
On Mon, 31 Oct 2011, Mark Hatle wrote:
> On 10/30/11 11:15 AM, Robert P. J. Day wrote:
> > On Sun, 30 Oct 2011, Christian Gagneraud wrote:
> >
> >> On 30/10/11 15:32, Robert P. J. Day wrote:
> >>>
> >>> all the docs recommend twice the number of cores (AFAICT), yet the
> >>> template local.conf file suggests that, for a quad core, the value of
> >>> 4 would be appropriate. shouldn't that say 8? same with
> >>> PARALLEL_MAKE?
> >>
> >> Hi Robert,
> >>
> >> The Poky ref manual says (rule of thumb) x2 for BB_NUMBER_THREADS,
> >> and x1.5 for PARALLEL_MAKE.
> >
> > if that's the case, anyone object to my submitting a patch to
> > update local.conf.sample appropriately?
> >
> > rday
> >
>
> I agree the manual and local.conf files should match. The issue
> seems to be that the perfect values are subjective. Things like
> memory, disk speed, chipset latency, and of course processor
> speed/cores all affect the optimal setting. But we do need a
> consistent rule of thumb.. I myself usually use x2 for both THREADS
> and MAKE.
that's what i would normally use, assuming that having an overly
high value for either of those settings can't possibly hurt. if
that's the consensus, i can adjust the references to say 2x everywhere
that i know of. just let me know.
rday
--
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================
^ permalink raw reply
* [U-Boot] [PATCH] miiphy: Note that miiphy_* API is deprecated
From: Mike Frysinger @ 2011-10-31 17:21 UTC (permalink / raw)
To: u-boot
In-Reply-To: <1320072373-367-1-git-send-email-afleming@freescale.com>
On Monday 31 October 2011 10:46:13 Andy Fleming wrote:
> +What: Users of the legacy miiphy_* code
> +When: undetermined
> +
> +Why: We now have a PHY library, which allows everyone to share PHY
> + drivers. All new drivers should use this infrastructure, and
> + all old drivers should get converted to use it.
could you explicitly mention the defines which are considered "old" and the
ones that are considered "new" here ?
and update the top level README as well (if the old defines are mentioned) ?
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20111031/b2d8e4c6/attachment.pgp
^ permalink raw reply
* Re: [PATCH v2] oom: fix integer overflow of points in oom_badness
From: KOSAKI Motohiro @ 2011-10-31 14:18 UTC (permalink / raw)
To: fhrbata
Cc: rientjes, linux-mm, linux-kernel, akpm, oleg, minchan.kim, stable,
eteo, pmatouse
In-Reply-To: <1320076569-23872-1-git-send-email-fhrbata@redhat.com>
(10/31/2011 11:56 AM), Frantisek Hrbata wrote:
> An integer overflow will happen on 64bit archs if task's sum of rss, swapents
> and nr_ptes exceeds (2^31)/1000 value. This was introduced by commit
>
> f755a04 oom: use pte pages in OOM score
>
> where the oom score computation was divided into several steps and it's no
> longer computed as one expression in unsigned long(rss, swapents, nr_pte are
> unsigned long), where the result value assigned to points(int) is in
> range(1..1000). So there could be an int overflow while computing
>
> 176 points *= 1000;
>
> and points may have negative value. Meaning the oom score for a mem hog task
> will be one.
>
> 196 if (points <= 0)
> 197 return 1;
>
> For example:
> [ 3366] 0 3366 35390480 24303939 5 0 0 oom01
> Out of memory: Kill process 3366 (oom01) score 1 or sacrifice child
>
> Here the oom1 process consumes more than 24303939(rss)*4096~=92GB physical
> memory, but it's oom score is one.
>
> In this situation the mem hog task is skipped and oom killer kills another and
> most probably innocent task with oom score greater than one.
>
> The points variable should be of type long instead of int to prevent the int
> overflow.
>
> Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
> ---
> mm/oom_kill.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/mm/oom_kill.c b/mm/oom_kill.c
> index 626303b..e9a1785 100644
> --- a/mm/oom_kill.c
> +++ b/mm/oom_kill.c
> @@ -162,7 +162,7 @@ static bool oom_unkillable_task(struct task_struct *p,
> unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem,
> const nodemask_t *nodemask, unsigned long totalpages)
> {
> - int points;
> + long points;
>
> if (oom_unkillable_task(p, mem, nodemask))
> return 0;
Good catch.
Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.