summaryrefslogtreecommitdiff
path: root/libre/linux-libre
diff options
context:
space:
mode:
authorAndré Fabian Silva Delgado <emulatorman@lavabit.com>2013-08-13 10:42:44 -0300
committerAndré Fabian Silva Delgado <emulatorman@lavabit.com>2013-08-13 10:42:44 -0300
commit6af0f5b3ae8bb646b055a29e857dbd194a31930b (patch)
tree52afbe196c21407ba988f058ccfe496638f7ff1b /libre/linux-libre
parentac6448ddfebb681301211fb31a022f68a4df2b96 (diff)
linux-libre-3.10.6-2: updating version
* move new changes from libre-testing to libre * fixed https://bugs.archlinux.org/task/35991, https://bugs.archlinux.org/task/36296
Diffstat (limited to 'libre/linux-libre')
-rw-r--r--libre/linux-libre/3.10.6-logitech-dj.patch172
-rw-r--r--libre/linux-libre/3.10.6-reset-superseed-xhci-hcd.patch24
-rw-r--r--libre/linux-libre/PKGBUILD28
-rw-r--r--libre/linux-libre/config.i6866
-rw-r--r--libre/linux-libre/config.x86_648
-rw-r--r--libre/linux-libre/criu-no-expert.patch22
6 files changed, 249 insertions, 11 deletions
diff --git a/libre/linux-libre/3.10.6-logitech-dj.patch b/libre/linux-libre/3.10.6-logitech-dj.patch
new file mode 100644
index 000000000..1c112ccde
--- /dev/null
+++ b/libre/linux-libre/3.10.6-logitech-dj.patch
@@ -0,0 +1,172 @@
+From c63e0e370028d7e4033bd40165f18499872b5183 Mon Sep 17 00:00:00 2001
+From: Nestor Lopez Casado <nlopezcasad@logitech.com>
+Date: Thu, 18 Jul 2013 13:21:30 +0000
+Subject: HID: Revert "Revert "HID: Fix logitech-dj: missing Unifying device issue""
+
+This reverts commit 8af6c08830b1ae114d1a8b548b1f8b056e068887.
+
+This patch re-adds the workaround introduced by 596264082f10dd4
+which was reverted by 8af6c08830b1ae114.
+
+The original patch 596264 was needed to overcome a situation where
+the hid-core would drop incoming reports while probe() was being
+executed.
+
+This issue was solved by c849a6143bec520af which added
+hid_device_io_start() and hid_device_io_stop() that enable a specific
+hid driver to opt-in for input reports while its probe() is being
+executed.
+
+Commit a9dd22b730857347 modified hid-logitech-dj so as to use the
+functionality added to hid-core. Having done that, workaround 596264
+was no longer necessary and was reverted by 8af6c08.
+
+We now encounter a different problem that ends up 'again' thwarting
+the Unifying receiver enumeration. The problem is time and usb controller
+dependent. Ocasionally the reports sent to the usb receiver to start
+the paired devices enumeration fail with -EPIPE and the receiver never
+gets to enumerate the paired devices.
+
+With dcd9006b1b053c7b1c the problem was "hidden" as the call to the usb
+driver became asynchronous and none was catching the error from the
+failing URB.
+
+As the root cause for this failing SET_REPORT is not understood yet,
+-possibly a race on the usb controller drivers or a problem with the
+Unifying receiver- reintroducing this workaround solves the problem.
+
+Overall what this workaround does is: If an input report from an
+unknown device is received, then a (re)enumeration is performed.
+
+related bug:
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1194649
+
+Signed-off-by: Nestor Lopez Casado <nlopezcasad@logitech.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+---
+diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
+index 5207591a..cd33084 100644
+--- a/drivers/hid/hid-logitech-dj.c
++++ b/drivers/hid/hid-logitech-dj.c
+@@ -192,6 +192,7 @@ static struct hid_ll_driver logi_dj_ll_driver;
+ static int logi_dj_output_hidraw_report(struct hid_device *hid, u8 * buf,
+ size_t count,
+ unsigned char report_type);
++static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev);
+
+ static void logi_dj_recv_destroy_djhid_device(struct dj_receiver_dev *djrcv_dev,
+ struct dj_report *dj_report)
+@@ -232,6 +233,7 @@ static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
+ if (dj_report->report_params[DEVICE_PAIRED_PARAM_SPFUNCTION] &
+ SPFUNCTION_DEVICE_LIST_EMPTY) {
+ dbg_hid("%s: device list is empty\n", __func__);
++ djrcv_dev->querying_devices = false;
+ return;
+ }
+
+@@ -242,6 +244,12 @@ static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
+ return;
+ }
+
++ if (djrcv_dev->paired_dj_devices[dj_report->device_index]) {
++ /* The device is already known. No need to reallocate it. */
++ dbg_hid("%s: device is already known\n", __func__);
++ return;
++ }
++
+ dj_hiddev = hid_allocate_device();
+ if (IS_ERR(dj_hiddev)) {
+ dev_err(&djrcv_hdev->dev, "%s: hid_allocate_device failed\n",
+@@ -305,6 +313,7 @@ static void delayedwork_callback(struct work_struct *work)
+ struct dj_report dj_report;
+ unsigned long flags;
+ int count;
++ int retval;
+
+ dbg_hid("%s\n", __func__);
+
+@@ -337,6 +346,25 @@ static void delayedwork_callback(struct work_struct *work)
+ logi_dj_recv_destroy_djhid_device(djrcv_dev, &dj_report);
+ break;
+ default:
++ /* A normal report (i. e. not belonging to a pair/unpair notification)
++ * arriving here, means that the report arrived but we did not have a
++ * paired dj_device associated to the report's device_index, this
++ * means that the original "device paired" notification corresponding
++ * to this dj_device never arrived to this driver. The reason is that
++ * hid-core discards all packets coming from a device while probe() is
++ * executing. */
++ if (!djrcv_dev->paired_dj_devices[dj_report.device_index]) {
++ /* ok, we don't know the device, just re-ask the
++ * receiver for the list of connected devices. */
++ retval = logi_dj_recv_query_paired_devices(djrcv_dev);
++ if (!retval) {
++ /* everything went fine, so just leave */
++ break;
++ }
++ dev_err(&djrcv_dev->hdev->dev,
++ "%s:logi_dj_recv_query_paired_devices "
++ "error:%d\n", __func__, retval);
++ }
+ dbg_hid("%s: unexpected report type\n", __func__);
+ }
+ }
+@@ -367,6 +395,12 @@ static void logi_dj_recv_forward_null_report(struct dj_receiver_dev *djrcv_dev,
+ if (!djdev) {
+ dbg_hid("djrcv_dev->paired_dj_devices[dj_report->device_index]"
+ " is NULL, index %d\n", dj_report->device_index);
++ kfifo_in(&djrcv_dev->notif_fifo, dj_report, sizeof(struct dj_report));
++
++ if (schedule_work(&djrcv_dev->work) == 0) {
++ dbg_hid("%s: did not schedule the work item, was already "
++ "queued\n", __func__);
++ }
+ return;
+ }
+
+@@ -397,6 +431,12 @@ static void logi_dj_recv_forward_report(struct dj_receiver_dev *djrcv_dev,
+ if (dj_device == NULL) {
+ dbg_hid("djrcv_dev->paired_dj_devices[dj_report->device_index]"
+ " is NULL, index %d\n", dj_report->device_index);
++ kfifo_in(&djrcv_dev->notif_fifo, dj_report, sizeof(struct dj_report));
++
++ if (schedule_work(&djrcv_dev->work) == 0) {
++ dbg_hid("%s: did not schedule the work item, was already "
++ "queued\n", __func__);
++ }
+ return;
+ }
+
+@@ -444,6 +484,10 @@ static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
+ struct dj_report *dj_report;
+ int retval;
+
++ /* no need to protect djrcv_dev->querying_devices */
++ if (djrcv_dev->querying_devices)
++ return 0;
++
+ dj_report = kzalloc(sizeof(struct dj_report), GFP_KERNEL);
+ if (!dj_report)
+ return -ENOMEM;
+@@ -455,6 +499,7 @@ static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
+ return retval;
+ }
+
++
+ static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev,
+ unsigned timeout)
+ {
+diff --git a/drivers/hid/hid-logitech-dj.h b/drivers/hid/hid-logitech-dj.h
+index fd28a5e..4a40003 100644
+--- a/drivers/hid/hid-logitech-dj.h
++++ b/drivers/hid/hid-logitech-dj.h
+@@ -101,6 +101,7 @@ struct dj_receiver_dev {
+ struct work_struct work;
+ struct kfifo notif_fifo;
+ spinlock_t lock;
++ bool querying_devices;
+ };
+
+ struct dj_device {
+--
+cgit v0.9.2
diff --git a/libre/linux-libre/3.10.6-reset-superseed-xhci-hcd.patch b/libre/linux-libre/3.10.6-reset-superseed-xhci-hcd.patch
new file mode 100644
index 000000000..0415b8a1e
--- /dev/null
+++ b/libre/linux-libre/3.10.6-reset-superseed-xhci-hcd.patch
@@ -0,0 +1,24 @@
+[PATCH] SCSI: Don't attempt to send extended INQUIRY command if skip_vpd_pages is set
+
+If a device has the skip_vpd_pages flag set we should simply fail the
+scsi_get_vpd_page() call.
+
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Stuart Foster <smf.linux@ntlworld.com>
+Cc: stable@vger.kernel.org
+
+diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
+index 3b1ea34..eaa808e 100644
+--- a/drivers/scsi/scsi.c
++++ b/drivers/scsi/scsi.c
+@@ -1031,6 +1031,9 @@ int scsi_get_vpd_page(struct scsi_device *sdev, u8 page, unsigned char *buf,
+ {
+ int i, result;
+
++ if (sdev->skip_vpd_pages)
++ goto fail;
++
+ /* Ask for all the pages supported by this device */
+ result = scsi_vpd_inquiry(sdev, buf, 0, buf_len);
+ if (result)
diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD
index 3df9aa783..0ddf58024 100644
--- a/libre/linux-libre/PKGBUILD
+++ b/libre/linux-libre/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 192042 2013-08-05 08:13:15Z tpowa $
+# $Id: PKGBUILD 192495 2013-08-13 09:26:23Z tpowa $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Maintainer: Thomas Baechler <thomas@archlinux.org>
# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
@@ -10,9 +10,9 @@
pkgbase=linux-libre # Build stock -LIBRE kernel
#pkgbase=linux-libre-custom # Build kernel with a different name
_basekernel=3.10
-_sublevel=5
+_sublevel=6
pkgver=${_basekernel}.${_sublevel}
-pkgrel=1
+pkgrel=2
_lxopkgver=${_basekernel}.5 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
@@ -29,16 +29,22 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn
'Kbuild.platforms'
'boot-logo.patch'
'change-default-console-loglevel.patch'
+ 'criu-no-expert.patch'
+ '3.10.6-logitech-dj.patch'
+ '3.10.6-reset-superseed-xhci-hcd.patch'
"http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
md5sums=('d562fd52580a3b6b18b6eeb5921d1d5c'
- 'f4810ea4bd977321d76edcde8dc756c9'
- '1f848fda2af2e3fc3dfa992d625b3f9e'
- 'd63ce6a34f077959b54bc38597582822'
+ '63a1c2aba22871f8e8dacdb4968d9a1f'
+ '8ec987449e0e42a1c98d8ce92b9019c2'
+ '8efbd1f17f37bdaa8649c8a63761bf07'
'e49ac236dfeef709f91a3d993ea7b62c'
'2967cecc3af9f954ccc822fd63dca6ff'
'8267264d9a8966e57fdacd1fa1fc65c4'
'04b21c79df0a952c22d681dd4f4562df'
'f3def2cefdcbb954c21d8505d23cc83c'
+ 'd50c1ac47394e9aec637002ef3392bd1'
+ '3ff40ca684cfe719723e627e2cef7cea'
+ '31f4d721494c4d5493ed90d9c504c5c9'
'6047f873d9c5ec552ab0bbfc125a4535')
if [ "$CARCH" != "mips64el" ]; then
# don't use the Loongson-specific patches on non-mips64el arches.
@@ -64,6 +70,16 @@ prepare() {
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch"
+ # allow criu without expert option set
+ # patch from fedora
+ patch -Np1 -i "${srcdir}/criu-no-expert.patch"
+
+ # fix https://bugs.archlinux.org/task/35991 - [linux] 3.10.x renders Logitech Unified Receivers useless
+ patch -Np1 -i "${srcdir}/3.10.6-logitech-dj.patch"
+
+ # fix https://bugs.archlinux.org/task/36296 - [linux] 3.10.3 reset SuperSpeed USB using xhci_hcd
+ patch -Np1 -i "${srcdir}/3.10.6-reset-superseed-xhci-hcd.patch"
+
if [ "$CARCH" == "mips64el" ]; then
sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre|" Makefile
sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \
diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686
index c27f50b4c..be09f460c 100644
--- a/libre/linux-libre/config.i686
+++ b/libre/linux-libre/config.i686
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.0-1 Kernel Configuration
+# Linux/x86 3.10.5-1 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -681,10 +681,12 @@ CONFIG_I82365=m
CONFIG_TCIC=m
CONFIG_PCMCIA_PROBE=y
CONFIG_PCCARD_NONSTATIC=y
-CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_COMPAQ=m
# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
CONFIG_HOTPLUG_PCI_IBM=m
+CONFIG_HOTPLUG_PCI_ACPI=y
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_CPCI=y
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64
index 04bbcdf7a..e69a7a587 100644
--- a/libre/linux-libre/config.x86_64
+++ b/libre/linux-libre/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.0-1 Kernel Configuration
+# Linux/x86 3.10.5-1 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
@@ -164,7 +164,7 @@ CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
-CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_CHECKPOINT_RESTORE=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
@@ -654,7 +654,9 @@ CONFIG_YENTA_TOSHIBA=y
CONFIG_PD6729=m
CONFIG_I82092=m
CONFIG_PCCARD_NONSTATIC=y
-CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_ACPI=y
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_CPCI=y
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
diff --git a/libre/linux-libre/criu-no-expert.patch b/libre/linux-libre/criu-no-expert.patch
new file mode 100644
index 000000000..2124427e9
--- /dev/null
+++ b/libre/linux-libre/criu-no-expert.patch
@@ -0,0 +1,22 @@
+diff --git a/init/Kconfig b/init/Kconfig
+index be8b7f5..7461760 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -989,7 +989,7 @@ config DEBUG_BLK_CGROUP
+ endif # CGROUPS
+
+ config CHECKPOINT_RESTORE
+- bool "Checkpoint/restore support" if EXPERT
++ bool "Checkpoint/restore support"
+ default n
+ help
+ Enables additional kernel features in a sake of checkpoint/restore.
+@@ -1000,7 +1000,7 @@ config CHECKPOINT_RESTORE
+ If unsure, say N here.
+
+ menuconfig NAMESPACES
+- bool "Namespaces support" if EXPERT
++ bool "Namespaces support"
+ default !EXPERT
+ help
+ Provides the way to make tasks work with different objects using