Linux 3.1.1
Drop the patches Chuck so nicely listed for me
This commit is contained in:
parent
a20eace265
commit
a596f94913
|
@ -1,41 +0,0 @@
|
|||
From 023b9565972a4a5e0f01b9aa32680af6e9b5c388 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
Date: Wed, 7 Sep 2011 15:00:02 -0700
|
||||
Subject: [PATCH] WMI: properly cleanup devices to avoid crashes
|
||||
|
||||
We need to remove devices that we destroy from the list, otherwise
|
||||
we'll crash if there are more than one "_WDG" methods in DSDT.
|
||||
|
||||
This fixes https://bugzilla.kernel.org/show_bug.cgi?id=32052
|
||||
|
||||
Tested-by: Ilya Tumaykin <librarian_rus@yahoo.com>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
|
||||
Acked-by: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
---
|
||||
drivers/platform/x86/wmi.c | 6 +++++-
|
||||
1 files changed, 5 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
|
||||
index f23d5a8..9b88be4 100644
|
||||
--- a/drivers/platform/x86/wmi.c
|
||||
+++ b/drivers/platform/x86/wmi.c
|
||||
@@ -754,9 +754,13 @@ static void wmi_free_devices(void)
|
||||
struct wmi_block *wblock, *next;
|
||||
|
||||
/* Delete devices for all the GUIDs */
|
||||
- list_for_each_entry_safe(wblock, next, &wmi_block_list, list)
|
||||
+ list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
|
||||
+ list_del(&wblock->list);
|
||||
if (wblock->dev.class)
|
||||
device_unregister(&wblock->dev);
|
||||
+ else
|
||||
+ kfree(wblock);
|
||||
+ }
|
||||
}
|
||||
|
||||
static bool guid_already_parsed(const char *guid_string)
|
||||
--
|
||||
1.7.6.4
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
Path: news.gmane.org!not-for-mail
|
||||
From: Pieter-Augustijn Van Malleghem <p-a@scarlet.be>
|
||||
Newsgroups: gmane.linux.kernel.input
|
||||
Subject: [PATCH] Add MacBookAir4,1 keyboard support
|
||||
Date: Wed, 7 Sep 2011 16:15:52 -0400
|
||||
Lines: 72
|
||||
Approved: news@gmane.org
|
||||
Message-ID: <20110907201552.GA1962@Caligula>
|
||||
NNTP-Posting-Host: lo.gmane.org
|
||||
Mime-Version: 1.0
|
||||
Content-Type: text/plain; charset=us-ascii
|
||||
X-Trace: dough.gmane.org 1315426570 11003 80.91.229.12 (7 Sep 2011 20:16:10 GMT)
|
||||
X-Complaints-To: usenet@dough.gmane.org
|
||||
NNTP-Posting-Date: Wed, 7 Sep 2011 20:16:10 +0000 (UTC)
|
||||
To: linux-input@vger.kernel.org
|
||||
Original-X-From: linux-input-owner@vger.kernel.org Wed Sep 07 22:16:06 2011
|
||||
Return-path: <linux-input-owner@vger.kernel.org>
|
||||
Envelope-to: glki-linux-input-2@lo.gmane.org
|
||||
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||
by lo.gmane.org with esmtp (Exim 4.69)
|
||||
(envelope-from <linux-input-owner@vger.kernel.org>)
|
||||
id 1R1OXV-0007QX-Ll
|
||||
for glki-linux-input-2@lo.gmane.org; Wed, 07 Sep 2011 22:16:06 +0200
|
||||
Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S1751419Ab1IGUQE (ORCPT <rfc822;glki-linux-input-2@m.gmane.org>);
|
||||
Wed, 7 Sep 2011 16:16:04 -0400
|
||||
Original-Received: from mail-vx0-f174.google.com ([209.85.220.174]:57168 "EHLO
|
||||
mail-vx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||
with ESMTP id S1751237Ab1IGUQC (ORCPT
|
||||
<rfc822;linux-input@vger.kernel.org>); Wed, 7 Sep 2011 16:16:02 -0400
|
||||
Original-Received: by vxj15 with SMTP id 15so31147vxj.19
|
||||
for <linux-input@vger.kernel.org>; Wed, 07 Sep 2011 13:16:02 -0700 (PDT)
|
||||
Original-Received: by 10.52.69.210 with SMTP id g18mr64348vdu.133.1315426562281;
|
||||
Wed, 07 Sep 2011 13:16:02 -0700 (PDT)
|
||||
Original-Received: from Caligula ([140.247.246.50])
|
||||
by mx.google.com with ESMTPS id ch2sm944169vdc.19.2011.09.07.13.16.01
|
||||
(version=TLSv1/SSLv3 cipher=OTHER);
|
||||
Wed, 07 Sep 2011 13:16:01 -0700 (PDT)
|
||||
Content-Disposition: inline
|
||||
User-Agent: Mutt/1.5.21 (2010-09-15)
|
||||
Original-Sender: linux-input-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-input.vger.kernel.org>
|
||||
X-Mailing-List: linux-input@vger.kernel.org
|
||||
Xref: news.gmane.org gmane.linux.kernel.input:21462
|
||||
Archived-At: <http://permalink.gmane.org/gmane.linux.kernel.input/21462>
|
||||
|
||||
This patch adds support for the Apple MacBookAir4,1 released in July
|
||||
2011. It was inspired by Joshua Dillon's patch for the MacBookAir4,2
|
||||
posted on http://www.almostsure.com/mba42/hid-apple-dkms.patch.
|
||||
|
||||
Signed-off-by: Pieter-Augustijn Van Malleghem <p-a@scarlet.be>
|
||||
diff -uNr linux/drivers/hid/hid-apple.c patched/drivers/hid/hid-apple.c
|
||||
--- linux/drivers/hid/hid-apple.c 2011-09-06 23:41:58.000000000 -0400
|
||||
+++ patched/drivers/hid/hid-apple.c 2011-09-06 23:53:05.000000000 -0400
|
||||
@@ -183,6 +183,9 @@
|
||||
if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI &&
|
||||
hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS)
|
||||
table = macbookair_fn_keys;
|
||||
+ else if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI &&
|
||||
+ hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS)
|
||||
+ table = apple_fn_keys;
|
||||
else if (hid->product < 0x21d || hid->product >= 0x300)
|
||||
table = powerbook_fn_keys;
|
||||
else
|
||||
@@ -493,6 +499,12 @@
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI),
|
||||
+ .driver_data = APPLE_HAS_FN },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO),
|
||||
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS),
|
||||
+ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
|
||||
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
|
||||
diff -uNr linux/drivers/hid/hid-core.c patched/drivers/hid/hid-core.c
|
||||
--- linux/drivers/hid/hid-core.c 2011-09-06 23:41:58.000000000 -0400
|
||||
+++ patched/drivers/hid/hid-core.c 2011-09-06 23:56:22.000000000 -0400
|
||||
@@ -1340,6 +1340,9 @@
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ISO) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_JIS) },
|
||||
@@ -1892,6 +1895,9 @@
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
|
||||
{ }
|
||||
diff -uNr linux/drivers/hid/hid-ids.h patched/drivers/hid/hid-ids.h
|
||||
--- linux/drivers/hid/hid-ids.h 2011-09-06 23:41:58.000000000 -0400
|
||||
+++ patched/drivers/hid/hid-ids.h 2011-09-06 23:57:39.000000000 -0400
|
||||
@@ -109,6 +109,9 @@
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI 0x0245
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5_ISO 0x0246
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5_JIS 0x0247
|
||||
+#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI 0x0249
|
||||
+#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO 0x024a
|
||||
+#define USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS 0x024b
|
||||
#define USB_DEVICE_ID_APPLE_ALU_REVB_ANSI 0x024f
|
||||
#define USB_DEVICE_ID_APPLE_ALU_REVB_ISO 0x0250
|
||||
#define USB_DEVICE_ID_APPLE_ALU_REVB_JIS 0x0251
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-input" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
commit 9d4c522a113f6caa8b792ae829a25490fa87b1a2
|
||||
Author: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
Date: Fri Aug 19 16:11:23 2011 +0800
|
||||
|
||||
crypto: cryptd - Use subsys_initcall to prevent races with aesni
|
||||
|
||||
As cryptd is depeneded on by other algorithms such as aesni-intel,
|
||||
it needs to be registered before them. When everything is built
|
||||
as modules, this occurs naturally. However, for this to work when
|
||||
they are built-in, we need to use subsys_initcall in cryptd.
|
||||
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
|
||||
diff --git a/crypto/cryptd.c b/crypto/cryptd.c
|
||||
index e46d21a..671d4d6 100644
|
||||
--- a/crypto/cryptd.c
|
||||
+++ b/crypto/cryptd.c
|
||||
@@ -945,7 +945,7 @@ static void __exit cryptd_exit(void)
|
||||
crypto_unregister_template(&cryptd_tmpl);
|
||||
}
|
||||
|
||||
-module_init(cryptd_init);
|
||||
+subsys_initcall(cryptd_init);
|
||||
module_exit(cryptd_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
|
@ -1,116 +0,0 @@
|
|||
epoll can acquire multiple ep->mutex on multiple "struct eventpoll"s
|
||||
at once in the case where one epoll fd is monitoring another epoll
|
||||
fd. This is perfectly OK, since we're careful about the lock ordering,
|
||||
but causes spurious lockdep warnings. Annotate the recursion using
|
||||
mutex_lock_nested, and add a comment explaining the nesting rules for
|
||||
good measure.
|
||||
|
||||
Reported-by: Paul Bolle <pebolle@tiscali.nl>
|
||||
Signed-off-by: Nelson Elhage <nelhage@nelhage.com>
|
||||
---
|
||||
I've tested this on a synthetic epoll test case, that just adds e1 to
|
||||
e2 and then does an epoll_wait(). I verified that it caused lockdep
|
||||
problems on 3.0 and that this patch fixed it, but I haven't done more
|
||||
extensive testing. Paul, are you able to test systemd against this?
|
||||
|
||||
fs/eventpoll.c | 25 ++++++++++++++++++-------
|
||||
1 files changed, 18 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/fs/eventpoll.c b/fs/eventpoll.c
|
||||
index f9cfd16..0cb7bc6 100644
|
||||
--- a/fs/eventpoll.c
|
||||
+++ b/fs/eventpoll.c
|
||||
@@ -76,6 +76,15 @@
|
||||
* Events that require holding "epmutex" are very rare, while for
|
||||
* normal operations the epoll private "ep->mtx" will guarantee
|
||||
* a better scalability.
|
||||
+ * It is possible to acquire multiple "ep->mtx"es at once in the case
|
||||
+ * when one epoll fd is added to another. In this case, we always
|
||||
+ * acquire the locks in the order of nesting (i.e. after epoll_ctl(e1,
|
||||
+ * EPOLL_CTL_ADD, e2), e1->mtx will always be acquired before
|
||||
+ * e2->mtx). Since we disallow cycles of epoll file descriptors, this
|
||||
+ * ensures that the mutexes are well-ordered. In order to communicate
|
||||
+ * this nesting to lockdep, when walking a tree of epoll file
|
||||
+ * descriptors, we use the current recursion depth as the lockdep
|
||||
+ * subkey.
|
||||
*/
|
||||
|
||||
/* Epoll private bits inside the event mask */
|
||||
@@ -464,13 +473,15 @@ static void ep_unregister_pollwait(struct eventpoll *ep, struct epitem *epi)
|
||||
* @ep: Pointer to the epoll private data structure.
|
||||
* @sproc: Pointer to the scan callback.
|
||||
* @priv: Private opaque data passed to the @sproc callback.
|
||||
+ * @depth: The current depth of recursive f_op->poll calls.
|
||||
*
|
||||
* Returns: The same integer error code returned by the @sproc callback.
|
||||
*/
|
||||
static int ep_scan_ready_list(struct eventpoll *ep,
|
||||
int (*sproc)(struct eventpoll *,
|
||||
struct list_head *, void *),
|
||||
- void *priv)
|
||||
+ void *priv,
|
||||
+ int depth)
|
||||
{
|
||||
int error, pwake = 0;
|
||||
unsigned long flags;
|
||||
@@ -481,7 +492,7 @@ static int ep_scan_ready_list(struct eventpoll *ep,
|
||||
* We need to lock this because we could be hit by
|
||||
* eventpoll_release_file() and epoll_ctl().
|
||||
*/
|
||||
- mutex_lock(&ep->mtx);
|
||||
+ mutex_lock_nested(&ep->mtx, depth);
|
||||
|
||||
/*
|
||||
* Steal the ready list, and re-init the original one to the
|
||||
@@ -670,7 +681,7 @@ static int ep_read_events_proc(struct eventpoll *ep, struct list_head *head,
|
||||
|
||||
static int ep_poll_readyevents_proc(void *priv, void *cookie, int call_nests)
|
||||
{
|
||||
- return ep_scan_ready_list(priv, ep_read_events_proc, NULL);
|
||||
+ return ep_scan_ready_list(priv, ep_read_events_proc, NULL, call_nests + 1);
|
||||
}
|
||||
|
||||
static unsigned int ep_eventpoll_poll(struct file *file, poll_table *wait)
|
||||
@@ -737,7 +748,7 @@ void eventpoll_release_file(struct file *file)
|
||||
|
||||
ep = epi->ep;
|
||||
list_del_init(&epi->fllink);
|
||||
- mutex_lock(&ep->mtx);
|
||||
+ mutex_lock_nested(&ep->mtx, 0);
|
||||
ep_remove(ep, epi);
|
||||
mutex_unlock(&ep->mtx);
|
||||
}
|
||||
@@ -1134,7 +1145,7 @@ static int ep_send_events(struct eventpoll *ep,
|
||||
esed.maxevents = maxevents;
|
||||
esed.events = events;
|
||||
|
||||
- return ep_scan_ready_list(ep, ep_send_events_proc, &esed);
|
||||
+ return ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0);
|
||||
}
|
||||
|
||||
static inline struct timespec ep_set_mstimeout(long ms)
|
||||
@@ -1267,7 +1278,7 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)
|
||||
struct rb_node *rbp;
|
||||
struct epitem *epi;
|
||||
|
||||
- mutex_lock(&ep->mtx);
|
||||
+ mutex_lock_nested(&ep->mtx, call_nests + 1);
|
||||
for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) {
|
||||
epi = rb_entry(rbp, struct epitem, rbn);
|
||||
if (unlikely(is_file_epoll(epi->ffd.file))) {
|
||||
@@ -1409,7 +1420,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
|
||||
}
|
||||
|
||||
|
||||
- mutex_lock(&ep->mtx);
|
||||
+ mutex_lock_nested(&ep->mtx, 0);
|
||||
|
||||
/*
|
||||
* Try to lookup the file inside our RB tree, Since we grabbed "mtx"
|
||||
--
|
||||
1.7.4.1
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
@ -1,43 +0,0 @@
|
|||
This fix regression introduced by commit:
|
||||
|
||||
commit 15b3f3b006b42a678523cad989bfd60b76bf4403
|
||||
Author: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
||||
Date: Fri Jun 3 07:54:13 2011 -0700
|
||||
|
||||
iwlagn: set smps mode after assoc for 1000 device
|
||||
|
||||
Also remove unneeded brackets on the way.
|
||||
|
||||
Address:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=744155
|
||||
|
||||
If fix will not get 3.1 release, it should be applied in 3.1 stable.
|
||||
|
||||
Cc: stable@kernel.org # 3.1+
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
|
||||
index ca632f9..5004342 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
|
||||
@@ -296,8 +296,8 @@ static int iwlagn_rxon_connect(struct iwl_priv *priv,
|
||||
return ret;
|
||||
}
|
||||
|
||||
- if ((ctx->vif && ctx->vif->type == NL80211_IFTYPE_STATION) &&
|
||||
- priv->cfg->ht_params->smps_mode)
|
||||
+ if (ctx->vif && ctx->vif->type == NL80211_IFTYPE_STATION &&
|
||||
+ priv->cfg->ht_params && priv->cfg->ht_params->smps_mode)
|
||||
ieee80211_request_smps(ctx->vif,
|
||||
priv->cfg->ht_params->smps_mode);
|
||||
|
||||
--
|
||||
1.7.1
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
51
kernel.spec
51
kernel.spec
|
@ -51,7 +51,7 @@ Summary: The Linux kernel
|
|||
# For non-released -rc kernels, this will be prepended with "0.", so
|
||||
# for example a 3 here will become 0.3
|
||||
#
|
||||
%global baserelease 2
|
||||
%global baserelease 1
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
|
@ -65,7 +65,7 @@ Summary: The Linux kernel
|
|||
# Do we have a -stable update to apply?
|
||||
%define stable_update 1
|
||||
# Is it a -stable RC?
|
||||
%define stable_rc 1
|
||||
%define stable_rc 0
|
||||
# Set rpm version accordingly
|
||||
%if 0%{?stable_update}
|
||||
%define stablerev %{stable_update}
|
||||
|
@ -708,8 +708,6 @@ Patch2900: linux-2.6-v4l-dvb-update.patch
|
|||
Patch2901: linux-2.6-v4l-dvb-experimental.patch
|
||||
Patch2902: linux-2.6-v4l-dvb-uvcvideo-update.patch
|
||||
|
||||
Patch2903: media-DiBcom-protect-the-I2C-bufer-access.patch
|
||||
Patch2904: media-dib0700-protect-the-dib0700-buffer-access.patch
|
||||
Patch2905: media-dib0700-correct-error-message.patch
|
||||
|
||||
Patch3000: rcutree-avoid-false-quiescent-states.patch
|
||||
|
@ -725,12 +723,9 @@ Patch12016: disable-i8042-check-on-apple-mac.patch
|
|||
|
||||
Patch12021: udlfb-bind-framebuffer-to-interface.patch
|
||||
|
||||
Patch12023: ums-realtek-driver-uses-stack-memory-for-DMA.patch
|
||||
Patch12024: epoll-fix-spurious-lockdep-warnings.patch
|
||||
Patch12025: rcu-avoid-just-onlined-cpu-resched.patch
|
||||
Patch12026: block-stray-block-put-after-teardown.patch
|
||||
Patch12027: usb-add-quirk-for-logitech-webcams.patch
|
||||
Patch12029: crypto-register-cryptd-first.patch
|
||||
Patch12030: epoll-limit-paths.patch
|
||||
|
||||
Patch12303: dmar-disable-when-ricoh-multifunction.patch
|
||||
|
@ -738,23 +733,14 @@ Patch12303: dmar-disable-when-ricoh-multifunction.patch
|
|||
Patch13002: revert-efi-rtclock.patch
|
||||
Patch13003: efi-dont-map-boot-services-on-32bit.patch
|
||||
|
||||
Patch13007: add-macbookair41-keyboard.patch
|
||||
|
||||
Patch13009: hvcs_pi_buf_alloc.patch
|
||||
|
||||
Patch13013: powerpc-Fix-deadlock-in-icswx-code.patch
|
||||
|
||||
Patch13014: iwlagn-fix-ht_params-NULL-pointer-dereference.patch
|
||||
|
||||
Patch20000: utrace.patch
|
||||
|
||||
# Flattened devicetree support
|
||||
Patch21000: arm-omap-dt-compat.patch
|
||||
Patch21001: arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
|
||||
#rhbz #722509
|
||||
Patch21002: mmc-Always-check-for-lower-base-frequency-quirk-for-.patch
|
||||
|
||||
#rhbz #735946
|
||||
Patch21020: 0001-mm-vmscan-Limit-direct-reclaim-for-higher-order-allo.patch
|
||||
Patch21021: 0002-mm-Abort-reclaim-compaction-if-compaction-can-procee.patch
|
||||
|
@ -768,19 +754,12 @@ Patch21050: xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
|
|||
|
||||
Patch21070: oom-fix-integer-overflow-of-points.patch
|
||||
|
||||
#rhbz 706574
|
||||
Patch21071: WMI-properly-cleanup-devices-to-avoid-crashes.patch
|
||||
|
||||
#rhbz 728607
|
||||
Patch21060: elantech.patch
|
||||
|
||||
#rhbz 748210
|
||||
Patch21061: ideapad-Check-if-acpi-already-handle-backlight.patch
|
||||
|
||||
#rhbz 731365
|
||||
Patch21062: mac80211-fix-remain_off_channel-regression.patch
|
||||
Patch21063: mac80211-config-hw-when-going-back-on-channel.patch
|
||||
|
||||
#rhbz752176
|
||||
Patch21080: sysfs-msi-irq-per-device.patch
|
||||
|
||||
|
@ -1379,7 +1358,6 @@ ApplyPatch linux-2.6-silence-acpi-blacklist.patch
|
|||
ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
|
||||
ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
|
||||
ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
|
||||
#ApplyPatch linux-2.6-v4l-dvb-uvcvideo-update.patch
|
||||
|
||||
# Platform fixes not sent for -stable
|
||||
ApplyPatch samsung-laptop-brightness-fixes-3.2.patch
|
||||
|
@ -1392,34 +1370,19 @@ ApplyPatch disable-i8042-check-on-apple-mac.patch
|
|||
ApplyPatch add-appleir-usb-driver.patch
|
||||
|
||||
ApplyPatch udlfb-bind-framebuffer-to-interface.patch
|
||||
#ApplyPatch ums-realtek-driver-uses-stack-memory-for-DMA.patch
|
||||
#ApplyPatch epoll-fix-spurious-lockdep-warnings.patch
|
||||
ApplyPatch epoll-limit-paths.patch
|
||||
ApplyPatch rcu-avoid-just-onlined-cpu-resched.patch
|
||||
ApplyPatch block-stray-block-put-after-teardown.patch
|
||||
ApplyPatch usb-add-quirk-for-logitech-webcams.patch
|
||||
|
||||
#ApplyPatch crypto-register-cryptd-first.patch
|
||||
|
||||
# rhbz#605888
|
||||
ApplyPatch dmar-disable-when-ricoh-multifunction.patch
|
||||
|
||||
ApplyPatch revert-efi-rtclock.patch
|
||||
ApplyPatch efi-dont-map-boot-services-on-32bit.patch
|
||||
|
||||
#ApplyPatch add-macbookair41-keyboard.patch
|
||||
|
||||
ApplyPatch hvcs_pi_buf_alloc.patch
|
||||
|
||||
#ApplyPatch powerpc-Fix-deadlock-in-icswx-code.patch
|
||||
|
||||
#ApplyPatch iwlagn-fix-ht_params-NULL-pointer-dereference.patch
|
||||
|
||||
#rhbz #722509
|
||||
#ApplyPatch mmc-Always-check-for-lower-base-frequency-quirk-for-.patch
|
||||
|
||||
#ApplyPatch media-DiBcom-protect-the-I2C-bufer-access.patch
|
||||
#ApplyPatch media-dib0700-protect-the-dib0700-buffer-access.patch
|
||||
ApplyPatch media-dib0700-correct-error-message.patch
|
||||
|
||||
# utrace.
|
||||
|
@ -1436,19 +1399,12 @@ ApplyPatch benet-remove-bogus-unlikely-on-vlan-check.patch
|
|||
#rhbz 750402
|
||||
ApplyPatch oom-fix-integer-overflow-of-points.patch
|
||||
|
||||
#rhbz 706574
|
||||
#ApplyPatch WMI-properly-cleanup-devices-to-avoid-crashes.patch
|
||||
|
||||
#rhbz 728607
|
||||
ApplyPatch elantech.patch
|
||||
|
||||
#rhbz 748210
|
||||
ApplyPatch ideapad-Check-if-acpi-already-handle-backlight.patch
|
||||
|
||||
#rhbz 731365
|
||||
#ApplyPatch mac80211-fix-remain_off_channel-regression.patch
|
||||
#ApplyPatch mac80211-config-hw-when-going-back-on-channel.patch
|
||||
|
||||
#rhbz 752176
|
||||
ApplyPatch sysfs-msi-irq-per-device.patch
|
||||
|
||||
|
@ -2158,6 +2114,9 @@ fi
|
|||
# and build.
|
||||
|
||||
%changelog
|
||||
* Fri Nov 11 2011 Josh Boyer <jwboyer@redhat.com> 3.1.1-1
|
||||
- Linux 3.1.1
|
||||
|
||||
* Fri Nov 11 2011 John W. Linville <linville@redhat.com>
|
||||
- Remove overlap between bcma/b43 and brcmsmac and reenable bcm4331
|
||||
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
From 776308dd5fa8a41e8bbb79818a66bd68a7db757e Mon Sep 17 00:00:00 2001
|
||||
From: Eliad Peller <eliad@wizery.com>
|
||||
Date: Thu, 20 Oct 2011 19:05:50 +0200
|
||||
Subject: [PATCH] mac80211: config hw when going back on-channel
|
||||
|
||||
When going back on-channel, we should reconfigure
|
||||
the hw iff the hardware is not already configured
|
||||
to the operational channel.
|
||||
|
||||
Signed-off-by: Eliad Peller <eliad@wizery.com>
|
||||
Cc: stable@kernel.org # 2.6.39+
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
net/mac80211/work.c | 3 +--
|
||||
1 files changed, 1 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/mac80211/work.c b/net/mac80211/work.c
|
||||
index bf5be22..6c53b6d 100644
|
||||
--- a/net/mac80211/work.c
|
||||
+++ b/net/mac80211/work.c
|
||||
@@ -1091,7 +1091,6 @@ static void ieee80211_work_work(struct work_struct *work)
|
||||
}
|
||||
|
||||
if (!remain_off_channel && local->tmp_channel) {
|
||||
- bool on_oper_chan = ieee80211_cfg_on_oper_channel(local);
|
||||
local->tmp_channel = NULL;
|
||||
/* If tmp_channel wasn't operating channel, then
|
||||
* we need to go back on-channel.
|
||||
@@ -1101,7 +1100,7 @@ static void ieee80211_work_work(struct work_struct *work)
|
||||
* we still need to do a hardware config. Currently,
|
||||
* we cannot be here while scanning, however.
|
||||
*/
|
||||
- if (ieee80211_cfg_on_oper_channel(local) && !on_oper_chan)
|
||||
+ if (!ieee80211_cfg_on_oper_channel(local))
|
||||
ieee80211_hw_config(local, 0);
|
||||
|
||||
/* At the least, we need to disable offchannel_ps,
|
||||
--
|
||||
1.7.6.2
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
From 682ba5a44516529b29fc780c055e06104d36e31e Mon Sep 17 00:00:00 2001
|
||||
From: Eliad Peller <eliad@wizery.com>
|
||||
Date: Thu, 20 Oct 2011 19:05:49 +0200
|
||||
Subject: [PATCH] mac80211: fix remain_off_channel regression
|
||||
|
||||
The offchannel code is currently broken - we should
|
||||
remain_off_channel if the work was started, and
|
||||
the work's channel and channel_type are the same
|
||||
as local->tmp_channel and local->tmp_channel_type.
|
||||
|
||||
However, if wk->chan_type and local->tmp_channel_type
|
||||
coexist (e.g. have the same channel type), we won't
|
||||
remain_off_channel.
|
||||
|
||||
This behavior was introduced by commit da2fd1f
|
||||
("mac80211: Allow work items to use existing
|
||||
channel type.")
|
||||
|
||||
Tested-by: Ben Greear <greearb@candelatech.com>
|
||||
Signed-off-by: Eliad Peller <eliad@wizery.com>
|
||||
Cc: stable@kernel.org # 2.6.39+
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
net/mac80211/work.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/mac80211/work.c b/net/mac80211/work.c
|
||||
index 94472eb..bf5be22 100644
|
||||
--- a/net/mac80211/work.c
|
||||
+++ b/net/mac80211/work.c
|
||||
@@ -1084,8 +1084,8 @@ static void ieee80211_work_work(struct work_struct *work)
|
||||
continue;
|
||||
if (wk->chan != local->tmp_channel)
|
||||
continue;
|
||||
- if (ieee80211_work_ct_coexists(wk->chan_type,
|
||||
- local->tmp_channel_type))
|
||||
+ if (!ieee80211_work_ct_coexists(wk->chan_type,
|
||||
+ local->tmp_channel_type))
|
||||
continue;
|
||||
remain_off_channel = true;
|
||||
}
|
||||
--
|
||||
1.7.6.2
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,248 +0,0 @@
|
|||
From: Olivier Grenie <olivier.grenie@dibcom.fr>
|
||||
Date: Mon, 1 Aug 2011 15:45:58 +0000 (-0300)
|
||||
Subject: [media] dib0700: protect the dib0700 buffer access
|
||||
X-Git-Tag: next-20110927~67^2~4^2~224
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fnext%2Flinux-next.git;a=commitdiff_plain;h=bff469f4167fdabfe15294f375577d7eadbaa1bb
|
||||
|
||||
[media] dib0700: protect the dib0700 buffer access
|
||||
|
||||
This patch protects the common buffer access inside the dib0700 in order
|
||||
to manage concurrent access. This protection is done using mutex.
|
||||
|
||||
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Cc: Florian Mickler <florian@mickler.org>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Javier Marcet <javier@marcet.info>
|
||||
Signed-off-by: Olivier Grenie <olivier.grenie@dibcom.fr>
|
||||
Signed-off-by: Patrick Boettcher <patrick.boettcher@dibcom.fr>
|
||||
[mchehab@redhat.com: dprint requires 3 arguments. Replaced by dib_info]
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c b/drivers/media/dvb/dvb-usb/dib0700_core.c
|
||||
index 5eb91b4..a224e94 100644
|
||||
--- a/drivers/media/dvb/dvb-usb/dib0700_core.c
|
||||
+++ b/drivers/media/dvb/dvb-usb/dib0700_core.c
|
||||
@@ -30,6 +30,11 @@ int dib0700_get_version(struct dvb_usb_device *d, u32 *hwversion,
|
||||
struct dib0700_state *st = d->priv;
|
||||
int ret;
|
||||
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
ret = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0),
|
||||
REQUEST_GET_VERSION,
|
||||
USB_TYPE_VENDOR | USB_DIR_IN, 0, 0,
|
||||
@@ -46,6 +51,7 @@ int dib0700_get_version(struct dvb_usb_device *d, u32 *hwversion,
|
||||
if (fwtype != NULL)
|
||||
*fwtype = (st->buf[12] << 24) | (st->buf[13] << 16) |
|
||||
(st->buf[14] << 8) | st->buf[15];
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -108,7 +114,12 @@ int dib0700_ctrl_rd(struct dvb_usb_device *d, u8 *tx, u8 txlen, u8 *rx, u8 rxlen
|
||||
int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_dir, u8 gpio_val)
|
||||
{
|
||||
struct dib0700_state *st = d->priv;
|
||||
- s16 ret;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
st->buf[0] = REQUEST_SET_GPIO;
|
||||
st->buf[1] = gpio;
|
||||
@@ -116,6 +127,7 @@ int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_
|
||||
|
||||
ret = dib0700_ctrl_wr(d, st->buf, 3);
|
||||
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -125,6 +137,11 @@ static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets)
|
||||
int ret;
|
||||
|
||||
if (st->fw_version >= 0x10201) {
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
st->buf[0] = REQUEST_SET_USB_XFER_LEN;
|
||||
st->buf[1] = (nb_ts_packets >> 8) & 0xff;
|
||||
st->buf[2] = nb_ts_packets & 0xff;
|
||||
@@ -132,6 +149,7 @@ static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets)
|
||||
deb_info("set the USB xfer len to %i Ts packet\n", nb_ts_packets);
|
||||
|
||||
ret = dib0700_ctrl_wr(d, st->buf, 3);
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
} else {
|
||||
deb_info("this firmware does not allow to change the USB xfer len\n");
|
||||
ret = -EIO;
|
||||
@@ -208,6 +226,10 @@ static int dib0700_i2c_xfer_new(struct i2c_adapter *adap, struct i2c_msg *msg,
|
||||
|
||||
} else {
|
||||
/* Write request */
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
st->buf[0] = REQUEST_NEW_I2C_WRITE;
|
||||
st->buf[1] = msg[i].addr << 1;
|
||||
st->buf[2] = (en_start << 7) | (en_stop << 6) |
|
||||
@@ -227,6 +249,7 @@ static int dib0700_i2c_xfer_new(struct i2c_adapter *adap, struct i2c_msg *msg,
|
||||
USB_TYPE_VENDOR | USB_DIR_OUT,
|
||||
0, 0, st->buf, msg[i].len + 4,
|
||||
USB_CTRL_GET_TIMEOUT);
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
if (result < 0) {
|
||||
deb_info("i2c write error (status = %d)\n", result);
|
||||
break;
|
||||
@@ -249,6 +272,10 @@ static int dib0700_i2c_xfer_legacy(struct i2c_adapter *adap,
|
||||
|
||||
if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
|
||||
return -EAGAIN;
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
/* fill in the address */
|
||||
@@ -279,6 +306,7 @@ static int dib0700_i2c_xfer_legacy(struct i2c_adapter *adap,
|
||||
break;
|
||||
}
|
||||
}
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
mutex_unlock(&d->i2c_mutex);
|
||||
|
||||
return i;
|
||||
@@ -337,7 +365,12 @@ static int dib0700_set_clock(struct dvb_usb_device *d, u8 en_pll,
|
||||
u16 pll_loopdiv, u16 free_div, u16 dsuScaler)
|
||||
{
|
||||
struct dib0700_state *st = d->priv;
|
||||
- s16 ret;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
st->buf[0] = REQUEST_SET_CLOCK;
|
||||
st->buf[1] = (en_pll << 7) | (pll_src << 6) |
|
||||
@@ -352,6 +385,7 @@ static int dib0700_set_clock(struct dvb_usb_device *d, u8 en_pll,
|
||||
st->buf[9] = dsuScaler & 0xff; /* LSB */
|
||||
|
||||
ret = dib0700_ctrl_wr(d, st->buf, 10);
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -360,10 +394,16 @@ int dib0700_set_i2c_speed(struct dvb_usb_device *d, u16 scl_kHz)
|
||||
{
|
||||
struct dib0700_state *st = d->priv;
|
||||
u16 divider;
|
||||
+ int ret;
|
||||
|
||||
if (scl_kHz == 0)
|
||||
return -EINVAL;
|
||||
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
st->buf[0] = REQUEST_SET_I2C_PARAM;
|
||||
divider = (u16) (30000 / scl_kHz);
|
||||
st->buf[1] = 0;
|
||||
@@ -379,7 +419,11 @@ int dib0700_set_i2c_speed(struct dvb_usb_device *d, u16 scl_kHz)
|
||||
deb_info("setting I2C speed: %04x %04x %04x (%d kHz).",
|
||||
(st->buf[2] << 8) | (st->buf[3]), (st->buf[4] << 8) |
|
||||
st->buf[5], (st->buf[6] << 8) | st->buf[7], scl_kHz);
|
||||
- return dib0700_ctrl_wr(d, st->buf, 8);
|
||||
+
|
||||
+ ret = dib0700_ctrl_wr(d, st->buf, 8);
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -515,6 +559,11 @@ int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
|
||||
}
|
||||
}
|
||||
|
||||
+ if (mutex_lock_interruptible(&adap->dev->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
st->buf[0] = REQUEST_ENABLE_VIDEO;
|
||||
/* this bit gives a kind of command,
|
||||
* rather than enabling something or not */
|
||||
@@ -548,7 +597,10 @@ int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
|
||||
|
||||
deb_info("data for streaming: %x %x\n", st->buf[1], st->buf[2]);
|
||||
|
||||
- return dib0700_ctrl_wr(adap->dev, st->buf, 4);
|
||||
+ ret = dib0700_ctrl_wr(adap->dev, st->buf, 4);
|
||||
+ mutex_unlock(&adap->dev->usb_mutex);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type)
|
||||
@@ -557,6 +609,11 @@ int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type)
|
||||
struct dib0700_state *st = d->priv;
|
||||
int new_proto, ret;
|
||||
|
||||
+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) {
|
||||
+ deb_info("could not acquire lock");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
st->buf[0] = REQUEST_SET_RC;
|
||||
st->buf[1] = 0;
|
||||
st->buf[2] = 0;
|
||||
@@ -567,23 +624,29 @@ int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type)
|
||||
else if (rc_type == RC_TYPE_NEC)
|
||||
new_proto = 0;
|
||||
else if (rc_type == RC_TYPE_RC6) {
|
||||
- if (st->fw_version < 0x10200)
|
||||
- return -EINVAL;
|
||||
+ if (st->fw_version < 0x10200) {
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
new_proto = 2;
|
||||
- } else
|
||||
- return -EINVAL;
|
||||
+ } else {
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
st->buf[1] = new_proto;
|
||||
|
||||
ret = dib0700_ctrl_wr(d, st->buf, 3);
|
||||
if (ret < 0) {
|
||||
err("ir protocol setup failed");
|
||||
- return ret;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
d->props.rc.core.protocol = rc_type;
|
||||
|
||||
+out:
|
||||
+ mutex_unlock(&d->usb_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
From 65ff02dff67bf26a9c27d9aa11a30eaf3d28469e Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Wed, 5 Oct 2011 11:29:57 -0400
|
||||
Subject: [PATCH] mmc: Always check for lower base frequency quirk for Ricoh
|
||||
1180:e823
|
||||
|
||||
Commit 15bed0f2f added a quirk for the e823 Ricoh card reader to lower the
|
||||
base frequency. However, the quirk first checks to see if the proprietary
|
||||
MMC controller is disabled, and returns if so. On some devices, such as the
|
||||
Lenovo X220, the MMC controller is already disabled by firmware it seems,
|
||||
but the frequency change is still needed so sdhci-pci can talk to the cards.
|
||||
Since the MMC controller is disabled, the frequency fixup was never being run
|
||||
on these machines.
|
||||
|
||||
This moves the e823 check above the MMC controller check so that it always
|
||||
gets run.
|
||||
|
||||
This fixes https://bugzilla.redhat.com/show_bug.cgi?id=722509
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
drivers/pci/quirks.c | 28 ++++++++++++++--------------
|
||||
1 files changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 1196f61..cec4629 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -2745,20 +2745,6 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
|
||||
/* disable must be done via function #0 */
|
||||
if (PCI_FUNC(dev->devfn))
|
||||
return;
|
||||
-
|
||||
- pci_read_config_byte(dev, 0xCB, &disable);
|
||||
-
|
||||
- if (disable & 0x02)
|
||||
- return;
|
||||
-
|
||||
- pci_read_config_byte(dev, 0xCA, &write_enable);
|
||||
- pci_write_config_byte(dev, 0xCA, 0x57);
|
||||
- pci_write_config_byte(dev, 0xCB, disable | 0x02);
|
||||
- pci_write_config_byte(dev, 0xCA, write_enable);
|
||||
-
|
||||
- dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n");
|
||||
- dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n");
|
||||
-
|
||||
/*
|
||||
* RICOH 0xe823 SD/MMC card reader fails to recognize
|
||||
* certain types of SD/MMC cards. Lowering the SD base
|
||||
@@ -2781,6 +2767,20 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
|
||||
|
||||
dev_notice(&dev->dev, "MMC controller base frequency changed to 50Mhz.\n");
|
||||
}
|
||||
+
|
||||
+ pci_read_config_byte(dev, 0xCB, &disable);
|
||||
+
|
||||
+ if (disable & 0x02)
|
||||
+ return;
|
||||
+
|
||||
+ pci_read_config_byte(dev, 0xCA, &write_enable);
|
||||
+ pci_write_config_byte(dev, 0xCA, 0x57);
|
||||
+ pci_write_config_byte(dev, 0xCB, disable | 0x02);
|
||||
+ pci_write_config_byte(dev, 0xCA, write_enable);
|
||||
+
|
||||
+ dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n");
|
||||
+ dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n");
|
||||
+
|
||||
}
|
||||
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
|
||||
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
|
||||
--
|
||||
1.7.6.4
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
From patchwork Wed Sep 14 19:43:15 2011
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
Subject: powerpc: Fix deadlock in icswx code
|
||||
Date: Wed, 14 Sep 2011 09:43:15 -0000
|
||||
From: Anton Blanchard <anton@samba.org>
|
||||
X-Patchwork-Id: 114701
|
||||
Message-Id: <20110915054315.5e5ae062@kryten>
|
||||
To: benh@kernel.crashing.org, paulus@samba.org
|
||||
Cc: linuxppc-dev@lists.ozlabs.org
|
||||
|
||||
The icswx code introduced an A-B B-A deadlock:
|
||||
|
||||
CPU0 CPU1
|
||||
---- ----
|
||||
lock(&anon_vma->mutex);
|
||||
lock(&mm->mmap_sem);
|
||||
lock(&anon_vma->mutex);
|
||||
lock(&mm->mmap_sem);
|
||||
|
||||
Instead of using the mmap_sem to keep mm_users constant, take the
|
||||
page table spinlock.
|
||||
|
||||
Signed-off-by: Anton Blanchard <anton@samba.org>
|
||||
Cc: <stable@kernel.org>
|
||||
|
||||
---
|
||||
|
||||
|
||||
diff --git a/arch/powerpc/mm/mmu_context_hash64.c b/arch/powerpc/mm/mmu_context_hash64.c
|
||||
index 3bafc3d..4ff587e 100644
|
||||
--- a/arch/powerpc/mm/mmu_context_hash64.c
|
||||
+++ b/arch/powerpc/mm/mmu_context_hash64.c
|
||||
@@ -136,8 +136,8 @@ int use_cop(unsigned long acop, struct mm_struct *mm)
|
||||
if (!mm || !acop)
|
||||
return -EINVAL;
|
||||
|
||||
- /* We need to make sure mm_users doesn't change */
|
||||
- down_read(&mm->mmap_sem);
|
||||
+ /* The page_table_lock ensures mm_users won't change under us */
|
||||
+ spin_lock(&mm->page_table_lock);
|
||||
spin_lock(mm->context.cop_lockp);
|
||||
|
||||
if (mm->context.cop_pid == COP_PID_NONE) {
|
||||
@@ -164,7 +164,7 @@ int use_cop(unsigned long acop, struct mm_struct *mm)
|
||||
|
||||
out:
|
||||
spin_unlock(mm->context.cop_lockp);
|
||||
- up_read(&mm->mmap_sem);
|
||||
+ spin_unlock(&mm->page_table_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -185,8 +185,8 @@ void drop_cop(unsigned long acop, struct mm_struct *mm)
|
||||
if (WARN_ON_ONCE(!mm))
|
||||
return;
|
||||
|
||||
- /* We need to make sure mm_users doesn't change */
|
||||
- down_read(&mm->mmap_sem);
|
||||
+ /* The page_table_lock ensures mm_users won't change under us */
|
||||
+ spin_lock(&mm->page_table_lock);
|
||||
spin_lock(mm->context.cop_lockp);
|
||||
|
||||
mm->context.acop &= ~acop;
|
||||
@@ -213,7 +213,7 @@ void drop_cop(unsigned long acop, struct mm_struct *mm)
|
||||
}
|
||||
|
||||
spin_unlock(mm->context.cop_lockp);
|
||||
- up_read(&mm->mmap_sem);
|
||||
+ spin_unlock(&mm->page_table_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(drop_cop);
|
||||
|
2
sources
2
sources
|
@ -1,2 +1,2 @@
|
|||
8d43453f8159b2332ad410b19d86a931 linux-3.1.tar.bz2
|
||||
0582554c78b9979dc91223e3f4e4ec22 patch-3.1.1-rc1.bz2
|
||||
8eb92cc70e7f8d1d18a349ba8c029d7d patch-3.1.1.bz2
|
||||
|
|
|
@ -1,143 +0,0 @@
|
|||
From patchwork Tue Aug 2 05:04:11 2011
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 8bit
|
||||
Subject: ums-realtek driver uses stack memory for DMA
|
||||
Date: Tue, 02 Aug 2011 05:04:11 -0000
|
||||
From: Adam Cozzette <acozzette@cs.hmc.edu>
|
||||
X-Patchwork-Id: 1028062
|
||||
Message-Id: <20110802050411.GC3857@[192.168.0.12]>
|
||||
To: Josh Boyer <jwboyer@redhat.com>
|
||||
Cc: edwin_rong <edwin_rong@realsil.com.cn>, wwang <wei_wang@realsil.com.cn>,
|
||||
Greg Kroah-Hartman <gregkh@suse.de>, linux-usb@vger.kernel.org,
|
||||
linux-kernel@vger.kernel.org
|
||||
|
||||
On Mon, Aug 01, 2011 at 05:09:06PM -0400, Josh Boyer wrote:
|
||||
> Hello,
|
||||
>
|
||||
> We have a report that the ums-realtek driver is generating a backtrace
|
||||
> due to using stack variables for DMA buffers. The backtrace is below
|
||||
> and you can view the bug report here:
|
||||
> https://bugzilla.redhat.com/show_bug.cgi?id=720054
|
||||
>
|
||||
> Looking through the code, it seems that every call to rts51x_read_mem,
|
||||
> rts51x_write_mem, and rts51x_read_status passes a stack variable to
|
||||
> rts51x_bulk_transport, which then calls usb_stor_bulk_transfer_buf with
|
||||
> this and generates the backtrace. It is my understanding that the
|
||||
> driver should be passing variables that are not on the stack and have
|
||||
> been allocated with memory that will be suitable for the DMA api (e.g.
|
||||
> kmalloc).
|
||||
>
|
||||
> Was this missed during the initial review and is anyone working on
|
||||
> adapting the driver to be compliant?
|
||||
|
||||
Could you try out this patch if it looks ok to you? I have not tested it because
|
||||
unfortunately I don't have the hardware. Right now it generates some compile
|
||||
warnings like this one:
|
||||
|
||||
drivers/usb/storage/realtek_cr.c:419:40: warning: ‘buf[0]’ may be used uninitialized in this function [-Wuninitialized]
|
||||
|
||||
It think they are harmless but I didn't see an obvious way to get rid of them,
|
||||
so if you have any suggestions I would be glad to hear them.
|
||||
|
||||
This patch changed rts51x_read_mem, rts51x_write_mem, and rts51x_read_status to
|
||||
allocate temporary buffers with kmalloc. This way stack addresses are not used
|
||||
for DMA when these functions call rts51x_bulk_transport.
|
||||
|
||||
Signed-off-by: Adam Cozzette <acozzette@cs.hmc.edu>
|
||||
|
||||
---
|
||||
realtek_cr.c | 35 ++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 30 insertions(+), 5 deletions(-)
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
Please read the FAQ at http://www.tux.org/lkml/
|
||||
|
||||
diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
|
||||
index 34adc4b..232167a 100644
|
||||
--- a/drivers/usb/storage/realtek_cr.c
|
||||
+++ b/drivers/usb/storage/realtek_cr.c
|
||||
@@ -320,6 +320,11 @@ static int rts51x_read_mem(struct us_data *us, u16 addr, u8 *data, u16 len)
|
||||
{
|
||||
int retval;
|
||||
u8 cmnd[12] = { 0 };
|
||||
+ u8 *buf;
|
||||
+
|
||||
+ buf = kmalloc(len, GFP_NOIO);
|
||||
+ if (buf == NULL)
|
||||
+ return USB_STOR_TRANSPORT_ERROR;
|
||||
|
||||
US_DEBUGP("%s, addr = 0x%x, len = %d\n", __func__, addr, len);
|
||||
|
||||
@@ -331,10 +336,14 @@ static int rts51x_read_mem(struct us_data *us, u16 addr, u8 *data, u16 len)
|
||||
cmnd[5] = (u8) len;
|
||||
|
||||
retval = rts51x_bulk_transport(us, 0, cmnd, 12,
|
||||
- data, len, DMA_FROM_DEVICE, NULL);
|
||||
- if (retval != USB_STOR_TRANSPORT_GOOD)
|
||||
+ buf, len, DMA_FROM_DEVICE, NULL);
|
||||
+ if (retval != USB_STOR_TRANSPORT_GOOD) {
|
||||
+ kfree(buf);
|
||||
return -EIO;
|
||||
+ }
|
||||
|
||||
+ memcpy(data, buf, len);
|
||||
+ kfree(buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -342,6 +351,12 @@ static int rts51x_write_mem(struct us_data *us, u16 addr, u8 *data, u16 len)
|
||||
{
|
||||
int retval;
|
||||
u8 cmnd[12] = { 0 };
|
||||
+ u8 *buf;
|
||||
+
|
||||
+ buf = kmalloc(len, GFP_NOIO);
|
||||
+ if (buf == NULL)
|
||||
+ return USB_STOR_TRANSPORT_ERROR;
|
||||
+ memcpy(buf, data, len);
|
||||
|
||||
US_DEBUGP("%s, addr = 0x%x, len = %d\n", __func__, addr, len);
|
||||
|
||||
@@ -353,7 +368,8 @@ static int rts51x_write_mem(struct us_data *us, u16 addr, u8 *data, u16 len)
|
||||
cmnd[5] = (u8) len;
|
||||
|
||||
retval = rts51x_bulk_transport(us, 0, cmnd, 12,
|
||||
- data, len, DMA_TO_DEVICE, NULL);
|
||||
+ buf, len, DMA_TO_DEVICE, NULL);
|
||||
+ kfree(buf);
|
||||
if (retval != USB_STOR_TRANSPORT_GOOD)
|
||||
return -EIO;
|
||||
|
||||
@@ -365,6 +381,11 @@ static int rts51x_read_status(struct us_data *us,
|
||||
{
|
||||
int retval;
|
||||
u8 cmnd[12] = { 0 };
|
||||
+ u8 *buf;
|
||||
+
|
||||
+ buf = kmalloc(len, GFP_NOIO);
|
||||
+ if (buf == NULL)
|
||||
+ return USB_STOR_TRANSPORT_ERROR;
|
||||
|
||||
US_DEBUGP("%s, lun = %d\n", __func__, lun);
|
||||
|
||||
@@ -372,10 +393,14 @@ static int rts51x_read_status(struct us_data *us,
|
||||
cmnd[1] = 0x09;
|
||||
|
||||
retval = rts51x_bulk_transport(us, lun, cmnd, 12,
|
||||
- status, len, DMA_FROM_DEVICE, actlen);
|
||||
- if (retval != USB_STOR_TRANSPORT_GOOD)
|
||||
+ buf, len, DMA_FROM_DEVICE, actlen);
|
||||
+ if (retval != USB_STOR_TRANSPORT_GOOD) {
|
||||
+ kfree(buf);
|
||||
return -EIO;
|
||||
+ }
|
||||
|
||||
+ memcpy(status, buf, len);
|
||||
+ kfree(buf);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue