From: Greg Kroah-Hartman Date: Wed, 21 Nov 2012 20:28:54 +0000 (-0800) Subject: 3.6-stable patches X-Git-Tag: v3.0.53~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2da88991230afa06039844cee4cf992260da83e8;p=thirdparty%2Fkernel%2Fstable-queue.git 3.6-stable patches 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 --- 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 index 00000000000..dd76d4d7c9d --- /dev/null +++ b/queue-3.6/acpi-video-ignore-errors-after-_dod-evaluation.patch @@ -0,0 +1,46 @@ +From fba4e087361605d1eed63343bb08811f097c83ee Mon Sep 17 00:00:00 2001 +From: Igor Murzov +Date: Sat, 13 Oct 2012 04:41:25 +0400 +Subject: ACPI video: Ignore errors after _DOD evaluation. + +From: Igor Murzov + +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 +Reviewed-by: Sergey V +Signed-off-by: Zhang Rui +Signed-off-by: Abdallah Chatila + +--- + 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 index 00000000000..618360805f1 --- /dev/null +++ b/queue-3.6/ext4-fix-metadata-checksum-calculation-for-the-superblock.patch @@ -0,0 +1,103 @@ +From 06db49e68ae70cf16819b85a14057acb2820776a Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o +Date: Wed, 10 Oct 2012 01:06:58 -0400 +Subject: ext4: fix metadata checksum calculation for the superblock + +From: Theodore Ts'o + +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 +Signed-off-by: "Theodore Ts'o" +Tested-by: George Spelvin + +--- + 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 index 00000000000..527e1f296ed --- /dev/null +++ b/queue-3.6/revert-serial-omap-fix-software-flow-control.patch @@ -0,0 +1,73 @@ +From a4f743851f74fc3e0cc40c13082e65c24139f481 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Tue, 16 Oct 2012 17:09:22 +0300 +Subject: Revert "serial: omap: fix software flow control" + +From: Felipe Balbi + +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 +Cc: Russell King +Acked-by: Tony Lindgren +Cc: Andreas Bießmann +Signed-off-by: Greg Kroah-Hartman + +--- + 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); diff --git a/queue-3.6/series b/queue-3.6/series index 05fe216735a..6e19104b2cd 100644 --- a/queue-3.6/series +++ b/queue-3.6/series @@ -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