diff options
author | André Fabian Silva Delgado <emulatorman@lavabit.com> | 2013-08-13 10:42:44 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@lavabit.com> | 2013-08-13 10:42:44 -0300 |
commit | 6af0f5b3ae8bb646b055a29e857dbd194a31930b (patch) | |
tree | 52afbe196c21407ba988f058ccfe496638f7ff1b /libre/linux-libre | |
parent | ac6448ddfebb681301211fb31a022f68a4df2b96 (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.patch | 172 | ||||
-rw-r--r-- | libre/linux-libre/3.10.6-reset-superseed-xhci-hcd.patch | 24 | ||||
-rw-r--r-- | libre/linux-libre/PKGBUILD | 28 | ||||
-rw-r--r-- | libre/linux-libre/config.i686 | 6 | ||||
-rw-r--r-- | libre/linux-libre/config.x86_64 | 8 | ||||
-rw-r--r-- | libre/linux-libre/criu-no-expert.patch | 22 |
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 |