]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.14
authorSasha Levin <sashal@kernel.org>
Thu, 7 Oct 2021 14:20:25 +0000 (10:20 -0400)
committerSasha Levin <sashal@kernel.org>
Thu, 7 Oct 2021 14:20:25 +0000 (10:20 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.14/ext2-fix-sleeping-in-atomic-bugs-on-error.patch [new file with mode: 0644]
queue-4.14/kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch [new file with mode: 0644]
queue-4.14/kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch [new file with mode: 0644]
queue-4.14/net-mdio-introduce-a-shutdown-method-to-mdio-device-.patch [new file with mode: 0644]
queue-4.14/scsi-sd-free-scsi_disk-device-via-put_device.patch [new file with mode: 0644]
queue-4.14/scsi-ses-retry-failed-send-receive-diagnostic-comman.patch [new file with mode: 0644]
queue-4.14/series [new file with mode: 0644]
queue-4.14/sparc64-fix-pci_iounmap-when-config_pci-is-not-set.patch [new file with mode: 0644]
queue-4.14/usb-dwc2-check-return-value-after-calling-platform_g.patch [new file with mode: 0644]
queue-4.14/usb-testusb-fix-for-showing-the-connection-speed.patch [new file with mode: 0644]
queue-4.14/xen-netback-correct-success-error-reporting-for-the-.patch [new file with mode: 0644]

diff --git a/queue-4.14/ext2-fix-sleeping-in-atomic-bugs-on-error.patch b/queue-4.14/ext2-fix-sleeping-in-atomic-bugs-on-error.patch
new file mode 100644 (file)
index 0000000..6121f19
--- /dev/null
@@ -0,0 +1,62 @@
+From f2cc0626f7ad01783997ae6f7ca17e2b62eee204 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 e1b3724bebf2..ccd5a7016c19 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-4.14/kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch b/queue-4.14/kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch
new file mode 100644 (file)
index 0000000..e2e7fdd
--- /dev/null
@@ -0,0 +1,72 @@
+From 333999e133ff95d33f2da16b163e34e19c4fbb33 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 36b9f2b29071..2f7a37e38c6d 100644
+--- a/virt/kvm/kvm_main.c
++++ b/virt/kvm/kvm_main.c
+@@ -2197,15 +2197,19 @@ static void grow_halt_poll_ns(struct kvm_vcpu *vcpu)
+ 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-4.14/kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch b/queue-4.14/kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch
new file mode 100644 (file)
index 0000000..6f840fe
--- /dev/null
@@ -0,0 +1,44 @@
+From 7dd8799f87b954a13c90bb3addc31b8cee566913 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 0690155f42b2..fb65f98ea5ac 100644
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -5809,6 +5809,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-4.14/net-mdio-introduce-a-shutdown-method-to-mdio-device-.patch b/queue-4.14/net-mdio-introduce-a-shutdown-method-to-mdio-device-.patch
new file mode 100644 (file)
index 0000000..bcc5be2
--- /dev/null
@@ -0,0 +1,77 @@
+From 6759775494bce916221c8bc3b75c583516a08ada 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 e24f28924af8..5265180251ea 100644
+--- a/drivers/net/phy/mdio_device.c
++++ b/drivers/net/phy/mdio_device.c
+@@ -146,6 +146,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
+  * @new_driver: new mdio_driver to register
+@@ -160,6 +170,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 ca08ab16ecdc..780c4859ce2d 100644
+--- a/include/linux/mdio.h
++++ b/include/linux/mdio.h
+@@ -63,6 +63,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-4.14/scsi-sd-free-scsi_disk-device-via-put_device.patch b/queue-4.14/scsi-sd-free-scsi_disk-device-via-put_device.patch
new file mode 100644 (file)
index 0000000..21979aa
--- /dev/null
@@ -0,0 +1,50 @@
+From 932084e5dfbddc2716d3fbfefa0bc4b8e1d2b10d 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 49d0720a0b7d..e490cbdaad9b 100644
+--- a/drivers/scsi/sd.c
++++ b/drivers/scsi/sd.c
+@@ -3454,15 +3454,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);
+       get_device(&sdkp->dev); /* prevent release before async_schedule */
+-- 
+2.33.0
+
diff --git a/queue-4.14/scsi-ses-retry-failed-send-receive-diagnostic-comman.patch b/queue-4.14/scsi-ses-retry-failed-send-receive-diagnostic-comman.patch
new file mode 100644 (file)
index 0000000..a99892f
--- /dev/null
@@ -0,0 +1,81 @@
+From 7b4f93cfd287008dbab6c1b9dfecd39ea7728b33 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 62f04c0511cf..4b993607887c 100644
+--- a/drivers/scsi/ses.c
++++ b/drivers/scsi/ses.c
+@@ -103,9 +103,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;
+@@ -137,9 +144,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-4.14/series b/queue-4.14/series
new file mode 100644 (file)
index 0000000..60a3196
--- /dev/null
@@ -0,0 +1,10 @@
+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
+scsi-ses-retry-failed-send-receive-diagnostic-comman.patch
+kvm-do-not-shrink-halt_poll_ns-below-grow_start.patch
+kvm-x86-reset-pdptrs_from_userspace-when-exiting-smm.patch
diff --git a/queue-4.14/sparc64-fix-pci_iounmap-when-config_pci-is-not-set.patch b/queue-4.14/sparc64-fix-pci_iounmap-when-config_pci-is-not-set.patch
new file mode 100644 (file)
index 0000000..a49758e
--- /dev/null
@@ -0,0 +1,48 @@
+From 48b120abc9c794470cd2783e479cc4b8b4a3fdb1 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-4.14/usb-dwc2-check-return-value-after-calling-platform_g.patch b/queue-4.14/usb-dwc2-check-return-value-after-calling-platform_g.patch
new file mode 100644 (file)
index 0000000..db9844a
--- /dev/null
@@ -0,0 +1,38 @@
+From 16acae5399eb020ceb21db4e795aa1cd884524bd 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 ef7f3b013fcb..ba7528916da4 100644
+--- a/drivers/usb/dwc2/hcd.c
++++ b/drivers/usb/dwc2/hcd.c
+@@ -5229,6 +5229,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-4.14/usb-testusb-fix-for-showing-the-connection-speed.patch b/queue-4.14/usb-testusb-fix-for-showing-the-connection-speed.patch
new file mode 100644 (file)
index 0000000..5be24f9
--- /dev/null
@@ -0,0 +1,88 @@
+From d8faa80b3e41bb2501320d2190d707e2262581d5 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 2d89b5f686b1..791aadef2d59 100644
+--- a/tools/usb/testusb.c
++++ b/tools/usb/testusb.c
+@@ -278,12 +278,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;
+@@ -312,6 +306,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-4.14/xen-netback-correct-success-error-reporting-for-the-.patch b/queue-4.14/xen-netback-correct-success-error-reporting-for-the-.patch
new file mode 100644 (file)
index 0000000..e442f25
--- /dev/null
@@ -0,0 +1,40 @@
+From 1eabebd403c72c726d017d2627a9e6c267388e33 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 ad555a9a3eca..e1d6dbb4b770 100644
+--- a/drivers/net/xen-netback/netback.c
++++ b/drivers/net/xen-netback/netback.c
+@@ -492,7 +492,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
+