]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 21 Nov 2012 20:28:54 +0000 (12:28 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 21 Nov 2012 20:28:54 +0000 (12:28 -0800)
added patches:
acpi-video-ignore-errors-after-_dod-evaluation.patch
ext4-fix-metadata-checksum-calculation-for-the-superblock.patch
revert-serial-omap-fix-software-flow-control.patch

queue-3.6/acpi-video-ignore-errors-after-_dod-evaluation.patch [new file with mode: 0644]
queue-3.6/ext4-fix-metadata-checksum-calculation-for-the-superblock.patch [new file with mode: 0644]
queue-3.6/revert-serial-omap-fix-software-flow-control.patch [new file with mode: 0644]
queue-3.6/series

diff --git a/queue-3.6/acpi-video-ignore-errors-after-_dod-evaluation.patch b/queue-3.6/acpi-video-ignore-errors-after-_dod-evaluation.patch
new file mode 100644 (file)
index 0000000..dd76d4d
--- /dev/null
@@ -0,0 +1,46 @@
+From fba4e087361605d1eed63343bb08811f097c83ee Mon Sep 17 00:00:00 2001
+From: Igor Murzov <e-mail@date.by>
+Date: Sat, 13 Oct 2012 04:41:25 +0400
+Subject: ACPI video: Ignore errors after _DOD evaluation.
+
+From: Igor Murzov <e-mail@date.by>
+
+commit fba4e087361605d1eed63343bb08811f097c83ee upstream.
+
+There are systems where video module known to work fine regardless
+of broken _DOD and ignoring returned value here doesn't cause
+any issues later. This should fix brightness controls on some laptops.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=47861
+
+Signed-off-by: Igor Murzov <e-mail@date.by>
+Reviewed-by: Sergey V <sftp.mtuci@gmail.com>
+Signed-off-by: Zhang Rui <rui.zhang@intel.com>
+Signed-off-by: Abdallah Chatila <abdallah.chatila@ericsson.com>
+
+---
+ drivers/acpi/video.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -1345,12 +1345,15 @@ static int
+ acpi_video_bus_get_devices(struct acpi_video_bus *video,
+                          struct acpi_device *device)
+ {
+-      int status;
++      int status = 0;
+       struct acpi_device *dev;
+-      status = acpi_video_device_enumerate(video);
+-      if (status)
+-              return status;
++      /*
++       * There are systems where video module known to work fine regardless
++       * of broken _DOD and ignoring returned value here doesn't cause
++       * any issues later.
++       */
++      acpi_video_device_enumerate(video);
+       list_for_each_entry(dev, &device->children, node) {
diff --git a/queue-3.6/ext4-fix-metadata-checksum-calculation-for-the-superblock.patch b/queue-3.6/ext4-fix-metadata-checksum-calculation-for-the-superblock.patch
new file mode 100644 (file)
index 0000000..6183608
--- /dev/null
@@ -0,0 +1,103 @@
+From 06db49e68ae70cf16819b85a14057acb2820776a Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Wed, 10 Oct 2012 01:06:58 -0400
+Subject: ext4: fix metadata checksum calculation for the superblock
+
+From: Theodore Ts'o <tytso@mit.edu>
+
+commit 06db49e68ae70cf16819b85a14057acb2820776a upstream.
+
+The function ext4_handle_dirty_super() was calculating the superblock
+on the wrong block data.  As a result, when the superblock is modified
+while it is mounted (most commonly, when inodes are added or removed
+from the orphan list), the superblock checksum would be wrong.  We
+didn't notice because the superblock *was* being correctly calculated
+in ext4_commit_super(), and this would get called when the file system
+was unmounted.  So the problem only became obvious if the system
+crashed while the file system was mounted.
+
+Fix this by removing the poorly designed function signature for
+ext4_superblock_csum_set(); if it only took a single argument, the
+pointer to a struct superblock, the ambiguity which caused this
+mistake would have been impossible.
+
+Reported-by: George Spelvin <linux@horizon.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Tested-by: George Spelvin <linux@horizon.com>
+
+---
+ fs/ext4/ext4.h      |    3 +--
+ fs/ext4/ext4_jbd2.c |    8 ++------
+ fs/ext4/resize.c    |    2 +-
+ fs/ext4/super.c     |    7 ++++---
+ 4 files changed, 8 insertions(+), 12 deletions(-)
+
+--- a/fs/ext4/ext4.h
++++ b/fs/ext4/ext4.h
+@@ -2046,8 +2046,7 @@ extern int ext4_resize_fs(struct super_b
+ extern int ext4_calculate_overhead(struct super_block *sb);
+ extern int ext4_superblock_csum_verify(struct super_block *sb,
+                                      struct ext4_super_block *es);
+-extern void ext4_superblock_csum_set(struct super_block *sb,
+-                                   struct ext4_super_block *es);
++extern void ext4_superblock_csum_set(struct super_block *sb);
+ extern void *ext4_kvmalloc(size_t size, gfp_t flags);
+ extern void *ext4_kvzalloc(size_t size, gfp_t flags);
+ extern void ext4_kvfree(void *ptr);
+--- a/fs/ext4/ext4_jbd2.c
++++ b/fs/ext4/ext4_jbd2.c
+@@ -143,17 +143,13 @@ int __ext4_handle_dirty_super(const char
+       struct buffer_head *bh = EXT4_SB(sb)->s_sbh;
+       int err = 0;
++      ext4_superblock_csum_set(sb);
+       if (ext4_handle_valid(handle)) {
+-              ext4_superblock_csum_set(sb,
+-                              (struct ext4_super_block *)bh->b_data);
+               err = jbd2_journal_dirty_metadata(handle, bh);
+               if (err)
+                       ext4_journal_abort_handle(where, line, __func__,
+                                                 bh, handle, err);
+-      } else {
+-              ext4_superblock_csum_set(sb,
+-                              (struct ext4_super_block *)bh->b_data);
++      } else
+               mark_buffer_dirty(bh);
+-      }
+       return err;
+ }
+--- a/fs/ext4/resize.c
++++ b/fs/ext4/resize.c
+@@ -979,7 +979,7 @@ static void update_backups(struct super_
+               goto exit_err;
+       }
+-      ext4_superblock_csum_set(sb, (struct ext4_super_block *)data);
++      ext4_superblock_csum_set(sb);
+       while ((group = ext4_list_backups(sb, &three, &five, &seven)) < last) {
+               struct buffer_head *bh;
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -143,9 +143,10 @@ int ext4_superblock_csum_verify(struct s
+       return es->s_checksum == ext4_superblock_csum(sb, es);
+ }
+-void ext4_superblock_csum_set(struct super_block *sb,
+-                            struct ext4_super_block *es)
++void ext4_superblock_csum_set(struct super_block *sb)
+ {
++      struct ext4_super_block *es = EXT4_SB(sb)->s_es;
++
+       if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
+               EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
+               return;
+@@ -4343,7 +4344,7 @@ static int ext4_commit_super(struct supe
+               cpu_to_le32(percpu_counter_sum_positive(
+                               &EXT4_SB(sb)->s_freeinodes_counter));
+       BUFFER_TRACE(sbh, "marking dirty");
+-      ext4_superblock_csum_set(sb, es);
++      ext4_superblock_csum_set(sb);
+       mark_buffer_dirty(sbh);
+       if (sync) {
+               error = sync_dirty_buffer(sbh);
diff --git a/queue-3.6/revert-serial-omap-fix-software-flow-control.patch b/queue-3.6/revert-serial-omap-fix-software-flow-control.patch
new file mode 100644 (file)
index 0000000..527e1f2
--- /dev/null
@@ -0,0 +1,73 @@
+From a4f743851f74fc3e0cc40c13082e65c24139f481 Mon Sep 17 00:00:00 2001
+From: Felipe Balbi <balbi@ti.com>
+Date: Tue, 16 Oct 2012 17:09:22 +0300
+Subject: Revert "serial: omap: fix software flow control"
+
+From: Felipe Balbi <balbi@ti.com>
+
+commit a4f743851f74fc3e0cc40c13082e65c24139f481 upstream.
+
+This reverts commit 957ee7270d632245b43f6feb0e70d9a5e9ea6cf6
+(serial: omap: fix software flow control).
+
+As Russell has pointed out, that commit isn't fixing
+Software Flow Control at all, and it actually makes
+it even more broken.
+
+It was agreed to revert this commit and use Russell's
+latest UART patches instead.
+
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Cc: Russell King <linux@arm.linux.org.uk>
+Acked-by: Tony Lindgren <tony@atomide.com>
+Cc: Andreas Bießmann <andreas.devel@googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/plat-omap/include/plat/omap-serial.h |    4 ++--
+ drivers/tty/serial/omap-serial.c              |   12 ++++++------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+--- a/arch/arm/plat-omap/include/plat/omap-serial.h
++++ b/arch/arm/plat-omap/include/plat/omap-serial.h
+@@ -42,10 +42,10 @@
+ #define OMAP_UART_WER_MOD_WKUP        0X7F
+ /* Enable XON/XOFF flow control on output */
+-#define OMAP_UART_SW_TX               0x8
++#define OMAP_UART_SW_TX               0x04
+ /* Enable XON/XOFF flow control on input */
+-#define OMAP_UART_SW_RX               0x2
++#define OMAP_UART_SW_RX               0x04
+ #define OMAP_UART_SYSC_RESET  0X07
+ #define OMAP_UART_TCR_TRIG    0X0F
+--- a/drivers/tty/serial/omap-serial.c
++++ b/drivers/tty/serial/omap-serial.c
+@@ -667,19 +667,19 @@ serial_omap_configure_xonxoff
+       /*
+        * IXON Flag:
+-       * Flow control for OMAP.TX
+-       * OMAP.RX should listen for XON/XOFF
++       * Enable XON/XOFF flow control on output.
++       * Transmit XON1, XOFF1
+        */
+       if (termios->c_iflag & IXON)
+-              up->efr |= OMAP_UART_SW_RX;
++              up->efr |= OMAP_UART_SW_TX;
+       /*
+        * IXOFF Flag:
+-       * Flow control for OMAP.RX
+-       * OMAP.TX should send XON/XOFF
++       * Enable XON/XOFF flow control on input.
++       * Receiver compares XON1, XOFF1.
+        */
+       if (termios->c_iflag & IXOFF)
+-              up->efr |= OMAP_UART_SW_TX;
++              up->efr |= OMAP_UART_SW_RX;
+       serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
+       serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
index 05fe216735a5a4f4e018eb57900a7d7ff156a7f4..6e19104b2cdc982ff9dae5c310e6ae192e0c0e02 100644 (file)
@@ -78,3 +78,6 @@ reiserfs-move-quota-calls-out-of-write-lock.patch
 reiserfs-protect-reiserfs_quota_write-with-write-lock.patch
 intel-iommu-fix-lookup-in-add-device.patch
 selinux-fix-sel_netnode_insert-suspicious-rcu-dereference.patch
+acpi-video-ignore-errors-after-_dod-evaluation.patch
+revert-serial-omap-fix-software-flow-control.patch
+ext4-fix-metadata-checksum-calculation-for-the-superblock.patch