From d2d3eae5089210e810d340efdfbd453637bfc9f6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 20 Feb 2018 12:11:29 +0100 Subject: [PATCH] 4.9-stable patches added patches: console-dummy-leave-.con_font_get-set-to-null.patch drm-radeon-add-dpm-quirk-for-jet-pro-v2.patch drm-radeon-adjust-tested-variable.patch ext4-correct-documentation-for-grpid-mount-option.patch ext4-fix-a-race-in-the-ext4-shutdown-path.patch ext4-save-error-to-disk-in-__ext4_grp_locked_error.patch jbd2-fix-sphinx-kernel-doc-build-warnings.patch mbcache-initialize-entry-e_referenced-in-mb_cache_entry_create.patch mips-fix-typo-big_endian-to-cpu_big_endian.patch mm-fix-memory-size-alignment-in-devm_memremap_pages_release.patch mm-hide-a-warning-for-compile_test.patch pci-keystone-fix-interrupt-controller-node-lookup.patch rtc-opal-fix-handling-of-firmware-error-codes-prevent-busy-loops.patch video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch --- ...ummy-leave-.con_font_get-set-to-null.patch | 32 + ...-radeon-add-dpm-quirk-for-jet-pro-v2.patch | 40 + .../drm-radeon-adjust-tested-variable.patch | 57 ++ ...documentation-for-grpid-mount-option.patch | 35 + ...fix-a-race-in-the-ext4-shutdown-path.patch | 56 ++ ...r-to-disk-in-__ext4_grp_locked_error.patch | 37 + ...fix-sphinx-kernel-doc-build-warnings.patch | 708 ++++++++++++++++++ ..._referenced-in-mb_cache_entry_create.patch | 93 +++ ...ix-typo-big_endian-to-cpu_big_endian.patch | 52 ++ ...nment-in-devm_memremap_pages_release.patch | 41 + .../mm-hide-a-warning-for-compile_test.patch | 39 + ...fix-interrupt-controller-node-lookup.patch | 57 ++ ...mware-error-codes-prevent-busy-loops.patch | 82 ++ queue-4.9/series | 14 + ...mel_lcdfb-fix-display-timings-lookup.patch | 57 ++ 15 files changed, 1400 insertions(+) create mode 100644 queue-4.9/console-dummy-leave-.con_font_get-set-to-null.patch create mode 100644 queue-4.9/drm-radeon-add-dpm-quirk-for-jet-pro-v2.patch create mode 100644 queue-4.9/drm-radeon-adjust-tested-variable.patch create mode 100644 queue-4.9/ext4-correct-documentation-for-grpid-mount-option.patch create mode 100644 queue-4.9/ext4-fix-a-race-in-the-ext4-shutdown-path.patch create mode 100644 queue-4.9/ext4-save-error-to-disk-in-__ext4_grp_locked_error.patch create mode 100644 queue-4.9/jbd2-fix-sphinx-kernel-doc-build-warnings.patch create mode 100644 queue-4.9/mbcache-initialize-entry-e_referenced-in-mb_cache_entry_create.patch create mode 100644 queue-4.9/mips-fix-typo-big_endian-to-cpu_big_endian.patch create mode 100644 queue-4.9/mm-fix-memory-size-alignment-in-devm_memremap_pages_release.patch create mode 100644 queue-4.9/mm-hide-a-warning-for-compile_test.patch create mode 100644 queue-4.9/pci-keystone-fix-interrupt-controller-node-lookup.patch create mode 100644 queue-4.9/rtc-opal-fix-handling-of-firmware-error-codes-prevent-busy-loops.patch create mode 100644 queue-4.9/video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch diff --git a/queue-4.9/console-dummy-leave-.con_font_get-set-to-null.patch b/queue-4.9/console-dummy-leave-.con_font_get-set-to-null.patch new file mode 100644 index 00000000000..e5ed405e6b7 --- /dev/null +++ b/queue-4.9/console-dummy-leave-.con_font_get-set-to-null.patch @@ -0,0 +1,32 @@ +From 724ba8b30b044aa0d94b1cd374fc15806cdd6f18 Mon Sep 17 00:00:00 2001 +From: Nicolas Pitre +Date: Mon, 15 Jan 2018 17:04:22 +0100 +Subject: console/dummy: leave .con_font_get set to NULL + +From: Nicolas Pitre + +commit 724ba8b30b044aa0d94b1cd374fc15806cdd6f18 upstream. + +When this method is set, the caller expects struct console_font fields +to be properly initialized when it returns. Leave it unset otherwise +nonsensical (leaked kernel stack) values are returned to user space. + +Signed-off-by: Nicolas Pitre +Cc: stable@vger.kernel.org +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/video/console/dummycon.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/video/console/dummycon.c ++++ b/drivers/video/console/dummycon.c +@@ -67,7 +67,6 @@ const struct consw dummy_con = { + .con_switch = DUMMY, + .con_blank = DUMMY, + .con_font_set = DUMMY, +- .con_font_get = DUMMY, + .con_font_default = DUMMY, + .con_font_copy = DUMMY, + }; diff --git a/queue-4.9/drm-radeon-add-dpm-quirk-for-jet-pro-v2.patch b/queue-4.9/drm-radeon-add-dpm-quirk-for-jet-pro-v2.patch new file mode 100644 index 00000000000..503bdbbd393 --- /dev/null +++ b/queue-4.9/drm-radeon-add-dpm-quirk-for-jet-pro-v2.patch @@ -0,0 +1,40 @@ +From 239b5f64e12b1f09f506c164dff0374924782979 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 21 Nov 2017 12:09:38 -0500 +Subject: drm/radeon: Add dpm quirk for Jet PRO (v2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Deucher + +commit 239b5f64e12b1f09f506c164dff0374924782979 upstream. + +Fixes stability issues. + +v2: clamp sclk to 600 Mhz + +Bug: https://bugs.freedesktop.org/show_bug.cgi?id=103370 +Acked-by: Christian König +Signed-off-by: Alex Deucher +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/si_dpm.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/gpu/drm/radeon/si_dpm.c ++++ b/drivers/gpu/drm/radeon/si_dpm.c +@@ -3029,6 +3029,11 @@ static void si_apply_state_adjust_rules( + max_sclk = 75000; + max_mclk = 80000; + } ++ if ((rdev->pdev->revision == 0xC3) || ++ (rdev->pdev->device == 0x6665)) { ++ max_sclk = 60000; ++ max_mclk = 80000; ++ } + } else if (rdev->family == CHIP_OLAND) { + if ((rdev->pdev->revision == 0xC7) || + (rdev->pdev->revision == 0x80) || diff --git a/queue-4.9/drm-radeon-adjust-tested-variable.patch b/queue-4.9/drm-radeon-adjust-tested-variable.patch new file mode 100644 index 00000000000..16371044bee --- /dev/null +++ b/queue-4.9/drm-radeon-adjust-tested-variable.patch @@ -0,0 +1,57 @@ +From 3a61b527b4e1f285d21b6e9e623dc45cf8bb391f Mon Sep 17 00:00:00 2001 +From: Julia Lawall +Date: Sat, 27 Jan 2018 15:28:15 +0100 +Subject: drm/radeon: adjust tested variable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Julia Lawall + +commit 3a61b527b4e1f285d21b6e9e623dc45cf8bb391f upstream. + +Check the variable that was most recently initialized. + +The semantic match that finds this problem is as follows: +(http://coccinelle.lip6.fr/) + +// +@@ +expression x, y, f, g, e, m; +statement S1,S2,S3,S4; +@@ + +x = f(...); +if (\(<+...x...+>\&e\)) S1 else S2 +( +x = g(...); +| +m = g(...,&x,...); +| +y = g(...); +*if (e) + S3 else S4 +) +// + +Signed-off-by: Julia Lawall +Reviewed-by: Christian König +Signed-off-by: Alex Deucher +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_uvd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/radeon_uvd.c ++++ b/drivers/gpu/drm/radeon/radeon_uvd.c +@@ -995,7 +995,7 @@ int radeon_uvd_calc_upll_dividers(struct + /* calc dclk divider with current vco freq */ + dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk, + pd_min, pd_even); +- if (vclk_div > pd_max) ++ if (dclk_div > pd_max) + break; /* vco is too big, it has to stop */ + + /* calc score with current vco freq */ diff --git a/queue-4.9/ext4-correct-documentation-for-grpid-mount-option.patch b/queue-4.9/ext4-correct-documentation-for-grpid-mount-option.patch new file mode 100644 index 00000000000..7611c58df4d --- /dev/null +++ b/queue-4.9/ext4-correct-documentation-for-grpid-mount-option.patch @@ -0,0 +1,35 @@ +From 9f0372488cc9243018a812e8cfbf27de650b187b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ernesto=20A=2E=20Fern=C3=A1ndez?= + +Date: Thu, 11 Jan 2018 13:43:33 -0500 +Subject: ext4: correct documentation for grpid mount option +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Ernesto A. Fernández + +commit 9f0372488cc9243018a812e8cfbf27de650b187b upstream. + +The grpid option is currently described as being the same as nogrpid. + +Signed-off-by: Ernesto A. Fernández +Signed-off-by: Theodore Ts'o +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + Documentation/filesystems/ext4.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/Documentation/filesystems/ext4.txt ++++ b/Documentation/filesystems/ext4.txt +@@ -233,7 +233,7 @@ data_err=ignore(*) Just print an error m + data_err=abort Abort the journal if an error occurs in a file + data buffer in ordered mode. + +-grpid Give objects the same group ID as their creator. ++grpid New objects have the group ID of their parent. + bsdgroups + + nogrpid (*) New objects have the group ID of their creator. diff --git a/queue-4.9/ext4-fix-a-race-in-the-ext4-shutdown-path.patch b/queue-4.9/ext4-fix-a-race-in-the-ext4-shutdown-path.patch new file mode 100644 index 00000000000..f625ecf8f5d --- /dev/null +++ b/queue-4.9/ext4-fix-a-race-in-the-ext4-shutdown-path.patch @@ -0,0 +1,56 @@ +From abbc3f9395c76d554a9ed27d4b1ebfb5d9b0e4ca Mon Sep 17 00:00:00 2001 +From: Harshad Shirwadkar +Date: Wed, 10 Jan 2018 00:13:13 -0500 +Subject: ext4: fix a race in the ext4 shutdown path + +From: Harshad Shirwadkar + +commit abbc3f9395c76d554a9ed27d4b1ebfb5d9b0e4ca upstream. + +This patch fixes a race between the shutdown path and bio completion +handling. In the ext4 direct io path with async io, after submitting a +bio to the block layer, if journal starting fails, +ext4_direct_IO_write() would bail out pretending that the IO +failed. The caller would have had no way of knowing whether or not the +IO was successfully submitted. So instead, we return -EIOCBQUEUED in +this case. Now, the caller knows that the IO was submitted. The bio +completion handler takes care of the error. + +Tested: Ran the shutdown xfstest test 461 in loop for over 2 hours across +4 machines resulting in over 400 runs. Verified that the race didn't +occur. Usually the race was seen in about 20-30 iterations. + +Signed-off-by: Harshad Shirwadkar +Signed-off-by: Theodore Ts'o +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ext4/inode.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -3526,10 +3526,18 @@ static ssize_t ext4_direct_IO_write(stru + /* Credits for sb + inode write */ + handle = ext4_journal_start(inode, EXT4_HT_INODE, 2); + if (IS_ERR(handle)) { +- /* This is really bad luck. We've written the data +- * but cannot extend i_size. Bail out and pretend +- * the write failed... */ +- ret = PTR_ERR(handle); ++ /* ++ * We wrote the data but cannot extend ++ * i_size. Bail out. In async io case, we do ++ * not return error here because we have ++ * already submmitted the corresponding ++ * bio. Returning error here makes the caller ++ * think that this IO is done and failed ++ * resulting in race with bio's completion ++ * handler. ++ */ ++ if (!ret) ++ ret = PTR_ERR(handle); + if (inode->i_nlink) + ext4_orphan_del(NULL, inode); + diff --git a/queue-4.9/ext4-save-error-to-disk-in-__ext4_grp_locked_error.patch b/queue-4.9/ext4-save-error-to-disk-in-__ext4_grp_locked_error.patch new file mode 100644 index 00000000000..6c2ed88db6f --- /dev/null +++ b/queue-4.9/ext4-save-error-to-disk-in-__ext4_grp_locked_error.patch @@ -0,0 +1,37 @@ +From 06f29cc81f0350261f59643a505010531130eea0 Mon Sep 17 00:00:00 2001 +From: Zhouyi Zhou +Date: Wed, 10 Jan 2018 00:34:19 -0500 +Subject: ext4: save error to disk in __ext4_grp_locked_error() + +From: Zhouyi Zhou + +commit 06f29cc81f0350261f59643a505010531130eea0 upstream. + +In the function __ext4_grp_locked_error(), __save_error_info() +is called to save error info in super block block, but does not sync +that information to disk to info the subsequence fsck after reboot. + +This patch writes the error information to disk. After this patch, +I think there is no obvious EXT4 error handle branches which leads to +"Remounting filesystem read-only" will leave the disk partition miss +the subsequence fsck. + +Signed-off-by: Zhouyi Zhou +Signed-off-by: Theodore Ts'o +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ext4/super.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/fs/ext4/super.c ++++ b/fs/ext4/super.c +@@ -720,6 +720,7 @@ __acquires(bitlock) + } + + ext4_unlock_group(sb, grp); ++ ext4_commit_super(sb, 1); + ext4_handle_error(sb); + /* + * We only get here in the ERRORS_RO case; relocking the group diff --git a/queue-4.9/jbd2-fix-sphinx-kernel-doc-build-warnings.patch b/queue-4.9/jbd2-fix-sphinx-kernel-doc-build-warnings.patch new file mode 100644 index 00000000000..11d0fc05f92 --- /dev/null +++ b/queue-4.9/jbd2-fix-sphinx-kernel-doc-build-warnings.patch @@ -0,0 +1,708 @@ +From f69120ce6c024aa634a8fc25787205e42f0ccbe6 Mon Sep 17 00:00:00 2001 +From: "Tobin C. Harding" +Date: Wed, 10 Jan 2018 00:27:29 -0500 +Subject: jbd2: fix sphinx kernel-doc build warnings + +From: Tobin C. Harding + +commit f69120ce6c024aa634a8fc25787205e42f0ccbe6 upstream. + +Sphinx emits various (26) warnings when building make target 'htmldocs'. +Currently struct definitions contain duplicate documentation, some as +kernel-docs and some as standard c89 comments. We can reduce +duplication while cleaning up the kernel docs. + +Move all kernel-docs to right above each struct member. Use the set of +all existing comments (kernel-doc and c89). Add documentation for +missing struct members and function arguments. + +Signed-off-by: Tobin C. Harding +Signed-off-by: Theodore Ts'o +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + fs/jbd2/transaction.c | 5 + include/linux/jbd2.h | 431 +++++++++++++++++++++++++++++++------------------- + 2 files changed, 272 insertions(+), 164 deletions(-) + +--- a/fs/jbd2/transaction.c ++++ b/fs/jbd2/transaction.c +@@ -488,8 +488,10 @@ void jbd2_journal_free_reserved(handle_t + EXPORT_SYMBOL(jbd2_journal_free_reserved); + + /** +- * int jbd2_journal_start_reserved(handle_t *handle) - start reserved handle ++ * int jbd2_journal_start_reserved() - start reserved handle + * @handle: handle to start ++ * @type: for handle statistics ++ * @line_no: for handle statistics + * + * Start handle that has been previously reserved with jbd2_journal_reserve(). + * This attaches @handle to the running transaction (or creates one if there's +@@ -619,6 +621,7 @@ error_out: + * int jbd2_journal_restart() - restart a handle . + * @handle: handle to restart + * @nblocks: nr credits requested ++ * @gfp_mask: memory allocation flags (for start_this_handle) + * + * Restart a handle for a multi-transaction filesystem + * operation. +--- a/include/linux/jbd2.h ++++ b/include/linux/jbd2.h +@@ -418,26 +418,41 @@ static inline void jbd_unlock_bh_journal + #define JI_WAIT_DATA (1 << __JI_WAIT_DATA) + + /** +- * struct jbd_inode is the structure linking inodes in ordered mode +- * present in a transaction so that we can sync them during commit. ++ * struct jbd_inode - The jbd_inode type is the structure linking inodes in ++ * ordered mode present in a transaction so that we can sync them during commit. + */ + struct jbd2_inode { +- /* Which transaction does this inode belong to? Either the running +- * transaction or the committing one. [j_list_lock] */ ++ /** ++ * @i_transaction: ++ * ++ * Which transaction does this inode belong to? Either the running ++ * transaction or the committing one. [j_list_lock] ++ */ + transaction_t *i_transaction; + +- /* Pointer to the running transaction modifying inode's data in case +- * there is already a committing transaction touching it. [j_list_lock] */ ++ /** ++ * @i_next_transaction: ++ * ++ * Pointer to the running transaction modifying inode's data in case ++ * there is already a committing transaction touching it. [j_list_lock] ++ */ + transaction_t *i_next_transaction; + +- /* List of inodes in the i_transaction [j_list_lock] */ ++ /** ++ * @i_list: List of inodes in the i_transaction [j_list_lock] ++ */ + struct list_head i_list; + +- /* VFS inode this inode belongs to [constant during the lifetime +- * of the structure] */ ++ /** ++ * @i_vfs_inode: ++ * ++ * VFS inode this inode belongs to [constant for lifetime of structure] ++ */ + struct inode *i_vfs_inode; + +- /* Flags of inode [j_list_lock] */ ++ /** ++ * @i_flags: Flags of inode [j_list_lock] ++ */ + unsigned long i_flags; + }; + +@@ -447,12 +462,20 @@ struct jbd2_revoke_table_s; + * struct handle_s - The handle_s type is the concrete type associated with + * handle_t. + * @h_transaction: Which compound transaction is this update a part of? ++ * @h_journal: Which journal handle belongs to - used iff h_reserved set. ++ * @h_rsv_handle: Handle reserved for finishing the logical operation. + * @h_buffer_credits: Number of remaining buffers we are allowed to dirty. +- * @h_ref: Reference count on this handle +- * @h_err: Field for caller's use to track errors through large fs operations +- * @h_sync: flag for sync-on-close +- * @h_jdata: flag to force data journaling +- * @h_aborted: flag indicating fatal error on handle ++ * @h_ref: Reference count on this handle. ++ * @h_err: Field for caller's use to track errors through large fs operations. ++ * @h_sync: Flag for sync-on-close. ++ * @h_jdata: Flag to force data journaling. ++ * @h_reserved: Flag for handle for reserved credits. ++ * @h_aborted: Flag indicating fatal error on handle. ++ * @h_type: For handle statistics. ++ * @h_line_no: For handle statistics. ++ * @h_start_jiffies: Handle Start time. ++ * @h_requested_credits: Holds @h_buffer_credits after handle is started. ++ * @saved_alloc_context: Saved context while transaction is open. + **/ + + /* Docbook can't yet cope with the bit fields, but will leave the documentation +@@ -462,32 +485,23 @@ struct jbd2_revoke_table_s; + struct jbd2_journal_handle + { + union { +- /* Which compound transaction is this update a part of? */ + transaction_t *h_transaction; + /* Which journal handle belongs to - used iff h_reserved set */ + journal_t *h_journal; + }; + +- /* Handle reserved for finishing the logical operation */ + handle_t *h_rsv_handle; +- +- /* Number of remaining buffers we are allowed to dirty: */ + int h_buffer_credits; +- +- /* Reference count on this handle */ + int h_ref; +- +- /* Field for caller's use to track errors through large fs */ +- /* operations */ + int h_err; + + /* Flags [no locking] */ +- unsigned int h_sync: 1; /* sync-on-close */ +- unsigned int h_jdata: 1; /* force data journaling */ +- unsigned int h_reserved: 1; /* handle with reserved credits */ +- unsigned int h_aborted: 1; /* fatal error on handle */ +- unsigned int h_type: 8; /* for handle statistics */ +- unsigned int h_line_no: 16; /* for handle statistics */ ++ unsigned int h_sync: 1; ++ unsigned int h_jdata: 1; ++ unsigned int h_reserved: 1; ++ unsigned int h_aborted: 1; ++ unsigned int h_type: 8; ++ unsigned int h_line_no: 16; + + unsigned long h_start_jiffies; + unsigned int h_requested_credits; +@@ -727,228 +741,253 @@ jbd2_time_diff(unsigned long start, unsi + /** + * struct journal_s - The journal_s type is the concrete type associated with + * journal_t. +- * @j_flags: General journaling state flags +- * @j_errno: Is there an outstanding uncleared error on the journal (from a +- * prior abort)? +- * @j_sb_buffer: First part of superblock buffer +- * @j_superblock: Second part of superblock buffer +- * @j_format_version: Version of the superblock format +- * @j_state_lock: Protect the various scalars in the journal +- * @j_barrier_count: Number of processes waiting to create a barrier lock +- * @j_barrier: The barrier lock itself +- * @j_running_transaction: The current running transaction.. +- * @j_committing_transaction: the transaction we are pushing to disk +- * @j_checkpoint_transactions: a linked circular list of all transactions +- * waiting for checkpointing +- * @j_wait_transaction_locked: Wait queue for waiting for a locked transaction +- * to start committing, or for a barrier lock to be released +- * @j_wait_done_commit: Wait queue for waiting for commit to complete +- * @j_wait_commit: Wait queue to trigger commit +- * @j_wait_updates: Wait queue to wait for updates to complete +- * @j_wait_reserved: Wait queue to wait for reserved buffer credits to drop +- * @j_checkpoint_mutex: Mutex for locking against concurrent checkpoints +- * @j_head: Journal head - identifies the first unused block in the journal +- * @j_tail: Journal tail - identifies the oldest still-used block in the +- * journal. +- * @j_free: Journal free - how many free blocks are there in the journal? +- * @j_first: The block number of the first usable block +- * @j_last: The block number one beyond the last usable block +- * @j_dev: Device where we store the journal +- * @j_blocksize: blocksize for the location where we store the journal. +- * @j_blk_offset: starting block offset for into the device where we store the +- * journal +- * @j_fs_dev: Device which holds the client fs. For internal journal this will +- * be equal to j_dev +- * @j_reserved_credits: Number of buffers reserved from the running transaction +- * @j_maxlen: Total maximum capacity of the journal region on disk. +- * @j_list_lock: Protects the buffer lists and internal buffer state. +- * @j_inode: Optional inode where we store the journal. If present, all journal +- * block numbers are mapped into this inode via bmap(). +- * @j_tail_sequence: Sequence number of the oldest transaction in the log +- * @j_transaction_sequence: Sequence number of the next transaction to grant +- * @j_commit_sequence: Sequence number of the most recently committed +- * transaction +- * @j_commit_request: Sequence number of the most recent transaction wanting +- * commit +- * @j_uuid: Uuid of client object. +- * @j_task: Pointer to the current commit thread for this journal +- * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a +- * single compound commit transaction +- * @j_commit_interval: What is the maximum transaction lifetime before we begin +- * a commit? +- * @j_commit_timer: The timer used to wakeup the commit thread +- * @j_revoke_lock: Protect the revoke table +- * @j_revoke: The revoke table - maintains the list of revoked blocks in the +- * current transaction. +- * @j_revoke_table: alternate revoke tables for j_revoke +- * @j_wbuf: array of buffer_heads for jbd2_journal_commit_transaction +- * @j_wbufsize: maximum number of buffer_heads allowed in j_wbuf, the +- * number that will fit in j_blocksize +- * @j_last_sync_writer: most recent pid which did a synchronous write +- * @j_history_lock: Protect the transactions statistics history +- * @j_proc_entry: procfs entry for the jbd statistics directory +- * @j_stats: Overall statistics +- * @j_private: An opaque pointer to fs-private information. +- * @j_trans_commit_map: Lockdep entity to track transaction commit dependencies + */ +- + struct journal_s + { +- /* General journaling state flags [j_state_lock] */ ++ /** ++ * @j_flags: General journaling state flags [j_state_lock] ++ */ + unsigned long j_flags; + +- /* ++ /** ++ * @j_errno: ++ * + * Is there an outstanding uncleared error on the journal (from a prior + * abort)? [j_state_lock] + */ + int j_errno; + +- /* The superblock buffer */ ++ /** ++ * @j_sb_buffer: The first part of the superblock buffer. ++ */ + struct buffer_head *j_sb_buffer; ++ ++ /** ++ * @j_superblock: The second part of the superblock buffer. ++ */ + journal_superblock_t *j_superblock; + +- /* Version of the superblock format */ ++ /** ++ * @j_format_version: Version of the superblock format. ++ */ + int j_format_version; + +- /* +- * Protect the various scalars in the journal ++ /** ++ * @j_state_lock: Protect the various scalars in the journal. + */ + rwlock_t j_state_lock; + +- /* ++ /** ++ * @j_barrier_count: ++ * + * Number of processes waiting to create a barrier lock [j_state_lock] + */ + int j_barrier_count; + +- /* The barrier lock itself */ ++ /** ++ * @j_barrier: The barrier lock itself. ++ */ + struct mutex j_barrier; + +- /* ++ /** ++ * @j_running_transaction: ++ * + * Transactions: The current running transaction... + * [j_state_lock] [caller holding open handle] + */ + transaction_t *j_running_transaction; + +- /* ++ /** ++ * @j_committing_transaction: ++ * + * the transaction we are pushing to disk + * [j_state_lock] [caller holding open handle] + */ + transaction_t *j_committing_transaction; + +- /* ++ /** ++ * @j_checkpoint_transactions: ++ * + * ... and a linked circular list of all transactions waiting for + * checkpointing. [j_list_lock] + */ + transaction_t *j_checkpoint_transactions; + +- /* ++ /** ++ * @j_wait_transaction_locked: ++ * + * Wait queue for waiting for a locked transaction to start committing, +- * or for a barrier lock to be released ++ * or for a barrier lock to be released. + */ + wait_queue_head_t j_wait_transaction_locked; + +- /* Wait queue for waiting for commit to complete */ ++ /** ++ * @j_wait_done_commit: Wait queue for waiting for commit to complete. ++ */ + wait_queue_head_t j_wait_done_commit; + +- /* Wait queue to trigger commit */ ++ /** ++ * @j_wait_commit: Wait queue to trigger commit. ++ */ + wait_queue_head_t j_wait_commit; + +- /* Wait queue to wait for updates to complete */ ++ /** ++ * @j_wait_updates: Wait queue to wait for updates to complete. ++ */ + wait_queue_head_t j_wait_updates; + +- /* Wait queue to wait for reserved buffer credits to drop */ ++ /** ++ * @j_wait_reserved: ++ * ++ * Wait queue to wait for reserved buffer credits to drop. ++ */ + wait_queue_head_t j_wait_reserved; + +- /* Semaphore for locking against concurrent checkpoints */ ++ /** ++ * @j_checkpoint_mutex: ++ * ++ * Semaphore for locking against concurrent checkpoints. ++ */ + struct mutex j_checkpoint_mutex; + +- /* ++ /** ++ * @j_chkpt_bhs: ++ * + * List of buffer heads used by the checkpoint routine. This + * was moved from jbd2_log_do_checkpoint() to reduce stack + * usage. Access to this array is controlled by the +- * j_checkpoint_mutex. [j_checkpoint_mutex] ++ * @j_checkpoint_mutex. [j_checkpoint_mutex] + */ + struct buffer_head *j_chkpt_bhs[JBD2_NR_BATCH]; +- +- /* ++ ++ /** ++ * @j_head: ++ * + * Journal head: identifies the first unused block in the journal. + * [j_state_lock] + */ + unsigned long j_head; + +- /* ++ /** ++ * @j_tail: ++ * + * Journal tail: identifies the oldest still-used block in the journal. + * [j_state_lock] + */ + unsigned long j_tail; + +- /* ++ /** ++ * @j_free: ++ * + * Journal free: how many free blocks are there in the journal? + * [j_state_lock] + */ + unsigned long j_free; + +- /* +- * Journal start and end: the block numbers of the first usable block +- * and one beyond the last usable block in the journal. [j_state_lock] ++ /** ++ * @j_first: ++ * ++ * The block number of the first usable block in the journal ++ * [j_state_lock]. + */ + unsigned long j_first; ++ ++ /** ++ * @j_last: ++ * ++ * The block number one beyond the last usable block in the journal ++ * [j_state_lock]. ++ */ + unsigned long j_last; + +- /* +- * Device, blocksize and starting block offset for the location where we +- * store the journal. ++ /** ++ * @j_dev: Device where we store the journal. + */ + struct block_device *j_dev; ++ ++ /** ++ * @j_blocksize: Block size for the location where we store the journal. ++ */ + int j_blocksize; ++ ++ /** ++ * @j_blk_offset: ++ * ++ * Starting block offset into the device where we store the journal. ++ */ + unsigned long long j_blk_offset; ++ ++ /** ++ * @j_devname: Journal device name. ++ */ + char j_devname[BDEVNAME_SIZE+24]; + +- /* ++ /** ++ * @j_fs_dev: ++ * + * Device which holds the client fs. For internal journal this will be + * equal to j_dev. + */ + struct block_device *j_fs_dev; + +- /* Total maximum capacity of the journal region on disk. */ ++ /** ++ * @j_maxlen: Total maximum capacity of the journal region on disk. ++ */ + unsigned int j_maxlen; + +- /* Number of buffers reserved from the running transaction */ ++ /** ++ * @j_reserved_credits: ++ * ++ * Number of buffers reserved from the running transaction. ++ */ + atomic_t j_reserved_credits; + +- /* +- * Protects the buffer lists and internal buffer state. ++ /** ++ * @j_list_lock: Protects the buffer lists and internal buffer state. + */ + spinlock_t j_list_lock; + +- /* Optional inode where we store the journal. If present, all */ +- /* journal block numbers are mapped into this inode via */ +- /* bmap(). */ ++ /** ++ * @j_inode: ++ * ++ * Optional inode where we store the journal. If present, all ++ * journal block numbers are mapped into this inode via bmap(). ++ */ + struct inode *j_inode; + +- /* ++ /** ++ * @j_tail_sequence: ++ * + * Sequence number of the oldest transaction in the log [j_state_lock] + */ + tid_t j_tail_sequence; + +- /* ++ /** ++ * @j_transaction_sequence: ++ * + * Sequence number of the next transaction to grant [j_state_lock] + */ + tid_t j_transaction_sequence; + +- /* ++ /** ++ * @j_commit_sequence: ++ * + * Sequence number of the most recently committed transaction + * [j_state_lock]. + */ + tid_t j_commit_sequence; + +- /* ++ /** ++ * @j_commit_request: ++ * + * Sequence number of the most recent transaction wanting commit + * [j_state_lock] + */ + tid_t j_commit_request; + +- /* ++ /** ++ * @j_uuid: ++ * + * Journal uuid: identifies the object (filesystem, LVM volume etc) + * backed by this journal. This will eventually be replaced by an array + * of uuids, allowing us to index multiple devices within a single +@@ -956,85 +995,151 @@ struct journal_s + */ + __u8 j_uuid[16]; + +- /* Pointer to the current commit thread for this journal */ ++ /** ++ * @j_task: Pointer to the current commit thread for this journal. ++ */ + struct task_struct *j_task; + +- /* ++ /** ++ * @j_max_transaction_buffers: ++ * + * Maximum number of metadata buffers to allow in a single compound +- * commit transaction ++ * commit transaction. + */ + int j_max_transaction_buffers; + +- /* ++ /** ++ * @j_commit_interval: ++ * + * What is the maximum transaction lifetime before we begin a commit? + */ + unsigned long j_commit_interval; + +- /* The timer used to wakeup the commit thread: */ ++ /** ++ * @j_commit_timer: The timer used to wakeup the commit thread. ++ */ + struct timer_list j_commit_timer; + +- /* +- * The revoke table: maintains the list of revoked blocks in the +- * current transaction. [j_revoke_lock] ++ /** ++ * @j_revoke_lock: Protect the revoke table. + */ + spinlock_t j_revoke_lock; ++ ++ /** ++ * @j_revoke: ++ * ++ * The revoke table - maintains the list of revoked blocks in the ++ * current transaction. ++ */ + struct jbd2_revoke_table_s *j_revoke; ++ ++ /** ++ * @j_revoke_table: Alternate revoke tables for j_revoke. ++ */ + struct jbd2_revoke_table_s *j_revoke_table[2]; + +- /* +- * array of bhs for jbd2_journal_commit_transaction ++ /** ++ * @j_wbuf: Array of bhs for jbd2_journal_commit_transaction. + */ + struct buffer_head **j_wbuf; ++ ++ /** ++ * @j_wbufsize: ++ * ++ * Size of @j_wbuf array. ++ */ + int j_wbufsize; + +- /* +- * this is the pid of hte last person to run a synchronous operation +- * through the journal ++ /** ++ * @j_last_sync_writer: ++ * ++ * The pid of the last person to run a synchronous operation ++ * through the journal. + */ + pid_t j_last_sync_writer; + +- /* +- * the average amount of time in nanoseconds it takes to commit a ++ /** ++ * @j_average_commit_time: ++ * ++ * The average amount of time in nanoseconds it takes to commit a + * transaction to disk. [j_state_lock] + */ + u64 j_average_commit_time; + +- /* +- * minimum and maximum times that we should wait for +- * additional filesystem operations to get batched into a +- * synchronous handle in microseconds ++ /** ++ * @j_min_batch_time: ++ * ++ * Minimum time that we should wait for additional filesystem operations ++ * to get batched into a synchronous handle in microseconds. + */ + u32 j_min_batch_time; ++ ++ /** ++ * @j_max_batch_time: ++ * ++ * Maximum time that we should wait for additional filesystem operations ++ * to get batched into a synchronous handle in microseconds. ++ */ + u32 j_max_batch_time; + +- /* This function is called when a transaction is closed */ ++ /** ++ * @j_commit_callback: ++ * ++ * This function is called when a transaction is closed. ++ */ + void (*j_commit_callback)(journal_t *, + transaction_t *); + + /* + * Journal statistics + */ ++ ++ /** ++ * @j_history_lock: Protect the transactions statistics history. ++ */ + spinlock_t j_history_lock; ++ ++ /** ++ * @j_proc_entry: procfs entry for the jbd statistics directory. ++ */ + struct proc_dir_entry *j_proc_entry; ++ ++ /** ++ * @j_stats: Overall statistics. ++ */ + struct transaction_stats_s j_stats; + +- /* Failed journal commit ID */ ++ /** ++ * @j_failed_commit: Failed journal commit ID. ++ */ + unsigned int j_failed_commit; + +- /* ++ /** ++ * @j_private: ++ * + * An opaque pointer to fs-private information. ext3 puts its +- * superblock pointer here ++ * superblock pointer here. + */ + void *j_private; + +- /* Reference to checksum algorithm driver via cryptoapi */ ++ /** ++ * @j_chksum_driver: ++ * ++ * Reference to checksum algorithm driver via cryptoapi. ++ */ + struct crypto_shash *j_chksum_driver; + +- /* Precomputed journal UUID checksum for seeding other checksums */ ++ /** ++ * @j_csum_seed: ++ * ++ * Precomputed journal UUID checksum for seeding other checksums. ++ */ + __u32 j_csum_seed; + + #ifdef CONFIG_DEBUG_LOCK_ALLOC +- /* ++ /** ++ * @j_trans_commit_map: ++ * + * Lockdep entity to track transaction commit dependencies. Handles + * hold this "lock" for read, when we wait for commit, we acquire the + * "lock" for writing. This matches the properties of jbd2 journalling diff --git a/queue-4.9/mbcache-initialize-entry-e_referenced-in-mb_cache_entry_create.patch b/queue-4.9/mbcache-initialize-entry-e_referenced-in-mb_cache_entry_create.patch new file mode 100644 index 00000000000..190cd84950f --- /dev/null +++ b/queue-4.9/mbcache-initialize-entry-e_referenced-in-mb_cache_entry_create.patch @@ -0,0 +1,93 @@ +From 3876bbe27d04b848750d5310a37d6b76b593f648 Mon Sep 17 00:00:00 2001 +From: Alexander Potapenko +Date: Sun, 7 Jan 2018 16:22:35 -0500 +Subject: mbcache: initialize entry->e_referenced in mb_cache_entry_create() + +From: Alexander Potapenko + +commit 3876bbe27d04b848750d5310a37d6b76b593f648 upstream. + +KMSAN reported use of uninitialized |entry->e_referenced| in a condition +in mb_cache_shrink(): + +================================================================== +BUG: KMSAN: use of uninitialized memory in mb_cache_shrink+0x3b4/0xc50 fs/mbcache.c:287 +CPU: 2 PID: 816 Comm: kswapd1 Not tainted 4.11.0-rc5+ #2877 +Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs +01/01/2011 +Call Trace: + __dump_stack lib/dump_stack.c:16 [inline] + dump_stack+0x172/0x1c0 lib/dump_stack.c:52 + kmsan_report+0x12a/0x180 mm/kmsan/kmsan.c:927 + __msan_warning_32+0x61/0xb0 mm/kmsan/kmsan_instr.c:469 + mb_cache_shrink+0x3b4/0xc50 fs/mbcache.c:287 + mb_cache_scan+0x67/0x80 fs/mbcache.c:321 + do_shrink_slab mm/vmscan.c:397 [inline] + shrink_slab+0xc3d/0x12d0 mm/vmscan.c:500 + shrink_node+0x208f/0x2fd0 mm/vmscan.c:2603 + kswapd_shrink_node mm/vmscan.c:3172 [inline] + balance_pgdat mm/vmscan.c:3289 [inline] + kswapd+0x160f/0x2850 mm/vmscan.c:3478 + kthread+0x46c/0x5f0 kernel/kthread.c:230 + ret_from_fork+0x29/0x40 arch/x86/entry/entry_64.S:430 +chained origin: + save_stack_trace+0x37/0x40 arch/x86/kernel/stacktrace.c:59 + kmsan_save_stack_with_flags mm/kmsan/kmsan.c:302 [inline] + kmsan_save_stack mm/kmsan/kmsan.c:317 [inline] + kmsan_internal_chain_origin+0x12a/0x1f0 mm/kmsan/kmsan.c:547 + __msan_store_shadow_origin_1+0xac/0x110 mm/kmsan/kmsan_instr.c:257 + mb_cache_entry_create+0x3b3/0xc60 fs/mbcache.c:95 + ext4_xattr_cache_insert fs/ext4/xattr.c:1647 [inline] + ext4_xattr_block_set+0x4c82/0x5530 fs/ext4/xattr.c:1022 + ext4_xattr_set_handle+0x1332/0x20a0 fs/ext4/xattr.c:1252 + ext4_xattr_set+0x4d2/0x680 fs/ext4/xattr.c:1306 + ext4_xattr_trusted_set+0x8d/0xa0 fs/ext4/xattr_trusted.c:36 + __vfs_setxattr+0x703/0x790 fs/xattr.c:149 + __vfs_setxattr_noperm+0x27a/0x6f0 fs/xattr.c:180 + vfs_setxattr fs/xattr.c:223 [inline] + setxattr+0x6ae/0x790 fs/xattr.c:449 + path_setxattr+0x1eb/0x380 fs/xattr.c:468 + SYSC_lsetxattr+0x8d/0xb0 fs/xattr.c:490 + SyS_lsetxattr+0x77/0xa0 fs/xattr.c:486 + entry_SYSCALL_64_fastpath+0x13/0x94 +origin: + save_stack_trace+0x37/0x40 arch/x86/kernel/stacktrace.c:59 + kmsan_save_stack_with_flags mm/kmsan/kmsan.c:302 [inline] + kmsan_internal_poison_shadow+0xb1/0x1a0 mm/kmsan/kmsan.c:198 + kmsan_kmalloc+0x7f/0xe0 mm/kmsan/kmsan.c:337 + kmem_cache_alloc+0x1c2/0x1e0 mm/slub.c:2766 + mb_cache_entry_create+0x283/0xc60 fs/mbcache.c:86 + ext4_xattr_cache_insert fs/ext4/xattr.c:1647 [inline] + ext4_xattr_block_set+0x4c82/0x5530 fs/ext4/xattr.c:1022 + ext4_xattr_set_handle+0x1332/0x20a0 fs/ext4/xattr.c:1252 + ext4_xattr_set+0x4d2/0x680 fs/ext4/xattr.c:1306 + ext4_xattr_trusted_set+0x8d/0xa0 fs/ext4/xattr_trusted.c:36 + __vfs_setxattr+0x703/0x790 fs/xattr.c:149 + __vfs_setxattr_noperm+0x27a/0x6f0 fs/xattr.c:180 + vfs_setxattr fs/xattr.c:223 [inline] + setxattr+0x6ae/0x790 fs/xattr.c:449 + path_setxattr+0x1eb/0x380 fs/xattr.c:468 + SYSC_lsetxattr+0x8d/0xb0 fs/xattr.c:490 + SyS_lsetxattr+0x77/0xa0 fs/xattr.c:486 + entry_SYSCALL_64_fastpath+0x13/0x94 +================================================================== + +Signed-off-by: Alexander Potapenko +Signed-off-by: Eric Biggers +Cc: stable@vger.kernel.org # v4.6 +Signed-off-by: Greg Kroah-Hartman + +--- + fs/mbcache.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/fs/mbcache.c ++++ b/fs/mbcache.c +@@ -93,6 +93,7 @@ int mb_cache_entry_create(struct mb_cach + entry->e_key = key; + entry->e_block = block; + entry->e_reusable = reusable; ++ entry->e_referenced = 0; + head = mb_cache_entry_head(cache, key); + hlist_bl_lock(head); + hlist_bl_for_each_entry(dup, dup_node, head, e_hash_list) { diff --git a/queue-4.9/mips-fix-typo-big_endian-to-cpu_big_endian.patch b/queue-4.9/mips-fix-typo-big_endian-to-cpu_big_endian.patch new file mode 100644 index 00000000000..05e71d4a64e --- /dev/null +++ b/queue-4.9/mips-fix-typo-big_endian-to-cpu_big_endian.patch @@ -0,0 +1,52 @@ +From 2e6522c565522a2e18409c315c49d78c8b74807b Mon Sep 17 00:00:00 2001 +From: Corentin Labbe +Date: Wed, 17 Jan 2018 19:56:38 +0100 +Subject: MIPS: Fix typo BIG_ENDIAN to CPU_BIG_ENDIAN + +From: Corentin Labbe + +commit 2e6522c565522a2e18409c315c49d78c8b74807b upstream. + +MIPS_GENERIC selects some options conditional on BIG_ENDIAN which does +not exist. + +Replace BIG_ENDIAN with CPU_BIG_ENDIAN which is the correct kconfig +name. Note that BMIPS_GENERIC does the same which confirms that this +patch is needed. + +Fixes: eed0eabd12ef0 ("MIPS: generic: Introduce generic DT-based board support") +Signed-off-by: Corentin Labbe +Reviewed-by: James Hogan +Cc: Ralf Baechle +Cc: linux-mips@linux-mips.org +Cc: # 4.9+ +Patchwork: https://patchwork.linux-mips.org/patch/18495/ +[jhogan@kernel.org: Clean up commit message] +Signed-off-by: James Hogan +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/Kconfig | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -112,12 +112,12 @@ config MIPS_GENERIC + select SYS_SUPPORTS_MULTITHREADING + select SYS_SUPPORTS_RELOCATABLE + select SYS_SUPPORTS_SMARTMIPS +- select USB_EHCI_BIG_ENDIAN_DESC if BIG_ENDIAN +- select USB_EHCI_BIG_ENDIAN_MMIO if BIG_ENDIAN +- select USB_OHCI_BIG_ENDIAN_DESC if BIG_ENDIAN +- select USB_OHCI_BIG_ENDIAN_MMIO if BIG_ENDIAN +- select USB_UHCI_BIG_ENDIAN_DESC if BIG_ENDIAN +- select USB_UHCI_BIG_ENDIAN_MMIO if BIG_ENDIAN ++ select USB_EHCI_BIG_ENDIAN_DESC if CPU_BIG_ENDIAN ++ select USB_EHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN ++ select USB_OHCI_BIG_ENDIAN_DESC if CPU_BIG_ENDIAN ++ select USB_OHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN ++ select USB_UHCI_BIG_ENDIAN_DESC if CPU_BIG_ENDIAN ++ select USB_UHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN + select USE_OF + help + Select this to build a kernel which aims to support multiple boards, diff --git a/queue-4.9/mm-fix-memory-size-alignment-in-devm_memremap_pages_release.patch b/queue-4.9/mm-fix-memory-size-alignment-in-devm_memremap_pages_release.patch new file mode 100644 index 00000000000..fd946883b8c --- /dev/null +++ b/queue-4.9/mm-fix-memory-size-alignment-in-devm_memremap_pages_release.patch @@ -0,0 +1,41 @@ +From 10a0cd6e4932b5078215b1ec2c896597eec0eff9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20H=2E=20Sch=C3=B6nherr?= +Date: Fri, 19 Jan 2018 16:27:54 -0800 +Subject: mm: Fix memory size alignment in devm_memremap_pages_release() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Jan H. Schönherr + +commit 10a0cd6e4932b5078215b1ec2c896597eec0eff9 upstream. + +The functions devm_memremap_pages() and devm_memremap_pages_release() use +different ways to calculate the section-aligned amount of memory. The +latter function may use an incorrect size if the memory region is small +but straddles a section border. + +Use the same code for both. + +Cc: +Fixes: 5f29a77cd957 ("mm: fix mixed zone detection in devm_memremap_pages") +Signed-off-by: Jan H. Schönherr +Signed-off-by: Dan Williams +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/memremap.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/kernel/memremap.c ++++ b/kernel/memremap.c +@@ -245,7 +245,8 @@ static void devm_memremap_pages_release( + + /* pages are dead and unused, undo the arch mapping */ + align_start = res->start & ~(SECTION_SIZE - 1); +- align_size = ALIGN(resource_size(res), SECTION_SIZE); ++ align_size = ALIGN(res->start + resource_size(res), SECTION_SIZE) ++ - align_start; + + lock_device_hotplug(); + mem_hotplug_begin(); diff --git a/queue-4.9/mm-hide-a-warning-for-compile_test.patch b/queue-4.9/mm-hide-a-warning-for-compile_test.patch new file mode 100644 index 00000000000..f9ddbd96024 --- /dev/null +++ b/queue-4.9/mm-hide-a-warning-for-compile_test.patch @@ -0,0 +1,39 @@ +From af27d9403f5b80685b79c88425086edccecaf711 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Fri, 16 Feb 2018 16:25:53 +0100 +Subject: mm: hide a #warning for COMPILE_TEST + +From: Arnd Bergmann + +commit af27d9403f5b80685b79c88425086edccecaf711 upstream. + +We get a warning about some slow configurations in randconfig kernels: + + mm/memory.c:83:2: error: #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid. [-Werror=cpp] + +The warning is reasonable by itself, but gets in the way of randconfig +build testing, so I'm hiding it whenever CONFIG_COMPILE_TEST is set. + +The warning was added in 2013 in commit 75980e97dacc ("mm: fold +page->_last_nid into page->flags where possible"). + +Cc: stable@vger.kernel.org +Signed-off-by: Arnd Bergmann +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + mm/memory.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/mm/memory.c ++++ b/mm/memory.c +@@ -75,7 +75,7 @@ + + #include "internal.h" + +-#ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS ++#if defined(LAST_CPUPID_NOT_IN_PAGE_FLAGS) && !defined(CONFIG_COMPILE_TEST) + #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid. + #endif + diff --git a/queue-4.9/pci-keystone-fix-interrupt-controller-node-lookup.patch b/queue-4.9/pci-keystone-fix-interrupt-controller-node-lookup.patch new file mode 100644 index 00000000000..c7820d8af78 --- /dev/null +++ b/queue-4.9/pci-keystone-fix-interrupt-controller-node-lookup.patch @@ -0,0 +1,57 @@ +From eac56aa3bc8af3d9b9850345d0f2da9d83529134 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 17 Nov 2017 14:38:31 +0100 +Subject: PCI: keystone: Fix interrupt-controller-node lookup + +From: Johan Hovold + +commit eac56aa3bc8af3d9b9850345d0f2da9d83529134 upstream. + +Fix child-node lookup during initialisation which was using the wrong +OF-helper and ended up searching the whole device tree depth-first +starting at the parent rather than just matching on its children. + +To make things worse, the parent pci node could end up being prematurely +freed as of_find_node_by_name() drops a reference to its first argument. +Any matching child interrupt-controller node was also leaked. + +Fixes: 0c4ffcfe1fbc ("PCI: keystone: Add TI Keystone PCIe driver") +Cc: stable # 3.18 +Acked-by: Murali Karicheri +Signed-off-by: Johan Hovold +[lorenzo.pieralisi@arm.com: updated commit subject] +Signed-off-by: Lorenzo Pieralisi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/host/pci-keystone.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/pci/host/pci-keystone.c ++++ b/drivers/pci/host/pci-keystone.c +@@ -181,7 +181,7 @@ static int ks_pcie_get_irq_controller_in + } + + /* interrupt controller is in a child node */ +- *np_temp = of_find_node_by_name(np_pcie, controller); ++ *np_temp = of_get_child_by_name(np_pcie, controller); + if (!(*np_temp)) { + dev_err(dev, "Node for %s is absent\n", controller); + return -EINVAL; +@@ -190,6 +190,7 @@ static int ks_pcie_get_irq_controller_in + temp = of_irq_count(*np_temp); + if (!temp) { + dev_err(dev, "No IRQ entries in %s\n", controller); ++ of_node_put(*np_temp); + return -EINVAL; + } + +@@ -207,6 +208,8 @@ static int ks_pcie_get_irq_controller_in + break; + } + ++ of_node_put(*np_temp); ++ + if (temp) { + *num_irqs = temp; + return 0; diff --git a/queue-4.9/rtc-opal-fix-handling-of-firmware-error-codes-prevent-busy-loops.patch b/queue-4.9/rtc-opal-fix-handling-of-firmware-error-codes-prevent-busy-loops.patch new file mode 100644 index 00000000000..5ef0b926964 --- /dev/null +++ b/queue-4.9/rtc-opal-fix-handling-of-firmware-error-codes-prevent-busy-loops.patch @@ -0,0 +1,82 @@ +From 5b8b58063029f02da573120ef4dc9079822e3cda Mon Sep 17 00:00:00 2001 +From: Stewart Smith +Date: Tue, 2 Aug 2016 11:50:16 +1000 +Subject: rtc-opal: Fix handling of firmware error codes, prevent busy loops + +From: Stewart Smith + +commit 5b8b58063029f02da573120ef4dc9079822e3cda upstream. + +According to the OPAL docs: + skiboot-5.2.5/doc/opal-api/opal-rtc-read-3.txt + skiboot-5.2.5/doc/opal-api/opal-rtc-write-4.txt + +OPAL_HARDWARE may be returned from OPAL_RTC_READ or OPAL_RTC_WRITE and +this indicates either a transient or permanent error. + +Prior to this patch, Linux was not dealing with OPAL_HARDWARE being a +permanent error particularly well, in that you could end up in a busy +loop. + +This was not too hard to trigger on an AMI BMC based OpenPOWER machine +doing a continuous "ipmitool mc reset cold" to the BMC, the result of +that being that we'd get stuck in an infinite loop in +opal_get_rtc_time(). + +We now retry a few times before returning the error higher up the +stack. + +Fixes: 16b1d26e77b1 ("rtc/tpo: Driver to support rtc and wakeup on PowerNV platform") +Cc: stable@vger.kernel.org # v3.19+ +Signed-off-by: Stewart Smith +Signed-off-by: Michael Ellerman +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/rtc/rtc-opal.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +--- a/drivers/rtc/rtc-opal.c ++++ b/drivers/rtc/rtc-opal.c +@@ -58,6 +58,7 @@ static void tm_to_opal(struct rtc_time * + static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm) + { + long rc = OPAL_BUSY; ++ int retries = 10; + u32 y_m_d; + u64 h_m_s_ms; + __be32 __y_m_d; +@@ -67,8 +68,11 @@ static int opal_get_rtc_time(struct devi + rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms); + if (rc == OPAL_BUSY_EVENT) + opal_poll_events(NULL); +- else ++ else if (retries-- && (rc == OPAL_HARDWARE ++ || rc == OPAL_INTERNAL_ERROR)) + msleep(10); ++ else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT) ++ break; + } + + if (rc != OPAL_SUCCESS) +@@ -84,6 +88,7 @@ static int opal_get_rtc_time(struct devi + static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm) + { + long rc = OPAL_BUSY; ++ int retries = 10; + u32 y_m_d = 0; + u64 h_m_s_ms = 0; + +@@ -92,8 +97,11 @@ static int opal_set_rtc_time(struct devi + rc = opal_rtc_write(y_m_d, h_m_s_ms); + if (rc == OPAL_BUSY_EVENT) + opal_poll_events(NULL); +- else ++ else if (retries-- && (rc == OPAL_HARDWARE ++ || rc == OPAL_INTERNAL_ERROR)) + msleep(10); ++ else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT) ++ break; + } + + return rc == OPAL_SUCCESS ? 0 : -EIO; diff --git a/queue-4.9/series b/queue-4.9/series index 9a5fb5637fb..156b7d5ce32 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -1,4 +1,18 @@ scsi-smartpqi-allow-static-build-built-in.patch +drm-radeon-add-dpm-quirk-for-jet-pro-v2.patch +drm-radeon-adjust-tested-variable.patch +rtc-opal-fix-handling-of-firmware-error-codes-prevent-busy-loops.patch +mbcache-initialize-entry-e_referenced-in-mb_cache_entry_create.patch +jbd2-fix-sphinx-kernel-doc-build-warnings.patch +ext4-fix-a-race-in-the-ext4-shutdown-path.patch +ext4-save-error-to-disk-in-__ext4_grp_locked_error.patch +ext4-correct-documentation-for-grpid-mount-option.patch +mm-hide-a-warning-for-compile_test.patch +mm-fix-memory-size-alignment-in-devm_memremap_pages_release.patch +mips-fix-typo-big_endian-to-cpu_big_endian.patch +pci-keystone-fix-interrupt-controller-node-lookup.patch +video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch +console-dummy-leave-.con_font_get-set-to-null.patch powerpc-fix-build-errors-in-stable-tree.patch ib-qib-fix-comparison-error-with-qperf-compare-swap-test.patch ib-mlx4-fix-incorrectly-releasing-steerable-ud-qps-when-have-only-eth-ports.patch diff --git a/queue-4.9/video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch b/queue-4.9/video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch new file mode 100644 index 00000000000..37fcae1854b --- /dev/null +++ b/queue-4.9/video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch @@ -0,0 +1,57 @@ +From 9cb18db0701f6b74f0c45c23ad767b3ebebe37f6 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 29 Dec 2017 19:48:43 +0100 +Subject: video: fbdev: atmel_lcdfb: fix display-timings lookup + +From: Johan Hovold + +commit 9cb18db0701f6b74f0c45c23ad767b3ebebe37f6 upstream. + +Fix child-node lookup during probe, which ended up searching the whole +device tree depth-first starting at the parent rather than just matching +on its children. + +To make things worse, the parent display node was also prematurely +freed. + +Note that the display and timings node references are never put after a +successful dt-initialisation so the nodes would leak on later probe +deferrals and on driver unbind. + +Fixes: b985172b328a ("video: atmel_lcdfb: add device tree suport") +Cc: stable # 3.13 +Cc: Jean-Christophe PLAGNIOL-VILLARD +Cc: Nicolas Ferre +Cc: Alexandre Belloni +Signed-off-by: Johan Hovold +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/video/fbdev/atmel_lcdfb.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/video/fbdev/atmel_lcdfb.c ++++ b/drivers/video/fbdev/atmel_lcdfb.c +@@ -1119,7 +1119,7 @@ static int atmel_lcdfb_of_init(struct at + goto put_display_node; + } + +- timings_np = of_find_node_by_name(display_np, "display-timings"); ++ timings_np = of_get_child_by_name(display_np, "display-timings"); + if (!timings_np) { + dev_err(dev, "failed to find display-timings node\n"); + ret = -ENODEV; +@@ -1140,6 +1140,12 @@ static int atmel_lcdfb_of_init(struct at + fb_add_videomode(&fb_vm, &info->modelist); + } + ++ /* ++ * FIXME: Make sure we are not referencing any fields in display_np ++ * and timings_np and drop our references to them before returning to ++ * avoid leaking the nodes on probe deferral and driver unbind. ++ */ ++ + return 0; + + put_timings_node: -- 2.47.3