]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Feb 2018 11:11:29 +0000 (12:11 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Feb 2018 11:11:29 +0000 (12:11 +0100)
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

15 files changed:
queue-4.9/console-dummy-leave-.con_font_get-set-to-null.patch [new file with mode: 0644]
queue-4.9/drm-radeon-add-dpm-quirk-for-jet-pro-v2.patch [new file with mode: 0644]
queue-4.9/drm-radeon-adjust-tested-variable.patch [new file with mode: 0644]
queue-4.9/ext4-correct-documentation-for-grpid-mount-option.patch [new file with mode: 0644]
queue-4.9/ext4-fix-a-race-in-the-ext4-shutdown-path.patch [new file with mode: 0644]
queue-4.9/ext4-save-error-to-disk-in-__ext4_grp_locked_error.patch [new file with mode: 0644]
queue-4.9/jbd2-fix-sphinx-kernel-doc-build-warnings.patch [new file with mode: 0644]
queue-4.9/mbcache-initialize-entry-e_referenced-in-mb_cache_entry_create.patch [new file with mode: 0644]
queue-4.9/mips-fix-typo-big_endian-to-cpu_big_endian.patch [new file with mode: 0644]
queue-4.9/mm-fix-memory-size-alignment-in-devm_memremap_pages_release.patch [new file with mode: 0644]
queue-4.9/mm-hide-a-warning-for-compile_test.patch [new file with mode: 0644]
queue-4.9/pci-keystone-fix-interrupt-controller-node-lookup.patch [new file with mode: 0644]
queue-4.9/rtc-opal-fix-handling-of-firmware-error-codes-prevent-busy-loops.patch [new file with mode: 0644]
queue-4.9/series
queue-4.9/video-fbdev-atmel_lcdfb-fix-display-timings-lookup.patch [new file with mode: 0644]

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 (file)
index 0000000..e5ed405
--- /dev/null
@@ -0,0 +1,32 @@
+From 724ba8b30b044aa0d94b1cd374fc15806cdd6f18 Mon Sep 17 00:00:00 2001
+From: Nicolas Pitre <nicolas.pitre@linaro.org>
+Date: Mon, 15 Jan 2018 17:04:22 +0100
+Subject: console/dummy: leave .con_font_get set to NULL
+
+From: Nicolas Pitre <nicolas.pitre@linaro.org>
+
+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 <nico@linaro.org>
+Cc: stable@vger.kernel.org
+Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..503bdbb
--- /dev/null
@@ -0,0 +1,40 @@
+From 239b5f64e12b1f09f506c164dff0374924782979 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+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 <alexander.deucher@amd.com>
+
+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 <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..1637104
--- /dev/null
@@ -0,0 +1,57 @@
+From 3a61b527b4e1f285d21b6e9e623dc45cf8bb391f Mon Sep 17 00:00:00 2001
+From: Julia Lawall <Julia.Lawall@lip6.fr>
+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 <Julia.Lawall@lip6.fr>
+
+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/)
+
+// <smpl>
+@@
+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
+)
+// </smpl>
+
+Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..7611c58
--- /dev/null
@@ -0,0 +1,35 @@
+From 9f0372488cc9243018a812e8cfbf27de650b187b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ernesto=20A=2E=20Fern=C3=A1ndez?=
+ <ernesto.mnd.fernandez@gmail.com>
+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 <ernesto.mnd.fernandez@gmail.com>
+
+commit 9f0372488cc9243018a812e8cfbf27de650b187b upstream.
+
+The grpid option is currently described as being the same as nogrpid.
+
+Signed-off-by: Ernesto A. Fernández <ernesto.mnd.fernandez@gmail.com>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..f625ecf
--- /dev/null
@@ -0,0 +1,56 @@
+From abbc3f9395c76d554a9ed27d4b1ebfb5d9b0e4ca Mon Sep 17 00:00:00 2001
+From: Harshad Shirwadkar <harshads@google.com>
+Date: Wed, 10 Jan 2018 00:13:13 -0500
+Subject: ext4: fix a race in the ext4 shutdown path
+
+From: Harshad Shirwadkar <harshads@google.com>
+
+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 <harshads@google.com>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..6c2ed88
--- /dev/null
@@ -0,0 +1,37 @@
+From 06f29cc81f0350261f59643a505010531130eea0 Mon Sep 17 00:00:00 2001
+From: Zhouyi Zhou <zhouzhouyi@gmail.com>
+Date: Wed, 10 Jan 2018 00:34:19 -0500
+Subject: ext4: save error to disk in __ext4_grp_locked_error()
+
+From: Zhouyi Zhou <zhouzhouyi@gmail.com>
+
+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 <zhouzhouyi@gmail.com>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..11d0fc0
--- /dev/null
@@ -0,0 +1,708 @@
+From f69120ce6c024aa634a8fc25787205e42f0ccbe6 Mon Sep 17 00:00:00 2001
+From: "Tobin C. Harding" <me@tobin.cc>
+Date: Wed, 10 Jan 2018 00:27:29 -0500
+Subject: jbd2: fix sphinx kernel-doc build warnings
+
+From: Tobin C. Harding <me@tobin.cc>
+
+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 <me@tobin.cc>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..190cd84
--- /dev/null
@@ -0,0 +1,93 @@
+From 3876bbe27d04b848750d5310a37d6b76b593f648 Mon Sep 17 00:00:00 2001
+From: Alexander Potapenko <glider@google.com>
+Date: Sun, 7 Jan 2018 16:22:35 -0500
+Subject: mbcache: initialize entry->e_referenced in mb_cache_entry_create()
+
+From: Alexander Potapenko <glider@google.com>
+
+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 <glider@google.com>
+Signed-off-by: Eric Biggers <ebiggers@google.com>
+Cc: stable@vger.kernel.org # v4.6
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..05e71d4
--- /dev/null
@@ -0,0 +1,52 @@
+From 2e6522c565522a2e18409c315c49d78c8b74807b Mon Sep 17 00:00:00 2001
+From: Corentin Labbe <clabbe.montjoie@gmail.com>
+Date: Wed, 17 Jan 2018 19:56:38 +0100
+Subject: MIPS: Fix typo BIG_ENDIAN to CPU_BIG_ENDIAN
+
+From: Corentin Labbe <clabbe.montjoie@gmail.com>
+
+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 <clabbe.montjoie@gmail.com>
+Reviewed-by: James Hogan <jhogan@kernel.org>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: linux-mips@linux-mips.org
+Cc: <stable@vger.kernel.org> # 4.9+
+Patchwork: https://patchwork.linux-mips.org/patch/18495/
+[jhogan@kernel.org: Clean up commit message]
+Signed-off-by: James Hogan <jhogan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..fd94688
--- /dev/null
@@ -0,0 +1,41 @@
+From 10a0cd6e4932b5078215b1ec2c896597eec0eff9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20H=2E=20Sch=C3=B6nherr?= <jschoenh@amazon.de>
+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 <jschoenh@amazon.de>
+
+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: <stable@vger.kernel.org>
+Fixes: 5f29a77cd957 ("mm: fix mixed zone detection in devm_memremap_pages")
+Signed-off-by: Jan H. Schönherr <jschoenh@amazon.de>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..f9ddbd9
--- /dev/null
@@ -0,0 +1,39 @@
+From af27d9403f5b80685b79c88425086edccecaf711 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Fri, 16 Feb 2018 16:25:53 +0100
+Subject: mm: hide a #warning for COMPILE_TEST
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+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 <arnd@arndb.de>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..c7820d8
--- /dev/null
@@ -0,0 +1,57 @@
+From eac56aa3bc8af3d9b9850345d0f2da9d83529134 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Fri, 17 Nov 2017 14:38:31 +0100
+Subject: PCI: keystone: Fix interrupt-controller-node lookup
+
+From: Johan Hovold <johan@kernel.org>
+
+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 <stable@vger.kernel.org>     # 3.18
+Acked-by: Murali Karicheri <m-karicheri2@ti.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+[lorenzo.pieralisi@arm.com: updated commit subject]
+Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..5ef0b92
--- /dev/null
@@ -0,0 +1,82 @@
+From 5b8b58063029f02da573120ef4dc9079822e3cda Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Tue, 2 Aug 2016 11:50:16 +1000
+Subject: rtc-opal: Fix handling of firmware error codes, prevent busy loops
+
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+
+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 <stewart@linux.vnet.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;
index 9a5fb5637fb00fa82060825758ee2c4a623af78a..156b7d5ce32a51a8de874b2c3aeae1e0b3f46dc0 100644 (file)
@@ -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 (file)
index 0000000..37fcae1
--- /dev/null
@@ -0,0 +1,57 @@
+From 9cb18db0701f6b74f0c45c23ad767b3ebebe37f6 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Fri, 29 Dec 2017 19:48:43 +0100
+Subject: video: fbdev: atmel_lcdfb: fix display-timings lookup
+
+From: Johan Hovold <johan@kernel.org>
+
+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 <stable@vger.kernel.org>     # 3.13
+Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
+Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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: