]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.10
authorSasha Levin <sashal@kernel.org>
Thu, 7 Oct 2021 14:20:22 +0000 (10:20 -0400)
committerSasha Levin <sashal@kernel.org>
Thu, 7 Oct 2021 14:20:22 +0000 (10:20 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
29 files changed:
queue-5.10/btrfs-fix-mount-failure-due-to-past-and-transient-de.patch [new file with mode: 0644]
queue-5.10/btrfs-replace-bug_on-in-btrfs_csum_one_bio-with-prop.patch [new file with mode: 0644]
queue-5.10/ext2-fix-sleeping-in-atomic-bugs-on-error.patch [new file with mode: 0644]
queue-5.10/habanalabs-gaudi-fix-lbw-rr-configuration.patch [new file with mode: 0644]
queue-5.10/irqchip-gic-work-around-broken-renesas-integration.patch [new file with mode: 0644]
queue-5.10/kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch [new file with mode: 0644]
queue-5.10/kvm-x86-add-amd-pmu-msrs-to-msrs_to_save_all.patch [new file with mode: 0644]
queue-5.10/kvm-x86-nsvm-restore-int_vector-in-svm_clear_vintr.patch [new file with mode: 0644]
queue-5.10/kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch [new file with mode: 0644]
queue-5.10/net-mdio-introduce-a-shutdown-method-to-mdio-device-.patch [new file with mode: 0644]
queue-5.10/nfsd-back-channel-stuck-in-seq4_status_cb_path_down.patch [new file with mode: 0644]
queue-5.10/nvme-fc-avoid-race-between-time-out-and-tear-down.patch [new file with mode: 0644]
queue-5.10/nvme-fc-update-hardware-queues-before-using-them.patch [new file with mode: 0644]
queue-5.10/platform-x86-touchscreen_dmi-add-info-for-the-chuwi-.patch [new file with mode: 0644]
queue-5.10/platform-x86-touchscreen_dmi-update-info-for-the-chu.patch [new file with mode: 0644]
queue-5.10/scsi-sd-free-scsi_disk-device-via-put_device.patch [new file with mode: 0644]
queue-5.10/scsi-ses-retry-failed-send-receive-diagnostic-comman.patch [new file with mode: 0644]
queue-5.10/selftests-be-sure-to-make-khdr-before-other-targets.patch [new file with mode: 0644]
queue-5.10/selftests-kvm-align-smccc-call-with-the-spec-in-stea.patch [new file with mode: 0644]
queue-5.10/selftests-kvm-fix-get_warnings_count-ignoring-fscanf.patch [new file with mode: 0644]
queue-5.10/series [new file with mode: 0644]
queue-5.10/smb3-correct-smb3-acl-security-descriptor.patch [new file with mode: 0644]
queue-5.10/sparc64-fix-pci_iounmap-when-config_pci-is-not-set.patch [new file with mode: 0644]
queue-5.10/spi-rockchip-handle-zero-length-transfers-without-ti.patch [new file with mode: 0644]
queue-5.10/thermal-drivers-tsens-fix-wrong-check-for-tzd-in-irq.patch [new file with mode: 0644]
queue-5.10/tools-vm-page-types-remove-dependency-on-opt_file-fo.patch [new file with mode: 0644]
queue-5.10/usb-dwc2-check-return-value-after-calling-platform_g.patch [new file with mode: 0644]
queue-5.10/usb-testusb-fix-for-showing-the-connection-speed.patch [new file with mode: 0644]
queue-5.10/xen-netback-correct-success-error-reporting-for-the-.patch [new file with mode: 0644]

diff --git a/queue-5.10/btrfs-fix-mount-failure-due-to-past-and-transient-de.patch b/queue-5.10/btrfs-fix-mount-failure-due-to-past-and-transient-de.patch
new file mode 100644 (file)
index 0000000..6f58568
--- /dev/null
@@ -0,0 +1,81 @@
+From 0a5648aff337c7e9af0ea1b898c4579eb5187c60 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Sep 2021 19:05:44 +0100
+Subject: btrfs: fix mount failure due to past and transient device flush error
+
+From: Filipe Manana <fdmanana@suse.com>
+
+[ Upstream commit 6b225baababf1e3d41a4250e802cbd193e1343fb ]
+
+When we get an error flushing one device, during a super block commit, we
+record the error in the device structure, in the field 'last_flush_error'.
+This is used to later check if we should error out the super block commit,
+depending on whether the number of flush errors is greater than or equals
+to the maximum tolerated device failures for a raid profile.
+
+However if we get a transient device flush error, unmount the filesystem
+and later try to mount it, we can fail the mount because we treat that
+past error as critical and consider the device is missing. Even if it's
+very likely that the error will happen again, as it's probably due to a
+hardware related problem, there may be cases where the error might not
+happen again. One example is during testing, and a test case like the
+new generic/648 from fstests always triggers this. The test cases
+generic/019 and generic/475 also trigger this scenario, but very
+sporadically.
+
+When this happens we get an error like this:
+
+  $ mount /dev/sdc /mnt
+  mount: /mnt wrong fs type, bad option, bad superblock on /dev/sdc, missing codepage or helper program, or other error.
+
+  $ dmesg
+  (...)
+  [12918.886926] BTRFS warning (device sdc): chunk 13631488 missing 1 devices, max tolerance is 0 for writable mount
+  [12918.888293] BTRFS warning (device sdc): writable mount is not allowed due to too many missing devices
+  [12918.890853] BTRFS error (device sdc): open_ctree failed
+
+The failure happens because when btrfs_check_rw_degradable() is called at
+mount time, or at remount from RO to RW time, is sees a non zero value in
+a device's ->last_flush_error attribute, and therefore considers that the
+device is 'missing'.
+
+Fix this by setting a device's ->last_flush_error to zero when we close a
+device, making sure the error is not seen on the next mount attempt. We
+only need to track flush errors during the current mount, so that we never
+commit a super block if such errors happened.
+
+Signed-off-by: Filipe Manana <fdmanana@suse.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/btrfs/volumes.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
+index d8b8764f5bd1..593e0c6d6b44 100644
+--- a/fs/btrfs/volumes.c
++++ b/fs/btrfs/volumes.c
+@@ -1147,6 +1147,19 @@ static void btrfs_close_one_device(struct btrfs_device *device)
+       atomic_set(&device->dev_stats_ccnt, 0);
+       extent_io_tree_release(&device->alloc_state);
++      /*
++       * Reset the flush error record. We might have a transient flush error
++       * in this mount, and if so we aborted the current transaction and set
++       * the fs to an error state, guaranteeing no super blocks can be further
++       * committed. However that error might be transient and if we unmount the
++       * filesystem and mount it again, we should allow the mount to succeed
++       * (btrfs_check_rw_degradable() should not fail) - if after mounting the
++       * filesystem again we still get flush errors, then we will again abort
++       * any transaction and set the error state, guaranteeing no commits of
++       * unsafe super blocks.
++       */
++      device->last_flush_error = 0;
++
+       /* Verify the device is back in a pristine state  */
+       ASSERT(!test_bit(BTRFS_DEV_STATE_FLUSH_SENT, &device->dev_state));
+       ASSERT(!test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state));
+-- 
+2.33.0
+
diff --git a/queue-5.10/btrfs-replace-bug_on-in-btrfs_csum_one_bio-with-prop.patch b/queue-5.10/btrfs-replace-bug_on-in-btrfs_csum_one_bio-with-prop.patch
new file mode 100644 (file)
index 0000000..2a67c16
--- /dev/null
@@ -0,0 +1,53 @@
+From 732e90ef9eae3abfd13315a76f9b2c0185c42c18 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 17 Aug 2021 07:55:40 +0800
+Subject: btrfs: replace BUG_ON() in btrfs_csum_one_bio() with proper error
+ handling
+
+From: Qu Wenruo <wqu@suse.com>
+
+[ Upstream commit bbc9a6eb5eec03dcafee266b19f56295e3b2aa8f ]
+
+There is a BUG_ON() in btrfs_csum_one_bio() to catch code logic error.
+It has indeed caught several bugs during subpage development.
+But the BUG_ON() itself will bring down the whole system which is
+an overkill.
+
+Replace it with a WARN() and exit gracefully, so that it won't crash the
+whole system while we can still catch the code logic error.
+
+Signed-off-by: Qu Wenruo <wqu@suse.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/btrfs/file-item.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
+index 48a2ea6d7092..2de1d8247494 100644
+--- a/fs/btrfs/file-item.c
++++ b/fs/btrfs/file-item.c
+@@ -568,7 +568,18 @@ blk_status_t btrfs_csum_one_bio(struct btrfs_inode *inode, struct bio *bio,
+               if (!ordered) {
+                       ordered = btrfs_lookup_ordered_extent(inode, offset);
+-                      BUG_ON(!ordered); /* Logic error */
++                      /*
++                       * The bio range is not covered by any ordered extent,
++                       * must be a code logic error.
++                       */
++                      if (unlikely(!ordered)) {
++                              WARN(1, KERN_WARNING
++                      "no ordered extent for root %llu ino %llu offset %llu\n",
++                                   inode->root->root_key.objectid,
++                                   btrfs_ino(inode), offset);
++                              kvfree(sums);
++                              return BLK_STS_IOERR;
++                      }
+               }
+               nr_sectors = BTRFS_BYTES_TO_BLKS(fs_info,
+-- 
+2.33.0
+
diff --git a/queue-5.10/ext2-fix-sleeping-in-atomic-bugs-on-error.patch b/queue-5.10/ext2-fix-sleeping-in-atomic-bugs-on-error.patch
new file mode 100644 (file)
index 0000000..8f2ec89
--- /dev/null
@@ -0,0 +1,62 @@
+From 53d495622aa823f9b5ad89fa51ff22c334203c65 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 21 Sep 2021 23:32:33 +0300
+Subject: ext2: fix sleeping in atomic bugs on error
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 372d1f3e1bfede719864d0d1fbf3146b1e638c88 ]
+
+The ext2_error() function syncs the filesystem so it sleeps.  The caller
+is holding a spinlock so it's not allowed to sleep.
+
+   ext2_statfs() <- disables preempt
+   -> ext2_count_free_blocks()
+      -> ext2_get_group_desc()
+
+Fix this by using WARN() to print an error message and a stack trace
+instead of using ext2_error().
+
+Link: https://lore.kernel.org/r/20210921203233.GA16529@kili
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext2/balloc.c | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c
+index 1f3f4326bf3c..c17ccc19b938 100644
+--- a/fs/ext2/balloc.c
++++ b/fs/ext2/balloc.c
+@@ -48,10 +48,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
+       struct ext2_sb_info *sbi = EXT2_SB(sb);
+       if (block_group >= sbi->s_groups_count) {
+-              ext2_error (sb, "ext2_get_group_desc",
+-                          "block_group >= groups_count - "
+-                          "block_group = %d, groups_count = %lu",
+-                          block_group, sbi->s_groups_count);
++              WARN(1, "block_group >= groups_count - "
++                   "block_group = %d, groups_count = %lu",
++                   block_group, sbi->s_groups_count);
+               return NULL;
+       }
+@@ -59,10 +58,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
+       group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(sb);
+       offset = block_group & (EXT2_DESC_PER_BLOCK(sb) - 1);
+       if (!sbi->s_group_desc[group_desc]) {
+-              ext2_error (sb, "ext2_get_group_desc",
+-                          "Group descriptor not loaded - "
+-                          "block_group = %d, group_desc = %lu, desc = %lu",
+-                           block_group, group_desc, offset);
++              WARN(1, "Group descriptor not loaded - "
++                   "block_group = %d, group_desc = %lu, desc = %lu",
++                    block_group, group_desc, offset);
+               return NULL;
+       }
+-- 
+2.33.0
+
diff --git a/queue-5.10/habanalabs-gaudi-fix-lbw-rr-configuration.patch b/queue-5.10/habanalabs-gaudi-fix-lbw-rr-configuration.patch
new file mode 100644 (file)
index 0000000..19ca9ab
--- /dev/null
@@ -0,0 +1,327 @@
+From 8f227d9b86d93fee9e01467f40fb9263feadeb18 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 12 Sep 2021 10:25:49 +0300
+Subject: habanalabs/gaudi: fix LBW RR configuration
+
+From: Oded Gabbay <ogabbay@kernel.org>
+
+[ Upstream commit 0a5ff77bf0a94468d541735f919a633f167787e9 ]
+
+Couple of fixes to the LBW RR configuration:
+
+1. Add missing configuration of the SM RR registers in the DMA_IF.
+2. Remove HBW range that doesn't belong.
+3. Add entire gap + DBG area, from end of TPC7 to end of entire
+   DBG space.
+
+Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../misc/habanalabs/gaudi/gaudi_security.c    | 115 ++++++++++--------
+ 1 file changed, 67 insertions(+), 48 deletions(-)
+
+diff --git a/drivers/misc/habanalabs/gaudi/gaudi_security.c b/drivers/misc/habanalabs/gaudi/gaudi_security.c
+index 2d7add0e5bcc..9343a81d3122 100644
+--- a/drivers/misc/habanalabs/gaudi/gaudi_security.c
++++ b/drivers/misc/habanalabs/gaudi/gaudi_security.c
+@@ -8,16 +8,21 @@
+ #include "gaudiP.h"
+ #include "../include/gaudi/asic_reg/gaudi_regs.h"
+-#define GAUDI_NUMBER_OF_RR_REGS               24
+-#define GAUDI_NUMBER_OF_LBW_RANGES    12
++#define GAUDI_NUMBER_OF_LBW_RR_REGS   28
++#define GAUDI_NUMBER_OF_HBW_RR_REGS   24
++#define GAUDI_NUMBER_OF_LBW_RANGES    10
+-static u64 gaudi_rr_lbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_lbw_hit_aw_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
++      mmDMA_IF_W_S_SOB_HIT_WPROT,
+       mmDMA_IF_W_S_DMA0_HIT_WPROT,
+       mmDMA_IF_W_S_DMA1_HIT_WPROT,
++      mmDMA_IF_E_S_SOB_HIT_WPROT,
+       mmDMA_IF_E_S_DMA0_HIT_WPROT,
+       mmDMA_IF_E_S_DMA1_HIT_WPROT,
++      mmDMA_IF_W_N_SOB_HIT_WPROT,
+       mmDMA_IF_W_N_DMA0_HIT_WPROT,
+       mmDMA_IF_W_N_DMA1_HIT_WPROT,
++      mmDMA_IF_E_N_SOB_HIT_WPROT,
+       mmDMA_IF_E_N_DMA0_HIT_WPROT,
+       mmDMA_IF_E_N_DMA1_HIT_WPROT,
+       mmSIF_RTR_0_LBW_RANGE_PROT_HIT_AW,
+@@ -38,13 +43,17 @@ static u64 gaudi_rr_lbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_7_LBW_RANGE_PROT_HIT_AW,
+ };
+-static u64 gaudi_rr_lbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_lbw_hit_ar_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
++      mmDMA_IF_W_S_SOB_HIT_RPROT,
+       mmDMA_IF_W_S_DMA0_HIT_RPROT,
+       mmDMA_IF_W_S_DMA1_HIT_RPROT,
++      mmDMA_IF_E_S_SOB_HIT_RPROT,
+       mmDMA_IF_E_S_DMA0_HIT_RPROT,
+       mmDMA_IF_E_S_DMA1_HIT_RPROT,
++      mmDMA_IF_W_N_SOB_HIT_RPROT,
+       mmDMA_IF_W_N_DMA0_HIT_RPROT,
+       mmDMA_IF_W_N_DMA1_HIT_RPROT,
++      mmDMA_IF_E_N_SOB_HIT_RPROT,
+       mmDMA_IF_E_N_DMA0_HIT_RPROT,
+       mmDMA_IF_E_N_DMA1_HIT_RPROT,
+       mmSIF_RTR_0_LBW_RANGE_PROT_HIT_AR,
+@@ -65,13 +74,17 @@ static u64 gaudi_rr_lbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_7_LBW_RANGE_PROT_HIT_AR,
+ };
+-static u64 gaudi_rr_lbw_min_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_lbw_min_aw_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
++      mmDMA_IF_W_S_SOB_MIN_WPROT_0,
+       mmDMA_IF_W_S_DMA0_MIN_WPROT_0,
+       mmDMA_IF_W_S_DMA1_MIN_WPROT_0,
++      mmDMA_IF_E_S_SOB_MIN_WPROT_0,
+       mmDMA_IF_E_S_DMA0_MIN_WPROT_0,
+       mmDMA_IF_E_S_DMA1_MIN_WPROT_0,
++      mmDMA_IF_W_N_SOB_MIN_WPROT_0,
+       mmDMA_IF_W_N_DMA0_MIN_WPROT_0,
+       mmDMA_IF_W_N_DMA1_MIN_WPROT_0,
++      mmDMA_IF_E_N_SOB_MIN_WPROT_0,
+       mmDMA_IF_E_N_DMA0_MIN_WPROT_0,
+       mmDMA_IF_E_N_DMA1_MIN_WPROT_0,
+       mmSIF_RTR_0_LBW_RANGE_PROT_MIN_AW_0,
+@@ -92,13 +105,17 @@ static u64 gaudi_rr_lbw_min_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_7_LBW_RANGE_PROT_MIN_AW_0,
+ };
+-static u64 gaudi_rr_lbw_max_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_lbw_max_aw_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
++      mmDMA_IF_W_S_SOB_MAX_WPROT_0,
+       mmDMA_IF_W_S_DMA0_MAX_WPROT_0,
+       mmDMA_IF_W_S_DMA1_MAX_WPROT_0,
++      mmDMA_IF_E_S_SOB_MAX_WPROT_0,
+       mmDMA_IF_E_S_DMA0_MAX_WPROT_0,
+       mmDMA_IF_E_S_DMA1_MAX_WPROT_0,
++      mmDMA_IF_W_N_SOB_MAX_WPROT_0,
+       mmDMA_IF_W_N_DMA0_MAX_WPROT_0,
+       mmDMA_IF_W_N_DMA1_MAX_WPROT_0,
++      mmDMA_IF_E_N_SOB_MAX_WPROT_0,
+       mmDMA_IF_E_N_DMA0_MAX_WPROT_0,
+       mmDMA_IF_E_N_DMA1_MAX_WPROT_0,
+       mmSIF_RTR_0_LBW_RANGE_PROT_MAX_AW_0,
+@@ -119,13 +136,17 @@ static u64 gaudi_rr_lbw_max_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_7_LBW_RANGE_PROT_MAX_AW_0,
+ };
+-static u64 gaudi_rr_lbw_min_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_lbw_min_ar_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
++      mmDMA_IF_W_S_SOB_MIN_RPROT_0,
+       mmDMA_IF_W_S_DMA0_MIN_RPROT_0,
+       mmDMA_IF_W_S_DMA1_MIN_RPROT_0,
++      mmDMA_IF_E_S_SOB_MIN_RPROT_0,
+       mmDMA_IF_E_S_DMA0_MIN_RPROT_0,
+       mmDMA_IF_E_S_DMA1_MIN_RPROT_0,
++      mmDMA_IF_W_N_SOB_MIN_RPROT_0,
+       mmDMA_IF_W_N_DMA0_MIN_RPROT_0,
+       mmDMA_IF_W_N_DMA1_MIN_RPROT_0,
++      mmDMA_IF_E_N_SOB_MIN_RPROT_0,
+       mmDMA_IF_E_N_DMA0_MIN_RPROT_0,
+       mmDMA_IF_E_N_DMA1_MIN_RPROT_0,
+       mmSIF_RTR_0_LBW_RANGE_PROT_MIN_AR_0,
+@@ -146,13 +167,17 @@ static u64 gaudi_rr_lbw_min_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_7_LBW_RANGE_PROT_MIN_AR_0,
+ };
+-static u64 gaudi_rr_lbw_max_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_lbw_max_ar_regs[GAUDI_NUMBER_OF_LBW_RR_REGS] = {
++      mmDMA_IF_W_S_SOB_MAX_RPROT_0,
+       mmDMA_IF_W_S_DMA0_MAX_RPROT_0,
+       mmDMA_IF_W_S_DMA1_MAX_RPROT_0,
++      mmDMA_IF_E_S_SOB_MAX_RPROT_0,
+       mmDMA_IF_E_S_DMA0_MAX_RPROT_0,
+       mmDMA_IF_E_S_DMA1_MAX_RPROT_0,
++      mmDMA_IF_W_N_SOB_MAX_RPROT_0,
+       mmDMA_IF_W_N_DMA0_MAX_RPROT_0,
+       mmDMA_IF_W_N_DMA1_MAX_RPROT_0,
++      mmDMA_IF_E_N_SOB_MAX_RPROT_0,
+       mmDMA_IF_E_N_DMA0_MAX_RPROT_0,
+       mmDMA_IF_E_N_DMA1_MAX_RPROT_0,
+       mmSIF_RTR_0_LBW_RANGE_PROT_MAX_AR_0,
+@@ -173,7 +198,7 @@ static u64 gaudi_rr_lbw_max_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_7_LBW_RANGE_PROT_MAX_AR_0,
+ };
+-static u64 gaudi_rr_hbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_hit_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_HIT_AW,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_HIT_AW,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_HIT_AW,
+@@ -200,7 +225,7 @@ static u64 gaudi_rr_hbw_hit_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_HIT_AW
+ };
+-static u64 gaudi_rr_hbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_hit_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_HIT_AR,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_HIT_AR,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_HIT_AR,
+@@ -227,7 +252,7 @@ static u64 gaudi_rr_hbw_hit_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_HIT_AR
+ };
+-static u64 gaudi_rr_hbw_base_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_base_low_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AW_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_LOW_AW_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AW_0,
+@@ -254,7 +279,7 @@ static u64 gaudi_rr_hbw_base_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_LOW_AW_0
+ };
+-static u64 gaudi_rr_hbw_base_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_base_high_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AW_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_HIGH_AW_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AW_0,
+@@ -281,7 +306,7 @@ static u64 gaudi_rr_hbw_base_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_HIGH_AW_0
+ };
+-static u64 gaudi_rr_hbw_mask_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_mask_low_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AW_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_LOW_AW_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AW_0,
+@@ -308,7 +333,7 @@ static u64 gaudi_rr_hbw_mask_low_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_MASK_LOW_AW_0
+ };
+-static u64 gaudi_rr_hbw_mask_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_mask_high_aw_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AW_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_HIGH_AW_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AW_0,
+@@ -335,7 +360,7 @@ static u64 gaudi_rr_hbw_mask_high_aw_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_MASK_HIGH_AW_0
+ };
+-static u64 gaudi_rr_hbw_base_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_base_low_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AR_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_LOW_AR_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_LOW_AR_0,
+@@ -362,7 +387,7 @@ static u64 gaudi_rr_hbw_base_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_LOW_AR_0
+ };
+-static u64 gaudi_rr_hbw_base_high_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_base_high_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AR_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_BASE_HIGH_AR_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_BASE_HIGH_AR_0,
+@@ -389,7 +414,7 @@ static u64 gaudi_rr_hbw_base_high_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_BASE_HIGH_AR_0
+ };
+-static u64 gaudi_rr_hbw_mask_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_mask_low_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AR_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_LOW_AR_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_LOW_AR_0,
+@@ -416,7 +441,7 @@ static u64 gaudi_rr_hbw_mask_low_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
+       mmNIF_RTR_CTRL_7_RANGE_SEC_MASK_LOW_AR_0
+ };
+-static u64 gaudi_rr_hbw_mask_high_ar_regs[GAUDI_NUMBER_OF_RR_REGS] = {
++static u64 gaudi_rr_hbw_mask_high_ar_regs[GAUDI_NUMBER_OF_HBW_RR_REGS] = {
+       mmDMA_IF_W_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AR_0,
+       mmDMA_IF_W_S_DOWN_CH1_RANGE_SEC_MASK_HIGH_AR_0,
+       mmDMA_IF_E_S_DOWN_CH0_RANGE_SEC_MASK_HIGH_AR_0,
+@@ -8870,50 +8895,44 @@ static void gaudi_init_range_registers_lbw(struct hl_device *hdev)
+       u32 lbw_rng_end[GAUDI_NUMBER_OF_LBW_RANGES];
+       int i, j;
+-      lbw_rng_start[0]  = (0xFBFE0000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[0]    = (0xFBFFF000 & 0x3FFFFFF) + 1;
++      lbw_rng_start[0]  = (0xFC0E8000 & 0x3FFFFFF) - 1; /* 0x000E7FFF */
++      lbw_rng_end[0]    = (0xFC11FFFF & 0x3FFFFFF) + 1; /* 0x00120000 */
+-      lbw_rng_start[1]  = (0xFC0E8000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[1]    = (0xFC120000 & 0x3FFFFFF) + 1;
++      lbw_rng_start[1]  = (0xFC1E8000 & 0x3FFFFFF) - 1; /* 0x001E7FFF */
++      lbw_rng_end[1]    = (0xFC48FFFF & 0x3FFFFFF) + 1; /* 0x00490000 */
+-      lbw_rng_start[2]  = (0xFC1E8000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[2]    = (0xFC48FFFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[2]  = (0xFC600000 & 0x3FFFFFF) - 1; /* 0x005FFFFF */
++      lbw_rng_end[2]    = (0xFCC48FFF & 0x3FFFFFF) + 1; /* 0x00C49000 */
+-      lbw_rng_start[3]  = (0xFC600000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[3]    = (0xFCC48FFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[3]  = (0xFCC4A000 & 0x3FFFFFF) - 1; /* 0x00C49FFF */
++      lbw_rng_end[3]    = (0xFCCDFFFF & 0x3FFFFFF) + 1; /* 0x00CE0000 */
+-      lbw_rng_start[4]  = (0xFCC4A000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[4]    = (0xFCCDFFFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[4]  = (0xFCCE4000 & 0x3FFFFFF) - 1; /* 0x00CE3FFF */
++      lbw_rng_end[4]    = (0xFCD1FFFF & 0x3FFFFFF) + 1; /* 0x00D20000 */
+-      lbw_rng_start[5]  = (0xFCCE4000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[5]    = (0xFCD1FFFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[5]  = (0xFCD24000 & 0x3FFFFFF) - 1; /* 0x00D23FFF */
++      lbw_rng_end[5]    = (0xFCD5FFFF & 0x3FFFFFF) + 1; /* 0x00D60000 */
+-      lbw_rng_start[6]  = (0xFCD24000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[6]    = (0xFCD5FFFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[6]  = (0xFCD64000 & 0x3FFFFFF) - 1; /* 0x00D63FFF */
++      lbw_rng_end[6]    = (0xFCD9FFFF & 0x3FFFFFF) + 1; /* 0x00DA0000 */
+-      lbw_rng_start[7]  = (0xFCD64000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[7]    = (0xFCD9FFFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[7]  = (0xFCDA4000 & 0x3FFFFFF) - 1; /* 0x00DA3FFF */
++      lbw_rng_end[7]    = (0xFCDDFFFF & 0x3FFFFFF) + 1; /* 0x00DE0000 */
+-      lbw_rng_start[8]  = (0xFCDA4000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[8]    = (0xFCDDFFFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[8]  = (0xFCDE4000 & 0x3FFFFFF) - 1; /* 0x00DE3FFF */
++      lbw_rng_end[8]    = (0xFCE05FFF & 0x3FFFFFF) + 1; /* 0x00E06000 */
+-      lbw_rng_start[9]  = (0xFCDE4000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[9]    = (0xFCE05FFF & 0x3FFFFFF) + 1;
++      lbw_rng_start[9]  = (0xFCFC9000 & 0x3FFFFFF) - 1; /* 0x00FC8FFF */
++      lbw_rng_end[9]    = (0xFFFFFFFE & 0x3FFFFFF) + 1; /* 0x03FFFFFF */
+-      lbw_rng_start[10]  = (0xFEC43000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[10]    = (0xFEC43FFF & 0x3FFFFFF) + 1;
+-
+-      lbw_rng_start[11] = (0xFE484000 & 0x3FFFFFF) - 1;
+-      lbw_rng_end[11]   = (0xFE484FFF & 0x3FFFFFF) + 1;
+-
+-      for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++) {
++      for (i = 0 ; i < GAUDI_NUMBER_OF_LBW_RR_REGS ; i++) {
+               WREG32(gaudi_rr_lbw_hit_aw_regs[i],
+                               (1 << GAUDI_NUMBER_OF_LBW_RANGES) - 1);
+               WREG32(gaudi_rr_lbw_hit_ar_regs[i],
+                               (1 << GAUDI_NUMBER_OF_LBW_RANGES) - 1);
+       }
+-      for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++)
++      for (i = 0 ; i < GAUDI_NUMBER_OF_LBW_RR_REGS ; i++)
+               for (j = 0 ; j < GAUDI_NUMBER_OF_LBW_RANGES ; j++) {
+                       WREG32(gaudi_rr_lbw_min_aw_regs[i] + (j << 2),
+                                                       lbw_rng_start[j]);
+@@ -8960,12 +8979,12 @@ static void gaudi_init_range_registers_hbw(struct hl_device *hdev)
+        * 6th range is the host
+        */
+-      for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++) {
++      for (i = 0 ; i < GAUDI_NUMBER_OF_HBW_RR_REGS ; i++) {
+               WREG32(gaudi_rr_hbw_hit_aw_regs[i], 0x1F);
+               WREG32(gaudi_rr_hbw_hit_ar_regs[i], 0x1D);
+       }
+-      for (i = 0 ; i < GAUDI_NUMBER_OF_RR_REGS ; i++) {
++      for (i = 0 ; i < GAUDI_NUMBER_OF_HBW_RR_REGS ; i++) {
+               WREG32(gaudi_rr_hbw_base_low_aw_regs[i], dram_addr_lo);
+               WREG32(gaudi_rr_hbw_base_low_ar_regs[i], dram_addr_lo);
+-- 
+2.33.0
+
diff --git a/queue-5.10/irqchip-gic-work-around-broken-renesas-integration.patch b/queue-5.10/irqchip-gic-work-around-broken-renesas-integration.patch
new file mode 100644 (file)
index 0000000..5d9c101
--- /dev/null
@@ -0,0 +1,123 @@
+From eb0dd50b83e4f5d011d0f14108fd2b45bafd89dd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 10 Sep 2021 18:29:25 +0100
+Subject: irqchip/gic: Work around broken Renesas integration
+
+From: Marc Zyngier <maz@kernel.org>
+
+[ Upstream commit b78f26926b17cc289e4f16b63363abe0aa2e8efc ]
+
+Geert reported that the GIC driver locks up on a Renesas system
+since 005c34ae4b44f085 ("irqchip/gic: Atomically update affinity")
+fixed the driver to use writeb_relaxed() instead of writel_relaxed().
+
+As it turns out, the interconnect used on this system mandates
+32bit wide accesses for all MMIO transactions, even if the GIC
+architecture specifically mandates for some registers to be byte
+accessible. Gahhh...
+
+Work around the issue by crudly detecting the offending system,
+and falling back to an inefficient RMW+lock implementation.
+
+Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Link: https://lore.kernel.org/r/CAMuHMdV+Ev47K5NO8XHsanSq5YRMCHn2gWAQyV-q2LpJVy9HiQ@mail.gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/irqchip/irq-gic.c | 52 ++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 51 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
+index 6053245a4754..176f5f06432d 100644
+--- a/drivers/irqchip/irq-gic.c
++++ b/drivers/irqchip/irq-gic.c
+@@ -107,6 +107,8 @@ static DEFINE_RAW_SPINLOCK(cpu_map_lock);
+ #endif
++static DEFINE_STATIC_KEY_FALSE(needs_rmw_access);
++
+ /*
+  * The GIC mapping of CPU interfaces does not necessarily match
+  * the logical CPU numbering.  Let's use a mapping as returned
+@@ -777,6 +779,25 @@ static int gic_pm_init(struct gic_chip_data *gic)
+ #endif
+ #ifdef CONFIG_SMP
++static void rmw_writeb(u8 bval, void __iomem *addr)
++{
++      static DEFINE_RAW_SPINLOCK(rmw_lock);
++      unsigned long offset = (unsigned long)addr & 3UL;
++      unsigned long shift = offset * 8;
++      unsigned long flags;
++      u32 val;
++
++      raw_spin_lock_irqsave(&rmw_lock, flags);
++
++      addr -= offset;
++      val = readl_relaxed(addr);
++      val &= ~GENMASK(shift + 7, shift);
++      val |= bval << shift;
++      writel_relaxed(val, addr);
++
++      raw_spin_unlock_irqrestore(&rmw_lock, flags);
++}
++
+ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
+                           bool force)
+ {
+@@ -791,7 +812,10 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
+       if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)
+               return -EINVAL;
+-      writeb_relaxed(gic_cpu_map[cpu], reg);
++      if (static_branch_unlikely(&needs_rmw_access))
++              rmw_writeb(gic_cpu_map[cpu], reg);
++      else
++              writeb_relaxed(gic_cpu_map[cpu], reg);
+       irq_data_update_effective_affinity(d, cpumask_of(cpu));
+       return IRQ_SET_MASK_OK_DONE;
+@@ -1384,6 +1408,30 @@ static bool gic_check_eoimode(struct device_node *node, void __iomem **base)
+       return true;
+ }
++static bool gic_enable_rmw_access(void *data)
++{
++      /*
++       * The EMEV2 class of machines has a broken interconnect, and
++       * locks up on accesses that are less than 32bit. So far, only
++       * the affinity setting requires it.
++       */
++      if (of_machine_is_compatible("renesas,emev2")) {
++              static_branch_enable(&needs_rmw_access);
++              return true;
++      }
++
++      return false;
++}
++
++static const struct gic_quirk gic_quirks[] = {
++      {
++              .desc           = "broken byte access",
++              .compatible     = "arm,pl390",
++              .init           = gic_enable_rmw_access,
++      },
++      { },
++};
++
+ static int gic_of_setup(struct gic_chip_data *gic, struct device_node *node)
+ {
+       if (!gic || !node)
+@@ -1400,6 +1448,8 @@ static int gic_of_setup(struct gic_chip_data *gic, struct device_node *node)
+       if (of_property_read_u32(node, "cpu-offset", &gic->percpu_offset))
+               gic->percpu_offset = 0;
++      gic_enable_of_quirks(node, gic_quirks, gic);
++
+       return 0;
+ error:
+-- 
+2.33.0
+
diff --git a/queue-5.10/kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch b/queue-5.10/kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch
new file mode 100644 (file)
index 0000000..2f2c093
--- /dev/null
@@ -0,0 +1,72 @@
+From d564935b2ccc17b656ae1b72db973e9183bcf736 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 2 Sep 2021 12:11:00 +0900
+Subject: KVM: do not shrink halt_poll_ns below grow_start
+
+From: Sergey Senozhatsky <senozhatsky@chromium.org>
+
+[ Upstream commit ae232ea460888dc5a8b37e840c553b02521fbf18 ]
+
+grow_halt_poll_ns() ignores values between 0 and
+halt_poll_ns_grow_start (10000 by default). However,
+when we shrink halt_poll_ns we may fall way below
+halt_poll_ns_grow_start and endup with halt_poll_ns
+values that don't make a lot of sense: like 1 or 9,
+or 19.
+
+VCPU1 trace (halt_poll_ns_shrink equals 2):
+
+VCPU1 grow 10000
+VCPU1 shrink 5000
+VCPU1 shrink 2500
+VCPU1 shrink 1250
+VCPU1 shrink 625
+VCPU1 shrink 312
+VCPU1 shrink 156
+VCPU1 shrink 78
+VCPU1 shrink 39
+VCPU1 shrink 19
+VCPU1 shrink 9
+VCPU1 shrink 4
+
+Mirror what grow_halt_poll_ns() does and set halt_poll_ns
+to 0 as soon as new shrink-ed halt_poll_ns value falls
+below halt_poll_ns_grow_start.
+
+Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Message-Id: <20210902031100.252080-1-senozhatsky@chromium.org>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ virt/kvm/kvm_main.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
+index 0e4310c415a8..57c0c3b18bde 100644
+--- a/virt/kvm/kvm_main.c
++++ b/virt/kvm/kvm_main.c
+@@ -2756,15 +2756,19 @@ out:
+ static void shrink_halt_poll_ns(struct kvm_vcpu *vcpu)
+ {
+-      unsigned int old, val, shrink;
++      unsigned int old, val, shrink, grow_start;
+       old = val = vcpu->halt_poll_ns;
+       shrink = READ_ONCE(halt_poll_ns_shrink);
++      grow_start = READ_ONCE(halt_poll_ns_grow_start);
+       if (shrink == 0)
+               val = 0;
+       else
+               val /= shrink;
++      if (val < grow_start)
++              val = 0;
++
+       vcpu->halt_poll_ns = val;
+       trace_kvm_halt_poll_ns_shrink(vcpu->vcpu_id, val, old);
+ }
+-- 
+2.33.0
+
diff --git a/queue-5.10/kvm-x86-add-amd-pmu-msrs-to-msrs_to_save_all.patch b/queue-5.10/kvm-x86-add-amd-pmu-msrs-to-msrs_to_save_all.patch
new file mode 100644 (file)
index 0000000..8724635
--- /dev/null
@@ -0,0 +1,45 @@
+From 8d007be8f78b119ca500a5353eed13b5f483a955 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Sep 2021 13:39:50 +0000
+Subject: kvm: x86: Add AMD PMU MSRs to msrs_to_save_all[]
+
+From: Fares Mehanna <faresx@amazon.de>
+
+[ Upstream commit e1fc1553cd78292ab3521c94c9dd6e3e70e606a1 ]
+
+Intel PMU MSRs is in msrs_to_save_all[], so add AMD PMU MSRs to have a
+consistent behavior between Intel and AMD when using KVM_GET_MSRS,
+KVM_SET_MSRS or KVM_GET_MSR_INDEX_LIST.
+
+We have to add legacy and new MSRs to handle guests running without
+X86_FEATURE_PERFCTR_CORE.
+
+Signed-off-by: Fares Mehanna <faresx@amazon.de>
+Message-Id: <20210915133951.22389-1-faresx@amazon.de>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/kvm/x86.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
+index 9c031d256028..997e32729919 100644
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -1250,6 +1250,13 @@ static const u32 msrs_to_save_all[] = {
+       MSR_ARCH_PERFMON_EVENTSEL0 + 12, MSR_ARCH_PERFMON_EVENTSEL0 + 13,
+       MSR_ARCH_PERFMON_EVENTSEL0 + 14, MSR_ARCH_PERFMON_EVENTSEL0 + 15,
+       MSR_ARCH_PERFMON_EVENTSEL0 + 16, MSR_ARCH_PERFMON_EVENTSEL0 + 17,
++
++      MSR_K7_EVNTSEL0, MSR_K7_EVNTSEL1, MSR_K7_EVNTSEL2, MSR_K7_EVNTSEL3,
++      MSR_K7_PERFCTR0, MSR_K7_PERFCTR1, MSR_K7_PERFCTR2, MSR_K7_PERFCTR3,
++      MSR_F15H_PERF_CTL0, MSR_F15H_PERF_CTL1, MSR_F15H_PERF_CTL2,
++      MSR_F15H_PERF_CTL3, MSR_F15H_PERF_CTL4, MSR_F15H_PERF_CTL5,
++      MSR_F15H_PERF_CTR0, MSR_F15H_PERF_CTR1, MSR_F15H_PERF_CTR2,
++      MSR_F15H_PERF_CTR3, MSR_F15H_PERF_CTR4, MSR_F15H_PERF_CTR5,
+ };
+ static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_all)];
+-- 
+2.33.0
+
diff --git a/queue-5.10/kvm-x86-nsvm-restore-int_vector-in-svm_clear_vintr.patch b/queue-5.10/kvm-x86-nsvm-restore-int_vector-in-svm_clear_vintr.patch
new file mode 100644 (file)
index 0000000..ce6a25c
--- /dev/null
@@ -0,0 +1,37 @@
+From 1a6f5f753988dea7fe32e716e3b4fd0b2b153e9c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 14 Sep 2021 18:48:12 +0300
+Subject: KVM: x86: nSVM: restore int_vector in svm_clear_vintr
+
+From: Maxim Levitsky <mlevitsk@redhat.com>
+
+[ Upstream commit aee77e1169c1900fe4248dc186962e745b479d9e ]
+
+In svm_clear_vintr we try to restore the virtual interrupt
+injection that might be pending, but we fail to restore
+the interrupt vector.
+
+Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
+Message-Id: <20210914154825.104886-2-mlevitsk@redhat.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/kvm/svm/svm.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
+index 1c23aee3778c..5e1d7396a6b8 100644
+--- a/arch/x86/kvm/svm/svm.c
++++ b/arch/x86/kvm/svm/svm.c
+@@ -1497,6 +1497,8 @@ static void svm_clear_vintr(struct vcpu_svm *svm)
+                       (svm->nested.ctl.int_ctl & V_TPR_MASK));
+               svm->vmcb->control.int_ctl |= svm->nested.ctl.int_ctl &
+                       V_IRQ_INJECTION_BITS_MASK;
++
++              svm->vmcb->control.int_vector = svm->nested.ctl.int_vector;
+       }
+       vmcb_mark_dirty(svm->vmcb, VMCB_INTR);
+-- 
+2.33.0
+
diff --git a/queue-5.10/kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch b/queue-5.10/kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch
new file mode 100644 (file)
index 0000000..ec1ea2d
--- /dev/null
@@ -0,0 +1,44 @@
+From 3d48006c3a41e35d90275e364d8757092df564d5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 13 Sep 2021 17:09:50 +0300
+Subject: KVM: x86: reset pdptrs_from_userspace when exiting smm
+
+From: Maxim Levitsky <mlevitsk@redhat.com>
+
+[ Upstream commit 37687c403a641f251cb2ef2e7830b88aa0647ba9 ]
+
+When exiting SMM, pdpts are loaded again from the guest memory.
+
+This fixes a theoretical bug, when exit from SMM triggers entry to the
+nested guest which re-uses some of the migration
+code which uses this flag as a workaround for a legacy userspace.
+
+Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
+Message-Id: <20210913140954.165665-4-mlevitsk@redhat.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/kvm/x86.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
+index d65da3b5837b..9c031d256028 100644
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -7221,6 +7221,13 @@ static void kvm_smm_changed(struct kvm_vcpu *vcpu)
+               /* Process a latched INIT or SMI, if any.  */
+               kvm_make_request(KVM_REQ_EVENT, vcpu);
++
++              /*
++               * Even if KVM_SET_SREGS2 loaded PDPTRs out of band,
++               * on SMM exit we still need to reload them from
++               * guest memory
++               */
++              vcpu->arch.pdptrs_from_userspace = false;
+       }
+       kvm_mmu_reset_context(vcpu);
+-- 
+2.33.0
+
diff --git a/queue-5.10/net-mdio-introduce-a-shutdown-method-to-mdio-device-.patch b/queue-5.10/net-mdio-introduce-a-shutdown-method-to-mdio-device-.patch
new file mode 100644 (file)
index 0000000..d806dcf
--- /dev/null
@@ -0,0 +1,77 @@
+From fc0012c448ab0bce9672df54f33be14e8e70af8c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Sep 2021 16:34:32 +0300
+Subject: net: mdio: introduce a shutdown method to mdio device drivers
+
+From: Vladimir Oltean <vladimir.oltean@nxp.com>
+
+[ Upstream commit cf9579976f724ad517cc15b7caadea728c7e245c ]
+
+MDIO-attached devices might have interrupts and other things that might
+need quiesced when we kexec into a new kernel. Things are even more
+creepy when those interrupt lines are shared, and in that case it is
+absolutely mandatory to disable all interrupt sources.
+
+Moreover, MDIO devices might be DSA switches, and DSA needs its own
+shutdown method to unlink from the DSA master, which is a new
+requirement that appeared after commit 2f1e8ea726e9 ("net: dsa: link
+interfaces with the DSA master to get rid of lockdep warnings").
+
+So introduce a ->shutdown method in the MDIO device driver structure.
+
+Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/phy/mdio_device.c | 11 +++++++++++
+ include/linux/mdio.h          |  3 +++
+ 2 files changed, 14 insertions(+)
+
+diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c
+index 0837319a52d7..797c41f5590e 100644
+--- a/drivers/net/phy/mdio_device.c
++++ b/drivers/net/phy/mdio_device.c
+@@ -179,6 +179,16 @@ static int mdio_remove(struct device *dev)
+       return 0;
+ }
++static void mdio_shutdown(struct device *dev)
++{
++      struct mdio_device *mdiodev = to_mdio_device(dev);
++      struct device_driver *drv = mdiodev->dev.driver;
++      struct mdio_driver *mdiodrv = to_mdio_driver(drv);
++
++      if (mdiodrv->shutdown)
++              mdiodrv->shutdown(mdiodev);
++}
++
+ /**
+  * mdio_driver_register - register an mdio_driver with the MDIO layer
+  * @drv: new mdio_driver to register
+@@ -193,6 +203,7 @@ int mdio_driver_register(struct mdio_driver *drv)
+       mdiodrv->driver.bus = &mdio_bus_type;
+       mdiodrv->driver.probe = mdio_probe;
+       mdiodrv->driver.remove = mdio_remove;
++      mdiodrv->driver.shutdown = mdio_shutdown;
+       retval = driver_register(&mdiodrv->driver);
+       if (retval) {
+diff --git a/include/linux/mdio.h b/include/linux/mdio.h
+index dbd69b3d170b..de5fb4b333ce 100644
+--- a/include/linux/mdio.h
++++ b/include/linux/mdio.h
+@@ -72,6 +72,9 @@ struct mdio_driver {
+       /* Clears up any memory if needed */
+       void (*remove)(struct mdio_device *mdiodev);
++
++      /* Quiesces the device on system shutdown, turns off interrupts etc */
++      void (*shutdown)(struct mdio_device *mdiodev);
+ };
+ #define to_mdio_driver(d)                                             \
+       container_of(to_mdio_common_driver(d), struct mdio_driver, mdiodrv)
+-- 
+2.33.0
+
diff --git a/queue-5.10/nfsd-back-channel-stuck-in-seq4_status_cb_path_down.patch b/queue-5.10/nfsd-back-channel-stuck-in-seq4_status_cb_path_down.patch
new file mode 100644 (file)
index 0000000..9e984f5
--- /dev/null
@@ -0,0 +1,67 @@
+From 838a85a0ce8f1671424f936ecdc906189d73c058 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 16 Sep 2021 14:22:12 -0400
+Subject: nfsd: back channel stuck in SEQ4_STATUS_CB_PATH_DOWN
+
+From: Dai Ngo <dai.ngo@oracle.com>
+
+[ Upstream commit 02579b2ff8b0becfb51d85a975908ac4ab15fba8 ]
+
+When the back channel enters SEQ4_STATUS_CB_PATH_DOWN state, the client
+recovers by sending BIND_CONN_TO_SESSION but the server fails to recover
+the back channel and leaves it as NFSD4_CB_DOWN.
+
+Fix by enhancing nfsd4_bind_conn_to_session to probe the back channel
+by calling nfsd4_probe_callback.
+
+Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfsd/nfs4state.c | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
+index 0313390fa4b4..1cdf7e0a5c22 100644
+--- a/fs/nfsd/nfs4state.c
++++ b/fs/nfsd/nfs4state.c
+@@ -3512,7 +3512,7 @@ static struct nfsd4_conn *__nfsd4_find_conn(struct svc_xprt *xpt, struct nfsd4_s
+ }
+ static __be32 nfsd4_match_existing_connection(struct svc_rqst *rqst,
+-                              struct nfsd4_session *session, u32 req)
++              struct nfsd4_session *session, u32 req, struct nfsd4_conn **conn)
+ {
+       struct nfs4_client *clp = session->se_client;
+       struct svc_xprt *xpt = rqst->rq_xprt;
+@@ -3535,6 +3535,8 @@ static __be32 nfsd4_match_existing_connection(struct svc_rqst *rqst,
+       else
+               status = nfserr_inval;
+       spin_unlock(&clp->cl_lock);
++      if (status == nfs_ok && conn)
++              *conn = c;
+       return status;
+ }
+@@ -3559,8 +3561,16 @@ __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp,
+       status = nfserr_wrong_cred;
+       if (!nfsd4_mach_creds_match(session->se_client, rqstp))
+               goto out;
+-      status = nfsd4_match_existing_connection(rqstp, session, bcts->dir);
+-      if (status == nfs_ok || status == nfserr_inval)
++      status = nfsd4_match_existing_connection(rqstp, session,
++                      bcts->dir, &conn);
++      if (status == nfs_ok) {
++              if (bcts->dir == NFS4_CDFC4_FORE_OR_BOTH ||
++                              bcts->dir == NFS4_CDFC4_BACK)
++                      conn->cn_flags |= NFS4_CDFC4_BACK;
++              nfsd4_probe_callback(session->se_client);
++              goto out;
++      }
++      if (status == nfserr_inval)
+               goto out;
+       status = nfsd4_map_bcts_dir(&bcts->dir);
+       if (status)
+-- 
+2.33.0
+
diff --git a/queue-5.10/nvme-fc-avoid-race-between-time-out-and-tear-down.patch b/queue-5.10/nvme-fc-avoid-race-between-time-out-and-tear-down.patch
new file mode 100644 (file)
index 0000000..892e068
--- /dev/null
@@ -0,0 +1,51 @@
+From d4ac5f6cd340e6c2c95acc2ccbeed9a6697a6664 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 14 Sep 2021 11:20:07 +0200
+Subject: nvme-fc: avoid race between time out and tear down
+
+From: James Smart <jsmart2021@gmail.com>
+
+[ Upstream commit e5445dae29d25d7b03e0a10d3d4277a1d0c8119b ]
+
+To avoid race between time out and tear down, in tear down process,
+first we quiesce the queue, and then delete the timer and cancel
+the time out work for the queue.
+
+This patch merges the admin and io sync ops into the queue teardown logic
+as shown in the RDMA patch 3017013dcc "nvme-rdma: avoid race between time
+out and tear down". There is no teardown_lock in nvme-fc.
+
+Signed-off-by: James Smart <jsmart2021@gmail.com>
+Tested-by: Daniel Wagner <dwagner@suse.de>
+Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
+Reviewed-by: Hannes Reinecke <hare@suse.de>
+Reviewed-by: Daniel Wagner <dwagner@suse.de>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/fc.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
+index 86c6862e71a1..906cab35afe7 100644
+--- a/drivers/nvme/host/fc.c
++++ b/drivers/nvme/host/fc.c
+@@ -2486,6 +2486,7 @@ __nvme_fc_abort_outstanding_ios(struct nvme_fc_ctrl *ctrl, bool start_queues)
+        */
+       if (ctrl->ctrl.queue_count > 1) {
+               nvme_stop_queues(&ctrl->ctrl);
++              nvme_sync_io_queues(&ctrl->ctrl);
+               blk_mq_tagset_busy_iter(&ctrl->tag_set,
+                               nvme_fc_terminate_exchange, &ctrl->ctrl);
+               blk_mq_tagset_wait_completed_request(&ctrl->tag_set);
+@@ -2509,6 +2510,7 @@ __nvme_fc_abort_outstanding_ios(struct nvme_fc_ctrl *ctrl, bool start_queues)
+        * clean up the admin queue. Same thing as above.
+        */
+       blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
++      blk_sync_queue(ctrl->ctrl.admin_q);
+       blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
+                               nvme_fc_terminate_exchange, &ctrl->ctrl);
+       blk_mq_tagset_wait_completed_request(&ctrl->admin_tag_set);
+-- 
+2.33.0
+
diff --git a/queue-5.10/nvme-fc-update-hardware-queues-before-using-them.patch b/queue-5.10/nvme-fc-update-hardware-queues-before-using-them.patch
new file mode 100644 (file)
index 0000000..bfa0f04
--- /dev/null
@@ -0,0 +1,66 @@
+From 097d2691a4258014d2eb5bc6808f0614334ff9d7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 14 Sep 2021 11:20:06 +0200
+Subject: nvme-fc: update hardware queues before using them
+
+From: Daniel Wagner <dwagner@suse.de>
+
+[ Upstream commit 555f66d0f8a38537456acc77043d0e4469fcbe8e ]
+
+In case the number of hardware queues changes, we need to update the
+tagset and the mapping of ctx to hctx first.
+
+If we try to create and connect the I/O queues first, this operation
+will fail (target will reject the connect call due to the wrong number
+of queues) and hence we bail out of the recreate function. Then we
+will to try the very same operation again, thus we don't make any
+progress.
+
+Signed-off-by: Daniel Wagner <dwagner@suse.de>
+Reviewed-by: Ming Lei <ming.lei@redhat.com>
+Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
+Reviewed-by: Hannes Reinecke <hare@suse.de>
+Reviewed-by: James Smart <jsmart2021@gmail.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/fc.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
+index a0bcec33b020..86c6862e71a1 100644
+--- a/drivers/nvme/host/fc.c
++++ b/drivers/nvme/host/fc.c
+@@ -2952,14 +2952,6 @@ nvme_fc_recreate_io_queues(struct nvme_fc_ctrl *ctrl)
+       if (ctrl->ctrl.queue_count == 1)
+               return 0;
+-      ret = nvme_fc_create_hw_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
+-      if (ret)
+-              goto out_free_io_queues;
+-
+-      ret = nvme_fc_connect_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
+-      if (ret)
+-              goto out_delete_hw_queues;
+-
+       if (prior_ioq_cnt != nr_io_queues) {
+               dev_info(ctrl->ctrl.device,
+                       "reconnect: revising io queue count from %d to %d\n",
+@@ -2969,6 +2961,14 @@ nvme_fc_recreate_io_queues(struct nvme_fc_ctrl *ctrl)
+               nvme_unfreeze(&ctrl->ctrl);
+       }
++      ret = nvme_fc_create_hw_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
++      if (ret)
++              goto out_free_io_queues;
++
++      ret = nvme_fc_connect_io_queues(ctrl, ctrl->ctrl.sqsize + 1);
++      if (ret)
++              goto out_delete_hw_queues;
++
+       return 0;
+ out_delete_hw_queues:
+-- 
+2.33.0
+
diff --git a/queue-5.10/platform-x86-touchscreen_dmi-add-info-for-the-chuwi-.patch b/queue-5.10/platform-x86-touchscreen_dmi-add-info-for-the-chuwi-.patch
new file mode 100644 (file)
index 0000000..64c0ed3
--- /dev/null
@@ -0,0 +1,82 @@
+From 6b6a7f6f781dc61acd2292b431a98e9bc18c9fba Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 5 Sep 2021 15:02:09 +0200
+Subject: platform/x86: touchscreen_dmi: Add info for the Chuwi HiBook (CWI514)
+ tablet
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 3bf1669b0e033c885ebcb1ddc2334088dd125f2d ]
+
+Add touchscreen info for the Chuwi HiBook (CWI514) tablet. This includes
+info for getting the firmware directly from the UEFI, so that the user does
+not need to manually install the firmware in /lib/firmware/silead.
+
+This change will make the touchscreen on these devices work OOTB,
+without requiring any manual setup.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20210905130210.32810-1-hdegoede@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/touchscreen_dmi.c | 37 ++++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
+
+diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c
+index 99260915122c..4f5d53b585db 100644
+--- a/drivers/platform/x86/touchscreen_dmi.c
++++ b/drivers/platform/x86/touchscreen_dmi.c
+@@ -141,6 +141,33 @@ static const struct ts_dmi_data chuwi_hi10_pro_data = {
+       .properties     = chuwi_hi10_pro_props,
+ };
++static const struct property_entry chuwi_hibook_props[] = {
++      PROPERTY_ENTRY_U32("touchscreen-min-x", 30),
++      PROPERTY_ENTRY_U32("touchscreen-min-y", 4),
++      PROPERTY_ENTRY_U32("touchscreen-size-x", 1892),
++      PROPERTY_ENTRY_U32("touchscreen-size-y", 1276),
++      PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
++      PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
++      PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hibook.fw"),
++      PROPERTY_ENTRY_U32("silead,max-fingers", 10),
++      PROPERTY_ENTRY_BOOL("silead,home-button"),
++      { }
++};
++
++static const struct ts_dmi_data chuwi_hibook_data = {
++      .embedded_fw = {
++              .name   = "silead/gsl1680-chuwi-hibook.fw",
++              .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 },
++              .length = 40392,
++              .sha256 = { 0xf7, 0xc0, 0xe8, 0x5a, 0x6c, 0xf2, 0xeb, 0x8d,
++                          0x12, 0xc4, 0x45, 0xbf, 0x55, 0x13, 0x4c, 0x1a,
++                          0x13, 0x04, 0x31, 0x08, 0x65, 0x73, 0xf7, 0xa8,
++                          0x1b, 0x7d, 0x59, 0xc9, 0xe6, 0x97, 0xf7, 0x38 },
++      },
++      .acpi_name      = "MSSL0017:00",
++      .properties     = chuwi_hibook_props,
++};
++
+ static const struct property_entry chuwi_vi8_props[] = {
+       PROPERTY_ENTRY_U32("touchscreen-min-x", 4),
+       PROPERTY_ENTRY_U32("touchscreen-min-y", 6),
+@@ -936,6 +963,16 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
+                       DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
+               },
+       },
++      {
++              /* Chuwi HiBook (CWI514) */
++              .driver_data = (void *)&chuwi_hibook_data,
++              .matches = {
++                      DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
++                      DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
++                      /* Above matches are too generic, add bios-date match */
++                      DMI_MATCH(DMI_BIOS_DATE, "05/07/2016"),
++              },
++      },
+       {
+               /* Chuwi Vi8 (CWI506) */
+               .driver_data = (void *)&chuwi_vi8_data,
+-- 
+2.33.0
+
diff --git a/queue-5.10/platform-x86-touchscreen_dmi-update-info-for-the-chu.patch b/queue-5.10/platform-x86-touchscreen_dmi-update-info-for-the-chu.patch
new file mode 100644 (file)
index 0000000..7258ce3
--- /dev/null
@@ -0,0 +1,65 @@
+From 4ee2759c5b8b5c191c00e27a971fd0b6e8abbf00 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 5 Sep 2021 15:02:10 +0200
+Subject: platform/x86: touchscreen_dmi: Update info for the Chuwi Hi10 Plus
+ (CWI527) tablet
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit 196159d278ae3b49e7bbb7c76822e6008fd89b97 ]
+
+Add info for getting the firmware directly from the UEFI for the Chuwi Hi10
+Plus (CWI527), so that the user does not need to manually install the
+firmware in /lib/firmware/silead.
+
+This change will make the touchscreen on these devices work OOTB,
+without requiring any manual setup.
+
+Also tweak the min and width/height values a bit for more accurate position
+reporting.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20210905130210.32810-2-hdegoede@redhat.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/touchscreen_dmi.c | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c
+index 4f5d53b585db..59b7e90cd587 100644
+--- a/drivers/platform/x86/touchscreen_dmi.c
++++ b/drivers/platform/x86/touchscreen_dmi.c
+@@ -100,10 +100,10 @@ static const struct ts_dmi_data chuwi_hi10_air_data = {
+ };
+ static const struct property_entry chuwi_hi10_plus_props[] = {
+-      PROPERTY_ENTRY_U32("touchscreen-min-x", 0),
+-      PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
+-      PROPERTY_ENTRY_U32("touchscreen-size-x", 1914),
+-      PROPERTY_ENTRY_U32("touchscreen-size-y", 1283),
++      PROPERTY_ENTRY_U32("touchscreen-min-x", 12),
++      PROPERTY_ENTRY_U32("touchscreen-min-y", 10),
++      PROPERTY_ENTRY_U32("touchscreen-size-x", 1908),
++      PROPERTY_ENTRY_U32("touchscreen-size-y", 1270),
+       PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-chuwi-hi10plus.fw"),
+       PROPERTY_ENTRY_U32("silead,max-fingers", 10),
+       PROPERTY_ENTRY_BOOL("silead,home-button"),
+@@ -111,6 +111,15 @@ static const struct property_entry chuwi_hi10_plus_props[] = {
+ };
+ static const struct ts_dmi_data chuwi_hi10_plus_data = {
++      .embedded_fw = {
++              .name   = "silead/gsl1680-chuwi-hi10plus.fw",
++              .prefix = { 0xf0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 },
++              .length = 34056,
++              .sha256 = { 0xfd, 0x0a, 0x08, 0x08, 0x3c, 0xa6, 0x34, 0x4e,
++                          0x2c, 0x49, 0x9c, 0xcd, 0x7d, 0x44, 0x9d, 0x38,
++                          0x10, 0x68, 0xb5, 0xbd, 0xb7, 0x2a, 0x63, 0xb5,
++                          0x67, 0x0b, 0x96, 0xbd, 0x89, 0x67, 0x85, 0x09 },
++      },
+       .acpi_name      = "MSSL0017:00",
+       .properties     = chuwi_hi10_plus_props,
+ };
+-- 
+2.33.0
+
diff --git a/queue-5.10/scsi-sd-free-scsi_disk-device-via-put_device.patch b/queue-5.10/scsi-sd-free-scsi_disk-device-via-put_device.patch
new file mode 100644 (file)
index 0000000..b74e4bc
--- /dev/null
@@ -0,0 +1,50 @@
+From b68308fef59c19021d307578931d545aaa9e0bef Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 Sep 2021 17:01:12 +0800
+Subject: scsi: sd: Free scsi_disk device via put_device()
+
+From: Ming Lei <ming.lei@redhat.com>
+
+[ Upstream commit 265dfe8ebbabae7959060bd1c3f75c2473b697ed ]
+
+After a device is initialized via device_initialize() it should be freed
+via put_device(). sd_probe() currently gets this wrong, fix it up.
+
+Link: https://lore.kernel.org/r/20210906090112.531442-1-ming.lei@redhat.com
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Ming Lei <ming.lei@redhat.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/sd.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
+index f0c0935d7909..56e291708587 100644
+--- a/drivers/scsi/sd.c
++++ b/drivers/scsi/sd.c
+@@ -3443,15 +3443,16 @@ static int sd_probe(struct device *dev)
+       }
+       device_initialize(&sdkp->dev);
+-      sdkp->dev.parent = dev;
++      sdkp->dev.parent = get_device(dev);
+       sdkp->dev.class = &sd_disk_class;
+       dev_set_name(&sdkp->dev, "%s", dev_name(dev));
+       error = device_add(&sdkp->dev);
+-      if (error)
+-              goto out_free_index;
++      if (error) {
++              put_device(&sdkp->dev);
++              goto out;
++      }
+-      get_device(dev);
+       dev_set_drvdata(dev, sdkp);
+       gd->major = sd_major((index & 0xf0) >> 4);
+-- 
+2.33.0
+
diff --git a/queue-5.10/scsi-ses-retry-failed-send-receive-diagnostic-comman.patch b/queue-5.10/scsi-ses-retry-failed-send-receive-diagnostic-comman.patch
new file mode 100644 (file)
index 0000000..b265065
--- /dev/null
@@ -0,0 +1,81 @@
+From 40294f996060f93ed0d07f10bffcd04a60295b55 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 16 Sep 2021 22:24:21 -0500
+Subject: scsi: ses: Retry failed Send/Receive Diagnostic commands
+
+From: Wen Xiong <wenxiong@linux.ibm.com>
+
+[ Upstream commit fbdac19e642899455b4e64c63aafe2325df7aafa ]
+
+Setting SCSI logging level with error=3, we saw some errors from enclosues:
+
+[108017.360833] ses 0:0:9:0: tag#641 Done: NEEDS_RETRY Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
+[108017.360838] ses 0:0:9:0: tag#641 CDB: Receive Diagnostic 1c 01 01 00 20 00
+[108017.427778] ses 0:0:9:0: Power-on or device reset occurred
+[108017.427784] ses 0:0:9:0: tag#641 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s
+[108017.427788] ses 0:0:9:0: tag#641 CDB: Receive Diagnostic 1c 01 01 00 20 00
+[108017.427791] ses 0:0:9:0: tag#641 Sense Key : Unit Attention [current]
+[108017.427793] ses 0:0:9:0: tag#641 Add. Sense: Bus device reset function occurred
+[108017.427801] ses 0:0:9:0: Failed to get diagnostic page 0x1
+[108017.427804] ses 0:0:9:0: Failed to bind enclosure -19
+[108017.427895] ses 0:0:10:0: Attached Enclosure device
+[108017.427942] ses 0:0:10:0: Attached scsi generic sg18 type 13
+
+Retry if the Send/Receive Diagnostic commands complete with a transient
+error status (NOT_READY or UNIT_ATTENTION with ASC 0x29).
+
+Link: https://lore.kernel.org/r/1631849061-10210-2-git-send-email-wenxiong@linux.ibm.com
+Reviewed-by: Brian King <brking@linux.ibm.com>
+Reviewed-by: James Bottomley <jejb@linux.ibm.com>
+Signed-off-by: Wen Xiong <wenxiong@linux.ibm.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ses.c | 22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
+index c2afba2a5414..43e682297fd5 100644
+--- a/drivers/scsi/ses.c
++++ b/drivers/scsi/ses.c
+@@ -87,9 +87,16 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code,
+               0
+       };
+       unsigned char recv_page_code;
++      unsigned int retries = SES_RETRIES;
++      struct scsi_sense_hdr sshdr;
++
++      do {
++              ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
++                                     &sshdr, SES_TIMEOUT, 1, NULL);
++      } while (ret > 0 && --retries && scsi_sense_valid(&sshdr) &&
++               (sshdr.sense_key == NOT_READY ||
++                (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
+-      ret =  scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
+-                              NULL, SES_TIMEOUT, SES_RETRIES, NULL);
+       if (unlikely(ret))
+               return ret;
+@@ -121,9 +128,16 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code,
+               bufflen & 0xff,
+               0
+       };
++      struct scsi_sense_hdr sshdr;
++      unsigned int retries = SES_RETRIES;
++
++      do {
++              result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
++                                        &sshdr, SES_TIMEOUT, 1, NULL);
++      } while (result > 0 && --retries && scsi_sense_valid(&sshdr) &&
++               (sshdr.sense_key == NOT_READY ||
++                (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
+-      result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
+-                                NULL, SES_TIMEOUT, SES_RETRIES, NULL);
+       if (result)
+               sdev_printk(KERN_ERR, sdev, "SEND DIAGNOSTIC result: %8x\n",
+                           result);
+-- 
+2.33.0
+
diff --git a/queue-5.10/selftests-be-sure-to-make-khdr-before-other-targets.patch b/queue-5.10/selftests-be-sure-to-make-khdr-before-other-targets.patch
new file mode 100644 (file)
index 0000000..e0f2178
--- /dev/null
@@ -0,0 +1,49 @@
+From 56de0583412d9a6b9108ae17ee3ca752fed2014c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Sep 2021 21:45:54 +0800
+Subject: selftests: be sure to make khdr before other targets
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Li Zhijian <lizhijian@cn.fujitsu.com>
+
+[ Upstream commit 8914a7a247e065438a0ec86a58c1c359223d2c9e ]
+
+LKP/0Day reported some building errors about kvm, and errors message
+are not always same:
+- lib/x86_64/processor.c:1083:31: error: ‘KVM_CAP_NESTED_STATE’ undeclared
+(first use in this function); did you mean ‘KVM_CAP_PIT_STATE2’?
+- lib/test_util.c:189:30: error: ‘MAP_HUGE_16KB’ undeclared (first use
+in this function); did you mean ‘MAP_HUGE_16GB’?
+
+Although kvm relies on the khdr, they still be built in parallel when -j
+is specified. In this case, it will cause compiling errors.
+
+Here we mark target khdr as NOTPARALLEL to make it be always built
+first.
+
+CC: Philip Li <philip.li@intel.com>
+Reported-by: kernel test robot <lkp@intel.com>
+Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
+Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/lib.mk | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
+index 0af84ad48aa7..b7217b5251f5 100644
+--- a/tools/testing/selftests/lib.mk
++++ b/tools/testing/selftests/lib.mk
+@@ -48,6 +48,7 @@ ARCH         ?= $(SUBARCH)
+ # When local build is done, headers are installed in the default
+ # INSTALL_HDR_PATH usr/include.
+ .PHONY: khdr
++.NOTPARALLEL:
+ khdr:
+ ifndef KSFT_KHDR_INSTALL_DONE
+ ifeq (1,$(DEFAULT_INSTALL_HDR_PATH))
+-- 
+2.33.0
+
diff --git a/queue-5.10/selftests-kvm-align-smccc-call-with-the-spec-in-stea.patch b/queue-5.10/selftests-kvm-align-smccc-call-with-the-spec-in-stea.patch
new file mode 100644 (file)
index 0000000..5ac8086
--- /dev/null
@@ -0,0 +1,49 @@
+From ed3f536751bfc05c8165366ac32cdf89de927a04 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 21 Sep 2021 17:11:21 +0000
+Subject: selftests: KVM: Align SMCCC call with the spec in steal_time
+
+From: Oliver Upton <oupton@google.com>
+
+[ Upstream commit 01f91acb55be7aac3950b89c458bcea9ef6e4f49 ]
+
+The SMC64 calling convention passes a function identifier in w0 and its
+parameters in x1-x17. Given this, there are two deviations in the
+SMC64 call performed by the steal_time test: the function identifier is
+assigned to a 64 bit register and the parameter is only 32 bits wide.
+
+Align the call with the SMCCC by using a 32 bit register to handle the
+function identifier and increasing the parameter width to 64 bits.
+
+Suggested-by: Andrew Jones <drjones@redhat.com>
+Signed-off-by: Oliver Upton <oupton@google.com>
+Reviewed-by: Andrew Jones <drjones@redhat.com>
+Message-Id: <20210921171121.2148982-3-oupton@google.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/kvm/steal_time.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selftests/kvm/steal_time.c
+index fcc840088c91..7daedee3e7ee 100644
+--- a/tools/testing/selftests/kvm/steal_time.c
++++ b/tools/testing/selftests/kvm/steal_time.c
+@@ -120,12 +120,12 @@ struct st_time {
+       uint64_t st_time;
+ };
+-static int64_t smccc(uint32_t func, uint32_t arg)
++static int64_t smccc(uint32_t func, uint64_t arg)
+ {
+       unsigned long ret;
+       asm volatile(
+-              "mov    x0, %1\n"
++              "mov    w0, %w1\n"
+               "mov    x1, %2\n"
+               "hvc    #0\n"
+               "mov    %0, x0\n"
+-- 
+2.33.0
+
diff --git a/queue-5.10/selftests-kvm-fix-get_warnings_count-ignoring-fscanf.patch b/queue-5.10/selftests-kvm-fix-get_warnings_count-ignoring-fscanf.patch
new file mode 100644 (file)
index 0000000..a689f39
--- /dev/null
@@ -0,0 +1,45 @@
+From 2406dd9560aed332be49440fcfc59455ea5e3ea5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Sep 2021 15:28:06 -0600
+Subject: selftests:kvm: fix get_warnings_count() ignoring fscanf() return warn
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Shuah Khan <skhan@linuxfoundation.org>
+
+[ Upstream commit 39a71f712d8a13728febd8f3cb3f6db7e1fa7221 ]
+
+Fix get_warnings_count() to check fscanf() return value to get rid
+of the following warning:
+
+x86_64/mmio_warning_test.c: In function ‘get_warnings_count’:
+x86_64/mmio_warning_test.c:85:2: warning: ignoring return value of ‘fscanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
+   85 |  fscanf(f, "%d", &warnings);
+      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
+Acked-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/kvm/x86_64/mmio_warning_test.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
+index e6480fd5c4bd..8039e1eff938 100644
+--- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
++++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
+@@ -82,7 +82,8 @@ int get_warnings_count(void)
+       FILE *f;
+       f = popen("dmesg | grep \"WARNING:\" | wc -l", "r");
+-      fscanf(f, "%d", &warnings);
++      if (fscanf(f, "%d", &warnings) < 1)
++              warnings = 0;
+       fclose(f);
+       return warnings;
+-- 
+2.33.0
+
diff --git a/queue-5.10/series b/queue-5.10/series
new file mode 100644 (file)
index 0000000..a7d3d56
--- /dev/null
@@ -0,0 +1,28 @@
+spi-rockchip-handle-zero-length-transfers-without-ti.patch
+platform-x86-touchscreen_dmi-add-info-for-the-chuwi-.patch
+platform-x86-touchscreen_dmi-update-info-for-the-chu.patch
+nfsd-back-channel-stuck-in-seq4_status_cb_path_down.patch
+btrfs-replace-bug_on-in-btrfs_csum_one_bio-with-prop.patch
+btrfs-fix-mount-failure-due-to-past-and-transient-de.patch
+net-mdio-introduce-a-shutdown-method-to-mdio-device-.patch
+xen-netback-correct-success-error-reporting-for-the-.patch
+sparc64-fix-pci_iounmap-when-config_pci-is-not-set.patch
+ext2-fix-sleeping-in-atomic-bugs-on-error.patch
+scsi-sd-free-scsi_disk-device-via-put_device.patch
+usb-testusb-fix-for-showing-the-connection-speed.patch
+usb-dwc2-check-return-value-after-calling-platform_g.patch
+habanalabs-gaudi-fix-lbw-rr-configuration.patch
+selftests-be-sure-to-make-khdr-before-other-targets.patch
+selftests-kvm-fix-get_warnings_count-ignoring-fscanf.patch
+nvme-fc-update-hardware-queues-before-using-them.patch
+nvme-fc-avoid-race-between-time-out-and-tear-down.patch
+thermal-drivers-tsens-fix-wrong-check-for-tzd-in-irq.patch
+scsi-ses-retry-failed-send-receive-diagnostic-comman.patch
+irqchip-gic-work-around-broken-renesas-integration.patch
+smb3-correct-smb3-acl-security-descriptor.patch
+tools-vm-page-types-remove-dependency-on-opt_file-fo.patch
+selftests-kvm-align-smccc-call-with-the-spec-in-stea.patch
+kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch
+kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch
+kvm-x86-add-amd-pmu-msrs-to-msrs_to_save_all.patch
+kvm-x86-nsvm-restore-int_vector-in-svm_clear_vintr.patch
diff --git a/queue-5.10/smb3-correct-smb3-acl-security-descriptor.patch b/queue-5.10/smb3-correct-smb3-acl-security-descriptor.patch
new file mode 100644 (file)
index 0000000..11624ec
--- /dev/null
@@ -0,0 +1,49 @@
+From 57db2a41fbc647292dbaaaee09d454134b1ec522 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 23 Sep 2021 16:00:31 -0500
+Subject: smb3: correct smb3 ACL security descriptor
+
+From: Steve French <stfrench@microsoft.com>
+
+[ Upstream commit b06d893ef2492245d0319b4136edb4c346b687a3 ]
+
+Address warning:
+
+        fs/smbfs_client/smb2pdu.c:2425 create_sd_buf()
+        warn: struct type mismatch 'smb3_acl vs cifs_acl'
+
+Pointed out by Dan Carpenter via smatch code analysis tool
+
+Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
+Acked-by: Ronnie Sahlberg <lsahlber@redhat.com>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/cifs/smb2pdu.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
+index ca5102773b72..88554b640b0d 100644
+--- a/fs/cifs/smb2pdu.c
++++ b/fs/cifs/smb2pdu.c
+@@ -2339,7 +2339,7 @@ create_sd_buf(umode_t mode, bool set_owner, unsigned int *len)
+       buf->sd.OffsetDacl = cpu_to_le32(ptr - (__u8 *)&buf->sd);
+       /* Ship the ACL for now. we will copy it into buf later. */
+       aclptr = ptr;
+-      ptr += sizeof(struct cifs_acl);
++      ptr += sizeof(struct smb3_acl);
+       /* create one ACE to hold the mode embedded in reserved special SID */
+       acelen = setup_special_mode_ACE((struct cifs_ace *)ptr, (__u64)mode);
+@@ -2364,7 +2364,7 @@ create_sd_buf(umode_t mode, bool set_owner, unsigned int *len)
+       acl.AclRevision = ACL_REVISION; /* See 2.4.4.1 of MS-DTYP */
+       acl.AclSize = cpu_to_le16(acl_size);
+       acl.AceCount = cpu_to_le16(ace_count);
+-      memcpy(aclptr, &acl, sizeof(struct cifs_acl));
++      memcpy(aclptr, &acl, sizeof(struct smb3_acl));
+       buf->ccontext.DataLength = cpu_to_le32(ptr - (__u8 *)&buf->sd);
+       *len = roundup(ptr - (__u8 *)buf, 8);
+-- 
+2.33.0
+
diff --git a/queue-5.10/sparc64-fix-pci_iounmap-when-config_pci-is-not-set.patch b/queue-5.10/sparc64-fix-pci_iounmap-when-config_pci-is-not-set.patch
new file mode 100644 (file)
index 0000000..733087b
--- /dev/null
@@ -0,0 +1,48 @@
+From 0714446d638a59d0c4856bdea3dd32a6a8b0aeef Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 20 Sep 2021 10:56:32 -0700
+Subject: sparc64: fix pci_iounmap() when CONFIG_PCI is not set
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+[ Upstream commit d8b1e10a2b8efaf71d151aa756052fbf2f3b6d57 ]
+
+Guenter reported [1] that the pci_iounmap() changes remain problematic,
+with sparc64 allnoconfig and tinyconfig still not building due to the
+header file changes and confusion with the arch-specific pci_iounmap()
+implementation.
+
+I'm pretty convinced that sparc should just use GENERIC_IOMAP instead of
+doing its own thing, since it turns out that the sparc64 version of
+pci_iounmap() is somewhat buggy (see [2]).  But in the meantime, this
+just fixes the build by avoiding the trivial re-definition of the empty
+case.
+
+Link: https://lore.kernel.org/lkml/20210920134424.GA346531@roeck-us.net/ [1]
+Link: https://lore.kernel.org/lkml/CAHk-=wgheheFx9myQyy5osh79BAazvmvYURAtub2gQtMvLrhqQ@mail.gmail.com/ [2]
+Reported-by: Guenter Roeck <linux@roeck-us.net>
+Cc: David Miller <davem@davemloft.net>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/sparc/lib/iomap.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/sparc/lib/iomap.c b/arch/sparc/lib/iomap.c
+index c9da9f139694..f3a8cd491ce0 100644
+--- a/arch/sparc/lib/iomap.c
++++ b/arch/sparc/lib/iomap.c
+@@ -19,8 +19,10 @@ void ioport_unmap(void __iomem *addr)
+ EXPORT_SYMBOL(ioport_map);
+ EXPORT_SYMBOL(ioport_unmap);
++#ifdef CONFIG_PCI
+ void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
+ {
+       /* nothing to do */
+ }
+ EXPORT_SYMBOL(pci_iounmap);
++#endif
+-- 
+2.33.0
+
diff --git a/queue-5.10/spi-rockchip-handle-zero-length-transfers-without-ti.patch b/queue-5.10/spi-rockchip-handle-zero-length-transfers-without-ti.patch
new file mode 100644 (file)
index 0000000..9c04622
--- /dev/null
@@ -0,0 +1,44 @@
+From bfd0cbf18b8ac3068bac46bc3c1118da47dc2984 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 27 Aug 2021 07:03:57 +0200
+Subject: spi: rockchip: handle zero length transfers without timing out
+
+From: Tobias Schramm <t.schramm@manjaro.org>
+
+[ Upstream commit 5457773ef99f25fcc4b238ac76b68e28273250f4 ]
+
+Previously zero length transfers submitted to the Rokchip SPI driver would
+time out in the SPI layer. This happens because the SPI peripheral does
+not trigger a transfer completion interrupt for zero length transfers.
+
+Fix that by completing zero length transfers immediately at start of
+transfer.
+
+Signed-off-by: Tobias Schramm <t.schramm@manjaro.org>
+Link: https://lore.kernel.org/r/20210827050357.165409-1-t.schramm@manjaro.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-rockchip.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
+index 0aab37cd64e7..624273d0e727 100644
+--- a/drivers/spi/spi-rockchip.c
++++ b/drivers/spi/spi-rockchip.c
+@@ -582,6 +582,12 @@ static int rockchip_spi_transfer_one(
+       int ret;
+       bool use_dma;
++      /* Zero length transfers won't trigger an interrupt on completion */
++      if (!xfer->len) {
++              spi_finalize_current_transfer(ctlr);
++              return 1;
++      }
++
+       WARN_ON(readl_relaxed(rs->regs + ROCKCHIP_SPI_SSIENR) &&
+               (readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY));
+-- 
+2.33.0
+
diff --git a/queue-5.10/thermal-drivers-tsens-fix-wrong-check-for-tzd-in-irq.patch b/queue-5.10/thermal-drivers-tsens-fix-wrong-check-for-tzd-in-irq.patch
new file mode 100644 (file)
index 0000000..e47d12d
--- /dev/null
@@ -0,0 +1,49 @@
+From ea892c3af1f82b7f39aa3da7ce8051979e7714a1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 Sep 2021 23:25:42 +0200
+Subject: thermal/drivers/tsens: Fix wrong check for tzd in irq handlers
+
+From: Ansuel Smith <ansuelsmth@gmail.com>
+
+[ Upstream commit cf96921876dcee4d6ac07b9de470368a075ba9ad ]
+
+Some devices can have some thermal sensors disabled from the
+factory. The current two irq handler functions check all the sensor by
+default and the check if the sensor was actually registered is
+wrong. The tzd is actually never set if the registration fails hence
+the IS_ERR check is wrong.
+
+Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
+Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
+Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+Link: https://lore.kernel.org/r/20210907212543.20220-1-ansuelsmth@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/thermal/qcom/tsens.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
+index 3c4c0516e58a..cb4f4b522446 100644
+--- a/drivers/thermal/qcom/tsens.c
++++ b/drivers/thermal/qcom/tsens.c
+@@ -415,7 +415,7 @@ static irqreturn_t tsens_critical_irq_thread(int irq, void *data)
+               const struct tsens_sensor *s = &priv->sensor[i];
+               u32 hw_id = s->hw_id;
+-              if (IS_ERR(s->tzd))
++              if (!s->tzd)
+                       continue;
+               if (!tsens_threshold_violated(priv, hw_id, &d))
+                       continue;
+@@ -465,7 +465,7 @@ static irqreturn_t tsens_irq_thread(int irq, void *data)
+               const struct tsens_sensor *s = &priv->sensor[i];
+               u32 hw_id = s->hw_id;
+-              if (IS_ERR(s->tzd))
++              if (!s->tzd)
+                       continue;
+               if (!tsens_threshold_violated(priv, hw_id, &d))
+                       continue;
+-- 
+2.33.0
+
diff --git a/queue-5.10/tools-vm-page-types-remove-dependency-on-opt_file-fo.patch b/queue-5.10/tools-vm-page-types-remove-dependency-on-opt_file-fo.patch
new file mode 100644 (file)
index 0000000..c3d3318
--- /dev/null
@@ -0,0 +1,48 @@
+From aa031514621538457cd7eeff7d5ee002196ff68f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 24 Sep 2021 15:43:41 -0700
+Subject: tools/vm/page-types: remove dependency on opt_file for idle page
+ tracking
+
+From: Changbin Du <changbin.du@gmail.com>
+
+[ Upstream commit ebaeab2fe87987cef28eb5ab174c42cd28594387 ]
+
+Idle page tracking can also be used for process address space, not only
+file mappings.
+
+Without this change, using with '-i' option for process address space
+encounters below errors reported.
+
+  $ sudo ./page-types -p $(pidof bash) -i
+  mark page idle: Bad file descriptor
+  mark page idle: Bad file descriptor
+  mark page idle: Bad file descriptor
+  mark page idle: Bad file descriptor
+  ...
+
+Link: https://lkml.kernel.org/r/20210917032826.10669-1-changbin.du@gmail.com
+Signed-off-by: Changbin Du <changbin.du@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/vm/page-types.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/vm/page-types.c b/tools/vm/page-types.c
+index 0517c744b04e..f62f10c988db 100644
+--- a/tools/vm/page-types.c
++++ b/tools/vm/page-types.c
+@@ -1331,7 +1331,7 @@ int main(int argc, char *argv[])
+       if (opt_list && opt_list_mapcnt)
+               kpagecount_fd = checked_open(PROC_KPAGECOUNT, O_RDONLY);
+-      if (opt_mark_idle && opt_file)
++      if (opt_mark_idle)
+               page_idle_fd = checked_open(SYS_KERNEL_MM_PAGE_IDLE, O_RDWR);
+       if (opt_list && opt_pid)
+-- 
+2.33.0
+
diff --git a/queue-5.10/usb-dwc2-check-return-value-after-calling-platform_g.patch b/queue-5.10/usb-dwc2-check-return-value-after-calling-platform_g.patch
new file mode 100644 (file)
index 0000000..b25cc2f
--- /dev/null
@@ -0,0 +1,38 @@
+From 9442a4fb514bbbfb3b4da2115480f5332132e2fe Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 31 Aug 2021 16:42:36 +0800
+Subject: usb: dwc2: check return value after calling platform_get_resource()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit 856e6e8e0f9300befa87dde09edb578555c99a82 ]
+
+It will cause null-ptr-deref if platform_get_resource() returns NULL,
+we need check the return value.
+
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Link: https://lore.kernel.org/r/20210831084236.1359677-1-yangyingliang@huawei.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/dwc2/hcd.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
+index 6af1dcbc3656..30919f741b7f 100644
+--- a/drivers/usb/dwc2/hcd.c
++++ b/drivers/usb/dwc2/hcd.c
+@@ -5074,6 +5074,10 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
+       hcd->has_tt = 1;
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      if (!res) {
++              retval = -EINVAL;
++              goto error1;
++      }
+       hcd->rsrc_start = res->start;
+       hcd->rsrc_len = resource_size(res);
+-- 
+2.33.0
+
diff --git a/queue-5.10/usb-testusb-fix-for-showing-the-connection-speed.patch b/queue-5.10/usb-testusb-fix-for-showing-the-connection-speed.patch
new file mode 100644 (file)
index 0000000..1a6737a
--- /dev/null
@@ -0,0 +1,88 @@
+From 0f9dd9d996eeb4c0ba224314a30402a876ae5246 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 2 Sep 2021 17:14:44 +0530
+Subject: usb: testusb: Fix for showing the connection speed
+
+From: Faizel K B <faizel.kb@dicortech.com>
+
+[ Upstream commit f81c08f897adafd2ed43f86f00207ff929f0b2eb ]
+
+testusb' application which uses 'usbtest' driver reports 'unknown speed'
+from the function 'find_testdev'. The variable 'entry->speed' was not
+updated from  the application. The IOCTL mentioned in the FIXME comment can
+only report whether the connection is low speed or not. Speed is read using
+the IOCTL USBDEVFS_GET_SPEED which reports the proper speed grade.  The
+call is implemented in the function 'handle_testdev' where the file
+descriptor was availble locally. Sample output is given below where 'high
+speed' is printed as the connected speed.
+
+sudo ./testusb -a
+high speed      /dev/bus/usb/001/011    0
+/dev/bus/usb/001/011 test 0,    0.000015 secs
+/dev/bus/usb/001/011 test 1,    0.194208 secs
+/dev/bus/usb/001/011 test 2,    0.077289 secs
+/dev/bus/usb/001/011 test 3,    0.170604 secs
+/dev/bus/usb/001/011 test 4,    0.108335 secs
+/dev/bus/usb/001/011 test 5,    2.788076 secs
+/dev/bus/usb/001/011 test 6,    2.594610 secs
+/dev/bus/usb/001/011 test 7,    2.905459 secs
+/dev/bus/usb/001/011 test 8,    2.795193 secs
+/dev/bus/usb/001/011 test 9,    8.372651 secs
+/dev/bus/usb/001/011 test 10,    6.919731 secs
+/dev/bus/usb/001/011 test 11,   16.372687 secs
+/dev/bus/usb/001/011 test 12,   16.375233 secs
+/dev/bus/usb/001/011 test 13,    2.977457 secs
+/dev/bus/usb/001/011 test 14 --> 22 (Invalid argument)
+/dev/bus/usb/001/011 test 17,    0.148826 secs
+/dev/bus/usb/001/011 test 18,    0.068718 secs
+/dev/bus/usb/001/011 test 19,    0.125992 secs
+/dev/bus/usb/001/011 test 20,    0.127477 secs
+/dev/bus/usb/001/011 test 21 --> 22 (Invalid argument)
+/dev/bus/usb/001/011 test 24,    4.133763 secs
+/dev/bus/usb/001/011 test 27,    2.140066 secs
+/dev/bus/usb/001/011 test 28,    2.120713 secs
+/dev/bus/usb/001/011 test 29,    0.507762 secs
+
+Signed-off-by: Faizel K B <faizel.kb@dicortech.com>
+Link: https://lore.kernel.org/r/20210902114444.15106-1-faizel.kb@dicortech.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/usb/testusb.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/tools/usb/testusb.c b/tools/usb/testusb.c
+index ee8208b2f946..69c3ead25313 100644
+--- a/tools/usb/testusb.c
++++ b/tools/usb/testusb.c
+@@ -265,12 +265,6 @@ nomem:
+       }
+       entry->ifnum = ifnum;
+-
+-      /* FIXME update USBDEVFS_CONNECTINFO so it tells about high speed etc */
+-
+-      fprintf(stderr, "%s speed\t%s\t%u\n",
+-              speed(entry->speed), entry->name, entry->ifnum);
+-
+       entry->next = testdevs;
+       testdevs = entry;
+       return 0;
+@@ -299,6 +293,14 @@ static void *handle_testdev (void *arg)
+               return 0;
+       }
++      status  =  ioctl(fd, USBDEVFS_GET_SPEED, NULL);
++      if (status < 0)
++              fprintf(stderr, "USBDEVFS_GET_SPEED failed %d\n", status);
++      else
++              dev->speed = status;
++      fprintf(stderr, "%s speed\t%s\t%u\n",
++                      speed(dev->speed), dev->name, dev->ifnum);
++
+ restart:
+       for (i = 0; i < TEST_CASES; i++) {
+               if (dev->test != -1 && dev->test != i)
+-- 
+2.33.0
+
diff --git a/queue-5.10/xen-netback-correct-success-error-reporting-for-the-.patch b/queue-5.10/xen-netback-correct-success-error-reporting-for-the-.patch
new file mode 100644 (file)
index 0000000..c016421
--- /dev/null
@@ -0,0 +1,40 @@
+From 7daa02dd4ae40ac3444374c9b5fbabaee32f298b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Sep 2021 08:27:10 +0200
+Subject: xen-netback: correct success/error reporting for the
+ SKB-with-fraglist case
+
+From: Jan Beulich <jbeulich@suse.com>
+
+[ Upstream commit 3ede7f84c7c21f93c5eac611d60eba3f2c765e0f ]
+
+When re-entering the main loop of xenvif_tx_check_gop() a 2nd time, the
+special considerations for the head of the SKB no longer apply. Don't
+mistakenly report ERROR to the frontend for the first entry in the list,
+even if - from all I can tell - this shouldn't matter much as the overall
+transmit will need to be considered failed anyway.
+
+Signed-off-by: Jan Beulich <jbeulich@suse.com>
+Reviewed-by: Paul Durrant <paul@xen.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/xen-netback/netback.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
+index 986b56970961..b0cbc7fead74 100644
+--- a/drivers/net/xen-netback/netback.c
++++ b/drivers/net/xen-netback/netback.c
+@@ -499,7 +499,7 @@ check_frags:
+                                * the header's copy failed, and they are
+                                * sharing a slot, send an error
+                                */
+-                              if (i == 0 && sharedslot)
++                              if (i == 0 && !first_shinfo && sharedslot)
+                                       xenvif_idx_release(queue, pending_idx,
+                                                          XEN_NETIF_RSP_ERROR);
+                               else
+-- 
+2.33.0
+