Home Home > GIT Browse > SLE15-AZURE
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlaf Hering <ohering@suse.de>2019-07-05 14:53:51 +0200
committerOlaf Hering <ohering@suse.de>2019-07-05 14:53:51 +0200
commit225e3bc5bd716fecfd2bdf18c83d03ef96830f49 (patch)
tree2a0791d08405c62336410f62b52e95e948392b46
parentc5b0b6b388ce6957e0d082288b670d7158d44371 (diff)
parentd4253618b0da7eaa3246271eac65d052bebf3e4e (diff)
Merge remote-tracking branch 'kerncvs/SLE12-SP4' into SLE12-SP4-AZURE
-rw-r--r--blacklist.conf5
-rw-r--r--patches.arch/powerpc-rtas-retry-when-cpu-offline-races-with-suspe.patch59
-rw-r--r--patches.arch/x86-amd_nb-add-pci-device-ids-for-family-17h-model-30h.patch62
-rw-r--r--patches.arch/x86-amd_nb-add-support-for-newer-pci-topologies.patch60
-rw-r--r--patches.arch/x86-cpu-get-cache-info-and-setup-cache-cpumap-for-hygon-dhyana.patch66
-rw-r--r--patches.drivers/hwmon-k10temp-add-support-for-amd-family-17h-model-30h-cpus.patch17
-rw-r--r--patches.drivers/ibmvnic-Do-not-close-unopened-driver-during-reset.patch3
-rw-r--r--patches.drivers/ibmvnic-Fix-unchecked-return-codes-of-memory-allocat.patch3
-rw-r--r--patches.drivers/ibmvnic-Refresh-device-multicast-list-after-reset.patch3
-rw-r--r--patches.drivers/net-mvpp2-Use-strscpy-to-handle-stat-strings.patch32
-rw-r--r--patches.drivers/net-mvpp2-prs-Fix-parser-range-for-VID-filtering.patch75
-rw-r--r--patches.drivers/net-mvpp2-prs-Use-the-correct-helpers-when-removing-.patch38
-rw-r--r--patches.fixes/Bluetooth-Fix-faulty-expression-for-minimum-encrypti.patch37
-rw-r--r--patches.fixes/ceph-flush-dirty-inodes-before-proceeding-with-remount.patch46
-rw-r--r--patches.fixes/crypto-user-prevent-operating-on-larval-algorithms.patch3
-rw-r--r--patches.fixes/dax-check-for-queue_flag_dax-in-bdev_dax_supported.patch2
-rw-r--r--patches.fixes/device-core-Consolidate-locking-and-unlocking-of-par.patch237
-rw-r--r--patches.fixes/driver-core-Establish-order-of-operations-for-device.patch138
-rw-r--r--patches.fixes/driver-core-Probe-devices-asynchronously-instead-of-.patch164
-rw-r--r--patches.fixes/drivers-base-introduce-kill_device.patch94
-rw-r--r--patches.fixes/libnvdimm-bus-prevent-duplicate-device_unregister-calls.patch95
-rw-r--r--patches.fixes/nvme-multipath-avoid-crash-on-invalid-subsystem-cntl.patch3
-rw-r--r--patches.fixes/sched-topology-Improve-load-balancing-on-AMD-EPYC.patch131
-rw-r--r--patches.fixes/scsi-Introduce-scsi_start_queue.patch2
-rw-r--r--patches.fixes/scsi-Split-scsi_internal_device_block.patch2
-rw-r--r--patches.kabi/drivers-base-kABI-fixes-for-struct-device_private.patch34
-rw-r--r--patches.kabi/x86-topology-Add-CPUID.1F-multi-die-package-support.patch4
-rw-r--r--patches.kabi/x86-topology-Define-topology_logical_die_id.patch6
-rw-r--r--patches.suse/block-Fix-a-NULL-pointer-dereference-in-generic_make.patch78
-rw-r--r--rpm/package-descriptions2
-rwxr-xr-xscripts/git_sort/git_sort.py1
-rw-r--r--series.conf31
32 files changed, 1407 insertions, 126 deletions
diff --git a/blacklist.conf b/blacklist.conf
index 21b996fce0..a11542ce64 100644
--- a/blacklist.conf
+++ b/blacklist.conf
@@ -1261,3 +1261,8 @@ a25d8c327bb41742dbd59f8c545f59f3b9c39983 # md/raid5: reverting the above
e9d38b08d7a68ede91280036a6657693387e2bcd # bt: revert in the stable tree, but fixed differently in upstream
6c5ed91b0ca6480642eed4fd9862e2bb238f35ae # cosmetic buil dix only
1e029b836108d0b68ba574482604247c97cb4757 # driver is not used
+1a22ec643580626f439c8583edafdcc73798f2fb # would break kABI
+09fe1f8d7e2f461275b1cdd832f2cfa5e9be346d # would break kABI
+c3acd59014148470dc58519870fbc779785b4bf7 # depends on 09fe1f8d7e2f461275b1cdd832f2cfa5e9be346d
+7746a8dfb3f9c91b3a0b63a1d5c2664410e6498d # depends on 09fe1f8d7e2f461275b1cdd832f2cfa5e9be346d
+d5443bbf5fc8f8389cce146b1fc2987cdd229d12 # infrastructure, no bug fix
diff --git a/patches.arch/powerpc-rtas-retry-when-cpu-offline-races-with-suspe.patch b/patches.arch/powerpc-rtas-retry-when-cpu-offline-races-with-suspe.patch
new file mode 100644
index 0000000000..68b390c6ed
--- /dev/null
+++ b/patches.arch/powerpc-rtas-retry-when-cpu-offline-races-with-suspe.patch
@@ -0,0 +1,59 @@
+From 9fb603050ffd94f8127df99c699cca2f575eb6a0 Mon Sep 17 00:00:00 2001
+From: Nathan Lynch <nathanl@linux.ibm.com>
+Date: Fri, 21 Jun 2019 01:05:18 -0500
+Subject: [PATCH] powerpc/rtas: retry when cpu offline races with
+ suspend/migration
+
+References: bsc#1140428, LTC#178808
+Patch-mainline: queued
+Git-repo: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git
+Git-commit: 9fb603050ffd94f8127df99c699cca2f575eb6a0
+
+The protocol for suspending or migrating an LPAR requires all present
+processor threads to enter H_JOIN. So if we have threads offline, we
+have to temporarily bring them up. This can race with administrator
+actions such as SMT state changes. As of dfd718a2ed1f ("powerpc/rtas:
+Fix a potential race between CPU-Offline & Migration"),
+rtas_ibm_suspend_me() accounts for this, but errors out with -EBUSY
+for what almost certainly is a transient condition in any reasonable
+scenario.
+
+Callers of rtas_ibm_suspend_me() already retry when -EAGAIN is
+returned, and it is typical during a migration for that to happen
+repeatedly for several minutes polling the H_VASI_STATE hcall result
+before proceeding to the next stage.
+
+So return -EAGAIN instead of -EBUSY when this race is
+encountered. Additionally: logging this event is still appropriate but
+use pr_info instead of pr_err; and remove use of unlikely() while here
+as this is not a hot path at all.
+
+Fixes: dfd718a2ed1f ("powerpc/rtas: Fix a potential race between CPU-Offline & Migration")
+Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Acked-by: Michal Suchanek <msuchanek@suse.de>
+---
+ arch/powerpc/kernel/rtas.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
+index fbc676160adf..9b4d2a2ffb4f 100644
+--- a/arch/powerpc/kernel/rtas.c
++++ b/arch/powerpc/kernel/rtas.c
+@@ -984,10 +984,9 @@ int rtas_ibm_suspend_me(u64 handle)
+ cpu_hotplug_disable();
+
+ /* Check if we raced with a CPU-Offline Operation */
+- if (unlikely(!cpumask_equal(cpu_present_mask, cpu_online_mask))) {
+- pr_err("%s: Raced against a concurrent CPU-Offline\n",
+- __func__);
+- atomic_set(&data.error, -EBUSY);
++ if (!cpumask_equal(cpu_present_mask, cpu_online_mask)) {
++ pr_info("%s: Raced against a concurrent CPU-Offline\n", __func__);
++ atomic_set(&data.error, -EAGAIN);
+ goto out_hotplug_enable;
+ }
+
+--
+2.21.0
+
diff --git a/patches.arch/x86-amd_nb-add-pci-device-ids-for-family-17h-model-30h.patch b/patches.arch/x86-amd_nb-add-pci-device-ids-for-family-17h-model-30h.patch
index 883bcf62a6..cfe4cc797e 100644
--- a/patches.arch/x86-amd_nb-add-pci-device-ids-for-family-17h-model-30h.patch
+++ b/patches.arch/x86-amd_nb-add-pci-device-ids-for-family-17h-model-30h.patch
@@ -1,9 +1,11 @@
+From be3518a16ef270e3b030a6ae96055f83f51bd3dd Mon Sep 17 00:00:00 2001
From: "Woods, Brian" <Brian.Woods@amd.com>
Date: Tue, 6 Nov 2018 20:08:18 +0000
-Subject: x86/amd_nb: Add PCI device IDs for family 17h, model 30h
-Git-commit: be3518a16ef270e3b030a6ae96055f83f51bd3dd
-Patch-mainline: v5.0-rc1
+Subject: [PATCH] x86/amd_nb: Add PCI device IDs for family 17h, model 30h
+
References: fate#326899
+Patch-mainline: v5.0-rc1
+Git-commit: be3518a16ef270e3b030a6ae96055f83f51bd3dd
Add the PCI device IDs for family 17h model 30h, since they are needed
for accessing various registers via the data fabric/SMN interface.
@@ -24,31 +26,58 @@ CC: Thomas Gleixner <tglx@linutronix.de>
CC: x86-ml <x86@kernel.org>
Link: http://lkml.kernel.org/r/20181106200754.60722-4-brian.woods@amd.com
---
- arch/x86/kernel/amd_nb.c | 2 +-
- include/linux/pci_ids.h | 1 +
- 2 files changed, 2 insertions(+), 1 deletion(-)
+ arch/x86/kernel/amd_nb.c | 6 ++++++
+ include/linux/pci_ids.h | 1 +
+ 2 files changed, 7 insertions(+)
+diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
+index cc34266e3c62..cc51275c8759 100644
--- a/arch/x86/kernel/amd_nb.c
+++ b/arch/x86/kernel/amd_nb.c
-@@ -33,7 +33,6 @@ static const struct pci_device_id amd_ro
+@@ -16,8 +16,10 @@
+
+ #define PCI_DEVICE_ID_AMD_17H_ROOT 0x1450
+ #define PCI_DEVICE_ID_AMD_17H_M10H_ROOT 0x15d0
++#define PCI_DEVICE_ID_AMD_17H_M30H_ROOT 0x1480
+ #define PCI_DEVICE_ID_AMD_17H_DF_F4 0x1464
+ #define PCI_DEVICE_ID_AMD_17H_M10H_DF_F4 0x15ec
++#define PCI_DEVICE_ID_AMD_17H_M30H_DF_F4 0x1494
+
+ /* Protect the PCI config register pairs used for SMN and DF indirect access. */
+ static DEFINE_MUTEX(smn_mutex);
+@@ -27,9 +29,11 @@ static u32 *flush_words;
+ static const struct pci_device_id amd_root_ids[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_ROOT) },
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M10H_ROOT) },
++ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M30H_ROOT) },
{}
};
--
++
#define PCI_DEVICE_ID_AMD_CNB17H_F4 0x1704
const struct pci_device_id amd_nb_misc_ids[] = {
-@@ -57,6 +56,7 @@ static const struct pci_device_id amd_nb
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_15H_NB_F4) },
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_15H_M30H_NB_F4) },
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_15H_M60H_NB_F4) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M30H_DF_F4) },
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) },
+@@ -43,6 +47,7 @@ const struct pci_device_id amd_nb_misc_ids[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F3) },
++ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M30H_DF_F3) },
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
+ {}
+ };
+@@ -56,6 +61,7 @@ static const struct pci_device_id amd_nb_link_ids[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F4) },
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F4) },
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F4) },
++ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M30H_DF_F4) },
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F4) },
+ {}
+ };
+diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
+index 78d5cd29778a..349276fbd269 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
-@@ -539,6 +539,7 @@
+@@ -547,6 +547,7 @@
#define PCI_DEVICE_ID_AMD_16H_M30H_NB_F4 0x1584
#define PCI_DEVICE_ID_AMD_17H_DF_F3 0x1463
#define PCI_DEVICE_ID_AMD_17H_M10H_DF_F3 0x15eb
@@ -56,3 +85,6 @@ Link: http://lkml.kernel.org/r/20181106200754.60722-4-brian.woods@amd.com
#define PCI_DEVICE_ID_AMD_CNB17H_F3 0x1703
#define PCI_DEVICE_ID_AMD_LANCE 0x2000
#define PCI_DEVICE_ID_AMD_LANCE_HOME 0x2001
+--
+2.21.0
+
diff --git a/patches.arch/x86-amd_nb-add-support-for-newer-pci-topologies.patch b/patches.arch/x86-amd_nb-add-support-for-newer-pci-topologies.patch
index 85d303214e..6b0535cdb5 100644
--- a/patches.arch/x86-amd_nb-add-support-for-newer-pci-topologies.patch
+++ b/patches.arch/x86-amd_nb-add-support-for-newer-pci-topologies.patch
@@ -1,9 +1,11 @@
+From 556e4c62baffa71e2045a298379db7e57dd47f3d Mon Sep 17 00:00:00 2001
From: "Woods, Brian" <Brian.Woods@amd.com>
Date: Tue, 6 Nov 2018 20:08:16 +0000
-Subject: x86/amd_nb: Add support for newer PCI topologies
-Git-commit: 556e4c62baffa71e2045a298379db7e57dd47f3d
-Patch-mainline: v5.0-rc1
+Subject: [PATCH] x86/amd_nb: Add support for newer PCI topologies
+
References: fate#326899
+Patch-mainline: v5.0-rc1
+Git-commit: 556e4c62baffa71e2045a298379db7e57dd47f3d
Add support for new processors which have multiple PCI root complexes
per data fabric/system management network interface. If there are (N)
@@ -37,48 +39,15 @@ CC: Pu Wen <puwen@hygon.cn>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: x86-ml <x86@kernel.org>
Link: http://lkml.kernel.org/r/20181106200754.60722-3-brian.woods@amd.com
-
-[ bp: Fix build without the hygon stuff from c6babb5806b77 ]
-
---
- arch/x86/kernel/amd_nb.c | 49 +++++++++++++++++++++++++++++++++++++++++------
- 1 file changed, 43 insertions(+), 6 deletions(-)
+ arch/x86/kernel/amd_nb.c | 44 ++++++++++++++++++++++++++++++++++------
+ 1 file changed, 38 insertions(+), 6 deletions(-)
+diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
+index 19d489ee2b1e..cc34266e3c62 100644
--- a/arch/x86/kernel/amd_nb.c
+++ b/arch/x86/kernel/amd_nb.c
-@@ -15,9 +15,11 @@
- #include <asm/amd_nb.h>
-
- #define PCI_DEVICE_ID_AMD_17H_ROOT 0x1450
-+#define PCI_DEVICE_ID_AMD_17H_M30H_ROOT 0x1480
- #define PCI_DEVICE_ID_AMD_17H_M10H_ROOT 0x15d0
- #define PCI_DEVICE_ID_AMD_17H_DF_F4 0x1464
- #define PCI_DEVICE_ID_AMD_17H_M10H_DF_F4 0x15ec
-+#define PCI_DEVICE_ID_AMD_17H_M30H_DF_F4 0x1494
-
- /* Protect the PCI config register pairs used for SMN and DF indirect access. */
- static DEFINE_MUTEX(smn_mutex);
-@@ -27,9 +29,11 @@ static u32 *flush_words;
- static const struct pci_device_id amd_root_ids[] = {
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_ROOT) },
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M10H_ROOT) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M30H_ROOT) },
- {}
- };
-
-+
- #define PCI_DEVICE_ID_AMD_CNB17H_F4 0x1704
-
- const struct pci_device_id amd_nb_misc_ids[] = {
-@@ -43,6 +47,7 @@ const struct pci_device_id amd_nb_misc_i
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F3) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M30H_DF_F3) },
- { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
- {}
- };
-@@ -213,7 +218,10 @@ int amd_cache_northbridges(void)
+@@ -213,7 +213,10 @@ int amd_cache_northbridges(void)
const struct pci_device_id *root_ids = amd_root_ids;
struct pci_dev *root, *misc, *link;
struct amd_northbridge *nb;
@@ -90,7 +59,7 @@ Link: http://lkml.kernel.org/r/20181106200754.60722-3-brian.woods@amd.com
if (amd_northbridges.num)
return 0;
-@@ -226,26 +234,55 @@ int amd_cache_northbridges(void)
+@@ -226,26 +229,55 @@ int amd_cache_northbridges(void)
misc = NULL;
while ((misc = next_northbridge(misc, misc_ids)) != NULL)
@@ -103,7 +72,7 @@ Link: http://lkml.kernel.org/r/20181106200754.60722-3-brian.woods@amd.com
- nb = kcalloc(i, sizeof(struct amd_northbridge), GFP_KERNEL);
+ root = NULL;
-+ while ((root = next_northbridge(root, amd_root_ids)) != NULL)
++ while ((root = next_northbridge(root, root_ids)) != NULL)
+ root_count++;
+
+ if (root_count) {
@@ -147,7 +116,10 @@ Link: http://lkml.kernel.org/r/20181106200754.60722-3-brian.woods@amd.com
+ * correct PCI roots.
+ */
+ for (j = 1; j < roots_per_misc; j++)
-+ root = next_northbridge(root, amd_root_ids);
++ root = next_northbridge(root, root_ids);
}
if (amd_gart_present())
+--
+2.21.0
+
diff --git a/patches.arch/x86-cpu-get-cache-info-and-setup-cache-cpumap-for-hygon-dhyana.patch b/patches.arch/x86-cpu-get-cache-info-and-setup-cache-cpumap-for-hygon-dhyana.patch
index 118af2e554..94dda05274 100644
--- a/patches.arch/x86-cpu-get-cache-info-and-setup-cache-cpumap-for-hygon-dhyana.patch
+++ b/patches.arch/x86-cpu-get-cache-info-and-setup-cache-cpumap-for-hygon-dhyana.patch
@@ -27,11 +27,40 @@ Cc: x86@kernel.org
Cc: thomas.lendacky@amd.com
Link: https://lkml.kernel.org/r/2a686b2ac0e2f5a1f2f5f101124d9dd44f949731.1537533369.git.puwen@hygon.cn
---
+ arch/x86/kernel/cpu/cpu.h | 2 ++
+ arch/x86/kernel/cpu/hygon.c | 3 +++
arch/x86/kernel/cpu/cacheinfo.c | 31 +++++++++++++++++++++++++++++--
- arch/x86/kernel/cpu/cpu.h | 2 ++
- arch/x86/kernel/cpu/hygon.c | 3 +++
3 files changed, 34 insertions(+), 2 deletions(-)
+--- a/arch/x86/kernel/cpu/cpu.h
++++ b/arch/x86/kernel/cpu/cpu.h
+@@ -50,5 +50,7 @@ extern void x86_spec_ctrl_setup_ap(void)
+ extern int detect_extended_topology_early(struct cpuinfo_x86 *c);
+ extern int detect_extended_topology(struct cpuinfo_x86 *c);
+ extern int detect_ht_early(struct cpuinfo_x86 *c);
++extern void init_hygon_cacheinfo(struct cpuinfo_x86 *c);
++void cacheinfo_hygon_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id);
+
+ #endif /* ARCH_X86_CPU_H */
+--- a/arch/x86/kernel/cpu/hygon.c
++++ b/arch/x86/kernel/cpu/hygon.c
+@@ -86,6 +86,7 @@ static void hygon_get_topology(struct cp
+ if (!err)
+ c->x86_coreid_bits = get_count_order(c->x86_max_cores);
+
++ cacheinfo_hygon_init_llc_id(c, cpu, node_id);
+ } else if (cpu_has(c, X86_FEATURE_NODEID_MSR)) {
+ u64 value;
+
+@@ -320,6 +321,8 @@ static void init_hygon(struct cpuinfo_x8
+ hygon_get_topology(c);
+ srat_detect_node(c);
+
++ init_hygon_cacheinfo(c);
++
+ if (cpu_has(c, X86_FEATURE_XMM2)) {
+ unsigned long long val;
+ int ret;
--- a/arch/x86/kernel/cpu/cacheinfo.c
+++ b/arch/x86/kernel/cpu/cacheinfo.c
@@ -395,6 +395,22 @@ static void amd_l3_disable_index(struct
@@ -78,7 +107,7 @@ Link: https://lkml.kernel.org/r/2a686b2ac0e2f5a1f2f5f101124d9dd44f949731.1537533
op = 0x8000001d;
else
op = 4;
-@@ -688,6 +709,11 @@ void init_amd_cacheinfo(struct cpuinfo_x
+@@ -649,6 +670,11 @@ void init_amd_cacheinfo(struct cpuinfo_x
}
}
@@ -90,7 +119,7 @@ Link: https://lkml.kernel.org/r/2a686b2ac0e2f5a1f2f5f101124d9dd44f949731.1537533
unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c)
{
/* Cache sizes */
-@@ -910,7 +936,8 @@ static void __cache_cpumap_setup(unsigne
+@@ -871,7 +897,8 @@ static void __cache_cpumap_setup(unsigne
int index_msb, i;
struct cpuinfo_x86 *c = &cpu_data(cpu);
@@ -100,32 +129,3 @@ Link: https://lkml.kernel.org/r/2a686b2ac0e2f5a1f2f5f101124d9dd44f949731.1537533
if (__cache_amd_cpumap_setup(cpu, index, base))
return;
}
---- a/arch/x86/kernel/cpu/cpu.h
-+++ b/arch/x86/kernel/cpu/cpu.h
-@@ -50,5 +50,7 @@ extern void x86_spec_ctrl_setup_ap(void)
- extern int detect_extended_topology_early(struct cpuinfo_x86 *c);
- extern int detect_extended_topology(struct cpuinfo_x86 *c);
- extern int detect_ht_early(struct cpuinfo_x86 *c);
-+extern void init_hygon_cacheinfo(struct cpuinfo_x86 *c);
-+void cacheinfo_hygon_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id);
-
- #endif /* ARCH_X86_CPU_H */
---- a/arch/x86/kernel/cpu/hygon.c
-+++ b/arch/x86/kernel/cpu/hygon.c
-@@ -86,6 +86,7 @@ static void hygon_get_topology(struct cp
- if (!err)
- c->x86_coreid_bits = get_count_order(c->x86_max_cores);
-
-+ cacheinfo_hygon_init_llc_id(c, cpu, node_id);
- } else if (cpu_has(c, X86_FEATURE_NODEID_MSR)) {
- u64 value;
-
-@@ -320,6 +321,8 @@ static void init_hygon(struct cpuinfo_x8
- hygon_get_topology(c);
- srat_detect_node(c);
-
-+ init_hygon_cacheinfo(c);
-+
- if (cpu_has(c, X86_FEATURE_XMM2)) {
- unsigned long long val;
- int ret;
diff --git a/patches.drivers/hwmon-k10temp-add-support-for-amd-family-17h-model-30h-cpus.patch b/patches.drivers/hwmon-k10temp-add-support-for-amd-family-17h-model-30h-cpus.patch
index 3e74213182..c2e582e845 100644
--- a/patches.drivers/hwmon-k10temp-add-support-for-amd-family-17h-model-30h-cpus.patch
+++ b/patches.drivers/hwmon-k10temp-add-support-for-amd-family-17h-model-30h-cpus.patch
@@ -1,9 +1,11 @@
+From 210ba1201ff950b3d05bfd8fa5d47540cea393c0 Mon Sep 17 00:00:00 2001
From: "Woods, Brian" <Brian.Woods@amd.com>
Date: Tue, 6 Nov 2018 20:08:21 +0000
-Subject: hwmon/k10temp: Add support for AMD family 17h, model 30h CPUs
-Git-commit: 210ba1201ff950b3d05bfd8fa5d47540cea393c0
-Patch-mainline: v5.0-rc1
+Subject: [PATCH] hwmon/k10temp: Add support for AMD family 17h, model 30h CPUs
+
References: fate#326899
+Patch-mainline: v5.0-rc1
+Git-commit: 210ba1201ff950b3d05bfd8fa5d47540cea393c0
Add support for AMD family 17h model 30h processors for k10temp. Model
30h is functionally the same as model 01h processors (as far as k10temp
@@ -25,12 +27,14 @@ CC: Thomas Gleixner <tglx@linutronix.de>
CC: x86-ml <x86@kernel.org>
Link: http://lkml.kernel.org/r/20181106200754.60722-5-brian.woods@amd.com
---
- drivers/hwmon/k10temp.c | 1 +
+ drivers/hwmon/k10temp.c | 1 +
1 file changed, 1 insertion(+)
+diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
+index bc6871c8dd4e..9790f1f5eb98 100644
--- a/drivers/hwmon/k10temp.c
+++ b/drivers/hwmon/k10temp.c
-@@ -360,6 +360,7 @@ static const struct pci_device_id k10tem
+@@ -360,6 +360,7 @@ static const struct pci_device_id k10temp_id_table[] = {
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F3) },
@@ -38,3 +42,6 @@ Link: http://lkml.kernel.org/r/20181106200754.60722-5-brian.woods@amd.com
{}
};
MODULE_DEVICE_TABLE(pci, k10temp_id_table);
+--
+2.21.0
+
diff --git a/patches.drivers/ibmvnic-Do-not-close-unopened-driver-during-reset.patch b/patches.drivers/ibmvnic-Do-not-close-unopened-driver-during-reset.patch
index c5a7b22902..9b12047150 100644
--- a/patches.drivers/ibmvnic-Do-not-close-unopened-driver-during-reset.patch
+++ b/patches.drivers/ibmvnic-Do-not-close-unopened-driver-during-reset.patch
@@ -4,8 +4,7 @@ Date: Fri, 7 Jun 2019 16:03:53 -0500
Subject: [PATCH] ibmvnic: Do not close unopened driver during reset
References: bsc#1137752
-Patch-mainline: queued
-Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+Patch-mainline: v5.2-rc6
Git-commit: 1f94608b0ce141be5286dde31270590bdf35b86a
Check driver state before halting it during a reset. If the driver is
diff --git a/patches.drivers/ibmvnic-Fix-unchecked-return-codes-of-memory-allocat.patch b/patches.drivers/ibmvnic-Fix-unchecked-return-codes-of-memory-allocat.patch
index f730273849..d4743b1b26 100644
--- a/patches.drivers/ibmvnic-Fix-unchecked-return-codes-of-memory-allocat.patch
+++ b/patches.drivers/ibmvnic-Fix-unchecked-return-codes-of-memory-allocat.patch
@@ -4,8 +4,7 @@ Date: Fri, 7 Jun 2019 16:03:55 -0500
Subject: [PATCH] ibmvnic: Fix unchecked return codes of memory allocations
References: bsc#1137752
-Patch-mainline: queued
-Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+Patch-mainline: v5.2-rc6
Git-commit: 7c940b1a5291e5069d561f5b8f0e51db6b7a259a
The return values for these memory allocations are unchecked,
diff --git a/patches.drivers/ibmvnic-Refresh-device-multicast-list-after-reset.patch b/patches.drivers/ibmvnic-Refresh-device-multicast-list-after-reset.patch
index 2b6d40e8ec..ee71f4f214 100644
--- a/patches.drivers/ibmvnic-Refresh-device-multicast-list-after-reset.patch
+++ b/patches.drivers/ibmvnic-Refresh-device-multicast-list-after-reset.patch
@@ -4,8 +4,7 @@ Date: Fri, 7 Jun 2019 16:03:54 -0500
Subject: [PATCH] ibmvnic: Refresh device multicast list after reset
References: bsc#1137752
-Patch-mainline: queued
-Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+Patch-mainline: v5.2-rc6
Git-commit: be32a24372cf162e825332da1a7ccef058d4f20b
It was observed that multicast packets were no longer received after
diff --git a/patches.drivers/net-mvpp2-Use-strscpy-to-handle-stat-strings.patch b/patches.drivers/net-mvpp2-Use-strscpy-to-handle-stat-strings.patch
new file mode 100644
index 0000000000..50f3b1ea42
--- /dev/null
+++ b/patches.drivers/net-mvpp2-Use-strscpy-to-handle-stat-strings.patch
@@ -0,0 +1,32 @@
+From: Maxime Chevallier <maxime.chevallier@bootlin.com>
+Date: Thu, 6 Jun 2019 10:42:56 +0200
+Subject: net: mvpp2: Use strscpy to handle stat strings
+Patch-mainline: v5.2-rc4
+Git-commit: d37acd5aa99c57505b64913e0e2624ec3daed8c5
+References: bsc#1098633
+
+Use a safe strscpy call to copy the ethtool stat strings into the
+relevant buffers, instead of a memcpy that will be accessing
+out-of-bound data.
+
+Fixes: 118d6298f6f0 ("net: mvpp2: add ethtool GOP statistics")
+Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
+---
+ drivers/net/ethernet/marvell/mvpp2.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/ethernet/marvell/mvpp2.c
++++ b/drivers/net/ethernet/marvell/mvpp2.c
+@@ -5231,8 +5231,8 @@ static void mvpp2_ethtool_get_strings(st
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_regs); i++)
+- memcpy(data + i * ETH_GSTRING_LEN,
+- &mvpp2_ethtool_regs[i].string, ETH_GSTRING_LEN);
++ strscpy(data + i * ETH_GSTRING_LEN,
++ mvpp2_ethtool_regs[i].string, ETH_GSTRING_LEN);
+ }
+ }
+
diff --git a/patches.drivers/net-mvpp2-prs-Fix-parser-range-for-VID-filtering.patch b/patches.drivers/net-mvpp2-prs-Fix-parser-range-for-VID-filtering.patch
new file mode 100644
index 0000000000..afc8b5fa6f
--- /dev/null
+++ b/patches.drivers/net-mvpp2-prs-Fix-parser-range-for-VID-filtering.patch
@@ -0,0 +1,75 @@
+From: Maxime Chevallier <maxime.chevallier@bootlin.com>
+Date: Tue, 11 Jun 2019 11:51:42 +0200
+Subject: net: mvpp2: prs: Fix parser range for VID filtering
+Patch-mainline: v5.2-rc6
+Git-commit: 46b0090a6636cf34c0e856f15dd03e15ba4cdda6
+References: bsc#1098633
+
+VID filtering is implemented in the Header Parser, with one range of 11
+vids being assigned for each no-loopback port.
+
+Make sure we use the per-port range when looking for existing entries in
+the Parser.
+
+Since we used a global range instead of a per-port one, this causes VIDs
+to be removed from the whitelist from all ports of the same PPv2
+instance.
+
+Fixes: 56beda3db602 ("net: mvpp2: Add hardware offloading for VLAN filtering")
+Suggested-by: Yuri Chipchev <yuric@marvell.com>
+Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
+---
+ drivers/net/ethernet/marvell/mvpp2.c | 17 ++++++++---------
+ 1 file changed, 8 insertions(+), 9 deletions(-)
+
+--- a/drivers/net/ethernet/marvell/mvpp2.c
++++ b/drivers/net/ethernet/marvell/mvpp2.c
+@@ -3483,8 +3483,7 @@ static int mvpp2_prs_ip6_init(struct mvp
+ }
+
+ /* Find tcam entry with matched pair <vid,port> */
+-static int mvpp2_prs_vid_range_find(struct mvpp2 *priv, int pmap, u16 vid,
+- u16 mask)
++static int mvpp2_prs_vid_range_find(struct mvpp2_port *port, u16 vid, u16 mask)
+ {
+ unsigned char byte[2], enable[2];
+ struct mvpp2_prs_entry pe;
+@@ -3492,13 +3491,13 @@ static int mvpp2_prs_vid_range_find(stru
+ int tid;
+
+ /* Go through the all entries with MVPP2_PRS_LU_VID */
+- for (tid = MVPP2_PE_VID_FILT_RANGE_START;
+- tid <= MVPP2_PE_VID_FILT_RANGE_END; tid++) {
+- if (!priv->prs_shadow[tid].valid ||
+- priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VID)
++ for (tid = MVPP2_PRS_VID_PORT_FIRST(port->id);
++ tid <= MVPP2_PRS_VID_PORT_LAST(port->id); tid++) {
++ if (!port->priv->prs_shadow[tid].valid ||
++ port->priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VID)
+ continue;
+
+- mvpp2_prs_init_from_hw(priv, &pe, tid);
++ mvpp2_prs_init_from_hw(port->priv, &pe, tid);
+
+ mvpp2_prs_tcam_data_byte_get(&pe, 2, &byte[0], &enable[0]);
+ mvpp2_prs_tcam_data_byte_get(&pe, 3, &byte[1], &enable[1]);
+@@ -3528,7 +3527,7 @@ static int mvpp2_prs_vid_entry_add(struc
+ memset(&pe, 0, sizeof(pe));
+
+ /* Scan TCAM and see if entry with this <vid,port> already exist */
+- tid = mvpp2_prs_vid_range_find(priv, (1 << port->id), vid, mask);
++ tid = mvpp2_prs_vid_range_find(port, vid, mask);
+
+ reg_val = mvpp2_read(priv, MVPP2_MH_REG(port->id));
+ if (reg_val & MVPP2_DSA_EXTENDED)
+@@ -3586,7 +3585,7 @@ static void mvpp2_prs_vid_entry_remove(s
+ int tid;
+
+ /* Scan TCAM and see if entry with this <vid,port> already exist */
+- tid = mvpp2_prs_vid_range_find(priv, (1 << port->id), vid, 0xfff);
++ tid = mvpp2_prs_vid_range_find(port, vid, 0xfff);
+
+ /* No such entry */
+ if (tid < 0)
diff --git a/patches.drivers/net-mvpp2-prs-Use-the-correct-helpers-when-removing-.patch b/patches.drivers/net-mvpp2-prs-Use-the-correct-helpers-when-removing-.patch
new file mode 100644
index 0000000000..d022076788
--- /dev/null
+++ b/patches.drivers/net-mvpp2-prs-Use-the-correct-helpers-when-removing-.patch
@@ -0,0 +1,38 @@
+From: Maxime Chevallier <maxime.chevallier@bootlin.com>
+Date: Tue, 11 Jun 2019 11:51:43 +0200
+Subject: net: mvpp2: prs: Use the correct helpers when removing all VID
+ filters
+Patch-mainline: v5.2-rc6
+Git-commit: 6b7a3430c163455cf8a514d636bda52b04654972
+References: bsc#1098633
+
+When removing all VID filters, the mvpp2_prs_vid_entry_remove would be
+called with the TCAM id incorrectly used as a VID, causing the wrong
+TCAM entries to be invalidated.
+
+Fix this by directly invalidating entries in the VID range.
+
+Fixes: 56beda3db602 ("net: mvpp2: Add hardware offloading for VLAN filtering")
+Suggested-by: Yuri Chipchev <yuric@marvell.com>
+Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
+---
+ drivers/net/ethernet/marvell/mvpp2.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/ethernet/marvell/mvpp2.c
++++ b/drivers/net/ethernet/marvell/mvpp2.c
+@@ -3603,8 +3603,10 @@ static void mvpp2_prs_vid_remove_all(str
+
+ for (tid = MVPP2_PRS_VID_PORT_FIRST(port->id);
+ tid <= MVPP2_PRS_VID_PORT_LAST(port->id); tid++) {
+- if (priv->prs_shadow[tid].valid)
+- mvpp2_prs_vid_entry_remove(port, tid);
++ if (priv->prs_shadow[tid].valid) {
++ mvpp2_prs_hw_inv(priv, tid);
++ priv->prs_shadow[tid].valid = false;
++ }
+ }
+ }
+
diff --git a/patches.fixes/Bluetooth-Fix-faulty-expression-for-minimum-encrypti.patch b/patches.fixes/Bluetooth-Fix-faulty-expression-for-minimum-encrypti.patch
new file mode 100644
index 0000000000..27ff3b600c
--- /dev/null
+++ b/patches.fixes/Bluetooth-Fix-faulty-expression-for-minimum-encrypti.patch
@@ -0,0 +1,37 @@
+From: Matias Karhumaa <matias.karhumaa@gmail.com>
+Date: Tue, 2 Jul 2019 16:35:09 +0200
+Subject: [PATCH] Bluetooth: Fix faulty expression for minimum encryption key
+ size check
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
+Git-commit: eca94432934fe5f141d084f2e36ee2c0e614cc04
+References: bsc#1140328
+
+Fix minimum encryption key size check so that HCI_MIN_ENC_KEY_SIZE is
+also allowed as stated in the comment.
+
+This bug caused connection problems with devices having maximum
+encryption key size of 7 octets (56-bit).
+
+Fixes: 693cd8ce3f88 ("Bluetooth: Fix regression with minimum encryption key size alignment")
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=203997
+Signed-off-by: Matias Karhumaa <matias.karhumaa@gmail.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Acked-by: Cho, Yu-Chen <acho@suse.com>
+---
+ net/bluetooth/l2cap_core.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/bluetooth/l2cap_core.c
++++ b/net/bluetooth/l2cap_core.c
+@@ -1352,7 +1352,7 @@ static bool l2cap_check_enc_key_size(str
+ * actually encrypted before enforcing a key size.
+ */
+ return (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags) ||
+- hcon->enc_key_size > HCI_MIN_ENC_KEY_SIZE);
++ hcon->enc_key_size >= HCI_MIN_ENC_KEY_SIZE);
+ }
+
+ static void l2cap_do_start(struct l2cap_chan *chan)
diff --git a/patches.fixes/ceph-flush-dirty-inodes-before-proceeding-with-remount.patch b/patches.fixes/ceph-flush-dirty-inodes-before-proceeding-with-remount.patch
new file mode 100644
index 0000000000..62842306cf
--- /dev/null
+++ b/patches.fixes/ceph-flush-dirty-inodes-before-proceeding-with-remount.patch
@@ -0,0 +1,46 @@
+From: Jeff Layton <jlayton@kernel.org>
+Date: Tue, 7 May 2019 09:20:54 -0400
+Subject: ceph: flush dirty inodes before proceeding with remount
+Git-commit: 00abf69dd24f4444d185982379c5cc3bb7b6d1fc
+Patch-mainline: v5.2-rc1
+References: bsc#1140405
+
+xfstest generic/452 was triggering a "Busy inodes after umount" warning.
+ceph was allowing the mount to go read-only without first flushing out
+dirty inodes in the cache. Ensure we sync out the filesystem before
+allowing a remount to proceed.
+
+Cc: stable@vger.kernel.org
+Link: http://tracker.ceph.com/issues/39571
+Signed-off-by: Jeff Layton <jlayton@kernel.org>
+Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
+Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
+Acked-by: Luis Henriques <lhenriques@suse.com>
+---
+ fs/ceph/super.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/fs/ceph/super.c
++++ b/fs/ceph/super.c
+@@ -810,6 +810,12 @@ static void ceph_umount_begin(struct sup
+ return;
+ }
+
++static int ceph_remount(struct super_block *sb, int *flags, char *data)
++{
++ sync_filesystem(sb);
++ return 0;
++}
++
+ static const struct super_operations ceph_super_ops = {
+ .alloc_inode = ceph_alloc_inode,
+ .destroy_inode = ceph_destroy_inode,
+@@ -817,6 +823,7 @@ static const struct super_operations cep
+ .drop_inode = ceph_drop_inode,
+ .sync_fs = ceph_sync_fs,
+ .put_super = ceph_put_super,
++ .remount_fs = ceph_remount,
+ .show_options = ceph_show_options,
+ .statfs = ceph_statfs,
+ .umount_begin = ceph_umount_begin,
+
diff --git a/patches.fixes/crypto-user-prevent-operating-on-larval-algorithms.patch b/patches.fixes/crypto-user-prevent-operating-on-larval-algorithms.patch
index a629a4cfd8..a72f52f778 100644
--- a/patches.fixes/crypto-user-prevent-operating-on-larval-algorithms.patch
+++ b/patches.fixes/crypto-user-prevent-operating-on-larval-algorithms.patch
@@ -4,8 +4,7 @@ Date: Tue, 2 Jul 2019 14:17:00 -0700
Subject: [PATCH] crypto: user - prevent operating on larval algorithms
References: bsc#1133401
-Patch-mainline: queued
-Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
+Patch-mainline: v5.2 or v5.2-rc8 (next release)
Git-commit: 21d4120ec6f5b5992b01b96ac484701163917b63
Michal Suchanek reported [1] that running the pcrypt_aead01 test from
diff --git a/patches.fixes/dax-check-for-queue_flag_dax-in-bdev_dax_supported.patch b/patches.fixes/dax-check-for-queue_flag_dax-in-bdev_dax_supported.patch
index da48aa6139..b1774e6d65 100644
--- a/patches.fixes/dax-check-for-queue_flag_dax-in-bdev_dax_supported.patch
+++ b/patches.fixes/dax-check-for-queue_flag_dax-in-bdev_dax_supported.patch
@@ -42,7 +42,7 @@ Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+ if (!q || !blk_queue_dax(q)) {
+ pr_debug("%s: error: request queue doesn't support dax\n",
+ bdevname(bdev, buf));
-+ return -EOPNOTSUPP;
++ return false;
+ }
err = bdev_dax_pgoff(bdev, 0, PAGE_SIZE, &pgoff);
diff --git a/patches.fixes/device-core-Consolidate-locking-and-unlocking-of-par.patch b/patches.fixes/device-core-Consolidate-locking-and-unlocking-of-par.patch
new file mode 100644
index 0000000000..00bb114970
--- /dev/null
+++ b/patches.fixes/device-core-Consolidate-locking-and-unlocking-of-par.patch
@@ -0,0 +1,237 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Tue, 22 Jan 2019 10:39:16 -0800
+Subject: device core: Consolidate locking and unlocking of parent and device
+Patch-Mainline: 5.1-rc1
+References: bsc#1106383
+Git-commit: ed88747c6c4a2fc2f961a36d4c50cb0868c30229
+
+Try to consolidate all of the locking and unlocking of both the parent and
+device when attaching or removing a driver from a given device.
+
+To do that I first consolidated the lock pattern into two functions
+__device_driver_lock and __device_driver_unlock. After doing that I then
+created functions specific to attaching and detaching the driver while
+acquiring these locks. By doing this I was able to reduce the number of
+spots where we touch need_parent_lock from 12 down to 4.
+
+This patch should produce no functional changes, it is meant to be a code
+clean-up/consolidation only.
+
+Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Reviewed-by: Dan Williams <dan.j.williams@intel.com>
+Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Acked-by: Hannes Reinecke <hare@suse.com>
+---
+ drivers/base/base.h | 2 ++
+ drivers/base/bus.c | 23 +++----------
+ drivers/base/dd.c | 95 ++++++++++++++++++++++++++++++++++++++++++-----------
+ 3 files changed, 81 insertions(+), 39 deletions(-)
+
+diff --git a/drivers/base/base.h b/drivers/base/base.h
+index e3e9c5dca982..d13cb25d94ea 100644
+--- a/drivers/base/base.h
++++ b/drivers/base/base.h
+@@ -134,6 +134,8 @@ extern int device_add_groups(struct device *dev,
+ const struct attribute_group **groups);
+ extern void device_remove_groups(struct device *dev,
+ const struct attribute_group **groups);
++int device_driver_attach(struct device_driver *drv, struct device *dev);
++void device_driver_detach(struct device *dev);
+
+ extern char *make_class_name(const char *name, struct kobject *kobj);
+
+diff --git a/drivers/base/bus.c b/drivers/base/bus.c
+index a7ae9a0e8a78..d1770c96f944 100644
+--- a/drivers/base/bus.c
++++ b/drivers/base/bus.c
+@@ -189,11 +189,7 @@ static ssize_t unbind_store(struct device_driver *drv, const char *buf,
+
+ dev = bus_find_device_by_name(bus, NULL, buf);
+ if (dev && dev->driver == drv) {
+- if (dev->parent) /* Needed for USB */
+- device_lock(dev->parent);
+- device_release_driver(dev);
+- if (dev->parent)
+- device_unlock(dev->parent);
++ device_driver_detach(dev);
+ err = count;
+ }
+ put_device(dev);
+@@ -216,13 +212,7 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf,
+
+ dev = bus_find_device_by_name(bus, NULL, buf);
+ if (dev && dev->driver == NULL && driver_match_device(drv, dev)) {
+- if (dev->parent) /* Needed for USB */
+- device_lock(dev->parent);
+- device_lock(dev);
+- err = driver_probe_device(drv, dev);
+- device_unlock(dev);
+- if (dev->parent)
+- device_unlock(dev->parent);
++ err = device_driver_attach(drv, dev);
+
+ if (err > 0) {
+ /* success */
+@@ -812,13 +802,8 @@ EXPORT_SYMBOL_GPL(bus_rescan_devices);
+ */
+ int device_reprobe(struct device *dev)
+ {
+- if (dev->driver) {
+- if (dev->parent) /* Needed for USB */
+- device_lock(dev->parent);
+- device_release_driver(dev);
+- if (dev->parent)
+- device_unlock(dev->parent);
+- }
++ if (dev->driver)
++ device_driver_detach(dev);
+ return bus_rescan_devices_helper(dev, NULL);
+ }
+ EXPORT_SYMBOL_GPL(device_reprobe);
+diff --git a/drivers/base/dd.c b/drivers/base/dd.c
+index 7c66f1b3e3fc..56ed47aac0ea 100644
+--- a/drivers/base/dd.c
++++ b/drivers/base/dd.c
+@@ -729,6 +729,64 @@ void device_initial_probe(struct device *dev)
+ __device_attach(dev, true);
+ }
+
++/*
++ * __device_driver_lock - acquire locks needed to manipulate dev->drv
++ * @dev: Device we will update driver info for
++ * @parent: Parent device. Needed if the bus requires parent lock
++ *
++ * This function will take the required locks for manipulating dev->drv.
++ * Normally this will just be the @dev lock, but when called for a USB
++ * interface, @parent lock will be held as well.
++ */
++static void __device_driver_lock(struct device *dev, struct device *parent)
++{
++ if (parent)
++ device_lock(parent);
++ device_lock(dev);
++}
++
++/*
++ * __device_driver_unlock - release locks needed to manipulate dev->drv
++ * @dev: Device we will update driver info for
++ * @parent: Parent device. Needed if the bus requires parent lock
++ *
++ * This function will release the required locks for manipulating dev->drv.
++ * Normally this will just be the the @dev lock, but when called for a
++ * USB interface, @parent lock will be released as well.
++ */
++static void __device_driver_unlock(struct device *dev, struct device *parent)
++{
++ device_unlock(dev);
++ if (parent)
++ device_unlock(parent);
++}
++
++/**
++ * device_driver_attach - attach a specific driver to a specific device
++ * @drv: Driver to attach
++ * @dev: Device to attach it to
++ *
++ * Manually attach driver to a device. Will acquire both @dev lock and
++ * @dev->parent lock if needed.
++ */
++int device_driver_attach(struct device_driver *drv, struct device *dev)
++{
++ int ret = 0;
++
++ __device_driver_lock(dev, dev->parent);
++
++ /*
++ * If device has been removed or someone has already successfully
++ * bound a driver before us just skip the driver probe call.
++ */
++ if (!dev->p->dead && !dev->driver)
++ ret = driver_probe_device(drv, dev);
++
++ __device_driver_unlock(dev, dev->parent);
++
++ return ret;
++}
++
+ static int __driver_attach(struct device *dev, void *data)
+ {
+ struct device_driver *drv = data;
+@@ -756,14 +814,7 @@ static int __driver_attach(struct device *dev, void *data)
+ return ret;
+ } /* ret > 0 means positive match */
+
+- if (dev->parent) /* Needed for USB */
+- device_lock(dev->parent);
+- device_lock(dev);
+- if (!dev->p->dead && !dev->driver)
+- driver_probe_device(drv, dev);
+- device_unlock(dev);
+- if (dev->parent)
+- device_unlock(dev->parent);
++ device_driver_attach(drv, dev);
+
+ return 0;
+ }
+@@ -794,15 +845,11 @@ static void __device_release_driver(struct device *dev, struct device *parent)
+ drv = dev->driver;
+ if (drv) {
+ while (device_links_busy(dev)) {
+- device_unlock(dev);
+- if (parent)
+- device_unlock(parent);
++ __device_driver_unlock(dev, parent);
+
+ device_links_unbind_consumers(dev);
+- if (parent)
+- device_lock(parent);
+
+- device_lock(dev);
++ __device_driver_lock(dev, parent);
+ /*
+ * A concurrent invocation of the same function might
+ * have released the driver successfully while this one
+@@ -852,16 +899,12 @@ void device_release_driver_internal(struct device *dev,
+ struct device_driver *drv,
+ struct device *parent)
+ {
+- if (parent)
+- device_lock(parent);
++ __device_driver_lock(dev, parent);
+
+- device_lock(dev);
+ if (!drv || drv == dev->driver)
+ __device_release_driver(dev, parent);
+
+- device_unlock(dev);
+- if (parent)
+- device_unlock(parent);
++ __device_driver_unlock(dev, parent);
+ }
+
+ /**
+@@ -886,6 +929,18 @@ void device_release_driver(struct device *dev)
+ }
+ EXPORT_SYMBOL_GPL(device_release_driver);
+
++/**
++ * device_driver_detach - detach driver from a specific device
++ * @dev: device to detach driver from
++ *
++ * Detach driver from device. Will acquire both @dev lock and @dev->parent
++ * lock if needed.
++ */
++void device_driver_detach(struct device *dev)
++{
++ device_release_driver_internal(dev, NULL, dev->parent);
++}
++
+ /**
+ * driver_detach - detach driver from all devices it controls.
+ * @drv: driver.
+--
+2.16.4
+
diff --git a/patches.fixes/driver-core-Establish-order-of-operations-for-device.patch b/patches.fixes/driver-core-Establish-order-of-operations-for-device.patch
new file mode 100644
index 0000000000..c100e1d895
--- /dev/null
+++ b/patches.fixes/driver-core-Establish-order-of-operations-for-device.patch
@@ -0,0 +1,138 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Tue, 22 Jan 2019 10:39:10 -0800
+Subject: driver core: Establish order of operations for device_add
+ and device_del via bitflag
+Patch-Mainline: 5.1-rc1
+References: bsc#1106383
+Git-commit: 3451a495ef244a88ed6317a035299d835554d579
+
+Add an additional bit flag to the device_private struct named "dead".
+
+This additional flag provides a guarantee that when a device_del is
+executed on a given interface an async worker will not attempt to attach
+the driver following the earlier device_del call. Previously this
+guarantee was not present and could result in the device_del call
+attempting to remove a driver from an interface only to have the async
+worker attempt to probe the driver later when it finally completes the
+asynchronous probe call.
+
+One additional change added was that I pulled the check for dev->driver
+out of the __device_attach_driver call and instead placed it in the
+__device_attach_async_helper call. This was motivated by the fact that the
+only other caller of this, __device_attach, had already taken the
+device_lock() and checked for dev->driver. Instead of testing for this
+twice in this path it makes more sense to just consolidate the dev->dead
+and dev->driver checks together into one set of checks.
+
+Reviewed-by: Dan Williams <dan.j.williams@intel.com>
+Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Acked-by: Hannes Reinecke <hare@suse.com>
+---
+ drivers/base/base.h | 4 ++++
+ drivers/base/core.c | 11 +++++++++++
+ drivers/base/dd.c | 22 +++++++++++-----------
+ 3 files changed, 26 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/base/base.h b/drivers/base/base.h
+index e19b1008e5fb..e3e9c5dca982 100644
+--- a/drivers/base/base.h
++++ b/drivers/base/base.h
+@@ -65,6 +65,9 @@ struct driver_private {
+ * probed first.
+ * @device - pointer back to the struct device that this structure is
+ * associated with.
++ * @dead - This device is currently either in the process of or has been
++ * removed from the system. Any asynchronous events scheduled for this
++ * device should exit without taking any action.
+ *
+ * Nothing outside of the driver core should ever touch these fields.
+ */
+@@ -75,6 +78,7 @@ struct device_private {
+ struct klist_node knode_bus;
+ struct list_head deferred_probe;
+ struct device *device;
++ u8 dead:1;
+ };
+ #define to_device_private_parent(obj) \
+ container_of(obj, struct device_private, knode_parent)
+diff --git a/drivers/base/core.c b/drivers/base/core.c
+index d08f4126a128..037c8cb06286 100644
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -1839,6 +1839,17 @@ void device_del(struct device *dev)
+ struct kobject *glue_dir = NULL;
+ struct class_interface *class_intf;
+
++ /*
++ * Hold the device lock and set the "dead" flag to guarantee that
++ * the update behavior is consistent with the other bitfields near
++ * it and that we cannot have an asynchronous probe routine trying
++ * to run while we are tearing out the bus/class/sysfs from
++ * underneath the device.
++ */
++ device_lock(dev);
++ dev->p->dead = true;
++ device_unlock(dev);
++
+ /* Notify clients of device removal. This call must come
+ * before dpm_sysfs_remove().
+ */
+diff --git a/drivers/base/dd.c b/drivers/base/dd.c
+index e48b7a90b887..7c66f1b3e3fc 100644
+--- a/drivers/base/dd.c
++++ b/drivers/base/dd.c
+@@ -593,15 +593,6 @@ static int __device_attach_driver(struct device_driver *drv, void *_data)
+ bool async_allowed;
+ int ret;
+
+- /*
+- * Check if device has already been claimed. This may
+- * happen with driver loading, device discovery/registration,
+- * and deferred probe processing happens all at once with
+- * multiple threads.
+- */
+- if (dev->driver)
+- return -EBUSY;
+-
+ ret = driver_match_device(drv, dev);
+ if (ret == 0) {
+ /* no match */
+@@ -636,6 +627,15 @@ static void __device_attach_async_helper(void *_dev, async_cookie_t cookie)
+
+ device_lock(dev);
+
++ /*
++ * Check if device has already been removed or claimed. This may
++ * happen with driver loading, device discovery/registration,
++ * and deferred probe processing happens all at once with
++ * multiple threads.
++ */
++ if (dev->p->dead || dev->driver)
++ goto out_unlock;
++
+ if (dev->parent)
+ pm_runtime_get_sync(dev->parent);
+
+@@ -646,7 +646,7 @@ static void __device_attach_async_helper(void *_dev, async_cookie_t cookie)
+
+ if (dev->parent)
+ pm_runtime_put(dev->parent);
+-
++out_unlock:
+ device_unlock(dev);
+
+ put_device(dev);
+@@ -759,7 +759,7 @@ static int __driver_attach(struct device *dev, void *data)
+ if (dev->parent) /* Needed for USB */
+ device_lock(dev->parent);
+ device_lock(dev);
+- if (!dev->driver)
++ if (!dev->p->dead && !dev->driver)
+ driver_probe_device(drv, dev);
+ device_unlock(dev);
+ if (dev->parent)
+--
+2.16.4
+
diff --git a/patches.fixes/driver-core-Probe-devices-asynchronously-instead-of-.patch b/patches.fixes/driver-core-Probe-devices-asynchronously-instead-of-.patch
new file mode 100644
index 0000000000..be292c5e12
--- /dev/null
+++ b/patches.fixes/driver-core-Probe-devices-asynchronously-instead-of-.patch
@@ -0,0 +1,164 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Tue, 22 Jan 2019 10:39:21 -0800
+Subject: driver core: Probe devices asynchronously instead of the driver
+Patch-Mainline: 5.1-rc1
+References: bsc#1106383
+Git-commit: ef0ff68351be4fd83bec2d797f0efdc0174a55a4
+
+Probe devices asynchronously instead of the driver. This results in us
+seeing the same behavior if the device is registered before the driver or
+after. This way we can avoid serializing the initialization should the
+driver not be loaded until after the devices have already been added.
+
+The motivation behind this is that if we have a set of devices that
+take a significant amount of time to load we can greatly reduce the time to
+load by processing them in parallel instead of one at a time. In addition,
+each device can exist on a different node so placing a single thread on one
+CPU to initialize all of the devices for a given driver can result in poor
+performance on a system with multiple nodes.
+
+This approach can reduce the time needed to scan SCSI LUNs significantly.
+The only way to realize that speedup is by enabling more concurrency which
+is what is achieved with this patch.
+
+To achieve this it was necessary to add a new member "async_driver" to the
+device_private structure to store the driver pointer while we wait on the
+deferred probe call.
+
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Reviewed-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Acked-by: Hannes Reinecke <hare@suse.com>
+---
+ drivers/base/base.h | 2 ++
+ drivers/base/bus.c | 23 +++--------------------
+ drivers/base/dd.c | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 48 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/base/base.h b/drivers/base/base.h
+index d13cb25d94ea..bef4256f8bca 100644
+--- a/drivers/base/base.h
++++ b/drivers/base/base.h
+@@ -63,6 +63,7 @@ struct driver_private {
+ * binding of drivers which were unable to get all the resources needed by
+ * the device; typically because it depends on another driver getting
+ * probed first.
++ * @async_driver - pointer to device driver awaiting probe via async_probe
+ * @device - pointer back to the struct device that this structure is
+ * associated with.
+ * @dead - This device is currently either in the process of or has been
+@@ -77,6 +78,7 @@ struct device_private {
+ struct klist_node knode_driver;
+ struct klist_node knode_bus;
+ struct list_head deferred_probe;
++ struct device_driver *async_driver;
+ struct device *device;
+ u8 dead:1;
+ };
+diff --git a/drivers/base/bus.c b/drivers/base/bus.c
+index d1770c96f944..19b704edda33 100644
+--- a/drivers/base/bus.c
++++ b/drivers/base/bus.c
+@@ -649,17 +649,6 @@ static ssize_t uevent_store(struct device_driver *drv, const char *buf,
+ }
+ static DRIVER_ATTR_WO(uevent);
+
+-static void driver_attach_async(void *_drv, async_cookie_t cookie)
+-{
+- struct device_driver *drv = _drv;
+- int ret;
+-
+- ret = driver_attach(drv);
+-
+- pr_debug("bus: '%s': driver %s async attach completed: %d\n",
+- drv->bus->name, drv->name, ret);
+-}
+-
+ /**
+ * bus_add_driver - Add a driver to the bus.
+ * @drv: driver.
+@@ -692,15 +681,9 @@ int bus_add_driver(struct device_driver *drv)
+
+ klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
+ if (drv->bus->p->drivers_autoprobe) {
+- if (driver_allows_async_probing(drv)) {
+- pr_debug("bus: '%s': probing driver %s asynchronously\n",
+- drv->bus->name, drv->name);
+- async_schedule(driver_attach_async, drv);
+- } else {
+- error = driver_attach(drv);
+- if (error)
+- goto out_unregister;
+- }
++ error = driver_attach(drv);
++ if (error)
++ goto out_unregister;
+ }
+ module_add_driver(drv->owner, drv);
+
+diff --git a/drivers/base/dd.c b/drivers/base/dd.c
+index 56ed47aac0ea..61cc30daa164 100644
+--- a/drivers/base/dd.c
++++ b/drivers/base/dd.c
+@@ -787,6 +787,30 @@ int device_driver_attach(struct device_driver *drv, struct device *dev)
+ return ret;
+ }
+
++static void __driver_attach_async_helper(void *_dev, async_cookie_t cookie)
++{
++ struct device *dev = _dev;
++ struct device_driver *drv;
++ int ret = 0;
++
++ __device_driver_lock(dev, dev->parent);
++
++ drv = dev->p->async_driver;
++
++ /*
++ * If device has been removed or someone has already successfully
++ * bound a driver before us just skip the driver probe call.
++ */
++ if (!dev->p->dead && !dev->driver)
++ ret = driver_probe_device(drv, dev);
++
++ __device_driver_unlock(dev, dev->parent);
++
++ dev_dbg(dev, "driver %s async attach completed: %d\n", drv->name, ret);
++
++ put_device(dev);
++}
++
+ static int __driver_attach(struct device *dev, void *data)
+ {
+ struct device_driver *drv = data;
+@@ -814,6 +838,25 @@ static int __driver_attach(struct device *dev, void *data)
+ return ret;
+ } /* ret > 0 means positive match */
+
++ if (driver_allows_async_probing(drv)) {
++ /*
++ * Instead of probing the device synchronously we will
++ * probe it asynchronously to allow for more parallelism.
++ *
++ * We only take the device lock here in order to guarantee
++ * that the dev->driver and async_driver fields are protected
++ */
++ dev_dbg(dev, "probing driver %s asynchronously\n", drv->name);
++ device_lock(dev);
++ if (!dev->driver) {
++ get_device(dev);
++ dev->p->async_driver = drv;
++ async_schedule(__driver_attach_async_helper, dev);
++ }
++ device_unlock(dev);
++ return 0;
++ }
++
+ device_driver_attach(drv, dev);
+
+ return 0;
+--
+2.16.4
+
diff --git a/patches.fixes/drivers-base-introduce-kill_device.patch b/patches.fixes/drivers-base-introduce-kill_device.patch
new file mode 100644
index 0000000000..f63e79c569
--- /dev/null
+++ b/patches.fixes/drivers-base-introduce-kill_device.patch
@@ -0,0 +1,94 @@
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Mon, 10 Jun 2019 21:03:44 -0700
+Subject: drivers/base: Introduce kill_device()
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm.git
+Git-commit: 2fcf7c0b67e03233b118ca29c551c1e66da6c80b
+References: bsc#1139865
+
+The libnvdimm subsystem arranges for devices to be destroyed as a result
+of a sysfs operation. Since device_unregister() cannot be called from
+an actively running sysfs attribute of the same device libnvdimm
+arranges for device_unregister() to be performed in an out-of-line async
+context.
+
+The driver core maintains a 'dead' state for coordinating its own racing
+async registration / de-registration requests. Rather than add local
+'dead' state tracking infrastructure to libnvdimm device objects, export
+the existing state tracking via a new kill_device() helper.
+
+The kill_device() helper simply marks the device as dead, i.e. that it
+is on its way to device_del(), or returns that the device was already
+dead. This can be used in advance of calling device_unregister() for
+subsystems like libnvdimm that might need to handle multiple user
+threads racing to delete a device.
+
+This refactoring does not change any behavior, but it is a pre-requisite
+for follow-on fixes and therefore marked for -stable.
+
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: "Rafael J. Wysocki" <rafael@kernel.org>
+Fixes: 4d88a97aa9e8 ("libnvdimm, nvdimm: dimm driver and base libnvdimm device-driver...")
+Cc: <stable@vger.kernel.org>
+Tested-by: Jane Chu <jane.chu@oracle.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/base/core.c | 27 +++++++++++++++++++--------
+ include/linux/device.h | 1 +
+ 2 files changed, 20 insertions(+), 8 deletions(-)
+
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -1828,6 +1828,24 @@ void put_device(struct device *dev)
+ }
+ EXPORT_SYMBOL_GPL(put_device);
+
++bool kill_device(struct device *dev)
++{
++ /*
++ * Require the device lock and set the "dead" flag to guarantee that
++ * the update behavior is consistent with the other bitfields near
++ * it and that we cannot have an asynchronous probe routine trying
++ * to run while we are tearing out the bus/class/sysfs from
++ * underneath the device.
++ */
++ lockdep_assert_held(&dev->mutex);
++
++ if (dev->p->dead)
++ return false;
++ dev->p->dead = true;
++ return true;
++}
++EXPORT_SYMBOL_GPL(kill_device);
++
+ /**
+ * device_del - delete device from system.
+ * @dev: device.
+@@ -1847,15 +1865,8 @@ void device_del(struct device *dev)
+ struct kobject *glue_dir = NULL;
+ struct class_interface *class_intf;
+
+- /*
+- * Hold the device lock and set the "dead" flag to guarantee that
+- * the update behavior is consistent with the other bitfields near
+- * it and that we cannot have an asynchronous probe routine trying
+- * to run while we are tearing out the bus/class/sysfs from
+- * underneath the device.
+- */
+ device_lock(dev);
+- dev->p->dead = true;
++ kill_device(dev);
+ device_unlock(dev);
+
+ /* Notify clients of device removal. This call must come
+--- a/include/linux/device.h
++++ b/include/linux/device.h
+@@ -1219,6 +1219,7 @@ extern int (*platform_notify_remove)(str
+ */
+ extern struct device *get_device(struct device *dev);
+ extern void put_device(struct device *dev);
++extern bool kill_device(struct device *dev);
+
+ #ifdef CONFIG_DEVTMPFS
+ extern int devtmpfs_create_node(struct device *dev);
diff --git a/patches.fixes/libnvdimm-bus-prevent-duplicate-device_unregister-calls.patch b/patches.fixes/libnvdimm-bus-prevent-duplicate-device_unregister-calls.patch
new file mode 100644
index 0000000000..f2ad11bc28
--- /dev/null
+++ b/patches.fixes/libnvdimm-bus-prevent-duplicate-device_unregister-calls.patch
@@ -0,0 +1,95 @@
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Mon, 10 Jun 2019 21:10:58 -0700
+Subject: libnvdimm/bus: Prevent duplicate device_unregister() calls
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm.git
+Git-commit: 4bc5021f8006cfb021e878cb8fb1b0e15a01ff28
+References: bsc#1139865
+
+A multithreaded namespace creation/destruction stress test currently
+fails with signatures like the following:
+
+ sysfs group 'power' not found for kobject 'dax1.1'
+ RIP: 0010:sysfs_remove_group+0x76/0x80
+ Call Trace:
+ device_del+0x73/0x370
+ device_unregister+0x16/0x50
+ nd_async_device_unregister+0x1e/0x30 [libnvdimm]
+ async_run_entry_fn+0x39/0x160
+ process_one_work+0x23c/0x5e0
+ worker_thread+0x3c/0x390
+
+ BUG: kernel NULL pointer dereference, address: 0000000000000020
+ RIP: 0010:klist_put+0x1b/0x6c
+ Call Trace:
+ klist_del+0xe/0x10
+ device_del+0x8a/0x2c9
+ ? __switch_to_asm+0x34/0x70
+ ? __switch_to_asm+0x40/0x70
+ device_unregister+0x44/0x4f
+ nd_async_device_unregister+0x22/0x2d [libnvdimm]
+ async_run_entry_fn+0x47/0x15a
+ process_one_work+0x1a2/0x2eb
+ worker_thread+0x1b8/0x26e
+
+Use the kill_device() helper to atomically resolve the race of multiple
+threads issuing kill, device_unregister(), requests.
+
+Reported-by: Jane Chu <jane.chu@oracle.com>
+Reported-by: Erwin Tsaur <erwin.tsaur@oracle.com>
+Fixes: 4d88a97aa9e8 ("libnvdimm, nvdimm: dimm driver and base libnvdimm device-driver...")
+Cc: <stable@vger.kernel.org>
+Link: https://github.com/pmem/ndctl/issues/96
+Tested-by: Tested-by: Jane Chu <jane.chu@oracle.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/bus.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
+index 2dca3034fee0..42713b210f51 100644
+--- a/drivers/nvdimm/bus.c
++++ b/drivers/nvdimm/bus.c
+@@ -547,13 +547,38 @@ EXPORT_SYMBOL(nd_device_register);
+
+ void nd_device_unregister(struct device *dev, enum nd_async_mode mode)
+ {
++ bool killed;
++
+ switch (mode) {
+ case ND_ASYNC:
++ /*
++ * In the async case this is being triggered with the
++ * device lock held and the unregistration work needs to
++ * be moved out of line iff this is thread has won the
++ * race to schedule the deletion.
++ */
++ if (!kill_device(dev))
++ return;
++
+ get_device(dev);
+ async_schedule_domain(nd_async_device_unregister, dev,
+ &nd_async_domain);
+ break;
+ case ND_SYNC:
++ /*
++ * In the sync case the device is being unregistered due
++ * to a state change of the parent. Claim the kill state
++ * to synchronize against other unregistration requests,
++ * or otherwise let the async path handle it if the
++ * unregistration was already queued.
++ */
++ device_lock(dev);
++ killed = kill_device(dev);
++ device_unlock(dev);
++
++ if (!killed)
++ return;
++
+ nd_synchronize();
+ device_unregister(dev);
+ break;
+--
+2.16.4
+
diff --git a/patches.fixes/nvme-multipath-avoid-crash-on-invalid-subsystem-cntl.patch b/patches.fixes/nvme-multipath-avoid-crash-on-invalid-subsystem-cntl.patch
index f066dbf5a6..9316ab6614 100644
--- a/patches.fixes/nvme-multipath-avoid-crash-on-invalid-subsystem-cntl.patch
+++ b/patches.fixes/nvme-multipath-avoid-crash-on-invalid-subsystem-cntl.patch
@@ -5,8 +5,7 @@ Subject: [PATCH] nvme-multipath: avoid crash on invalid subsystem cntlid
enumeration
Git-commit: 8a03b27ea61c2ab9de16a8a195822ef05e799748
-Patch-Mainline: queued in subsystem maintainer repository
-Git-repo: git://git.infradead.org/nvme.git
+Patch-Mainline: v5.2-rc1
References: bsc#1129273
A process holding an open reference to a removed disk prevents it
diff --git a/patches.fixes/sched-topology-Improve-load-balancing-on-AMD-EPYC.patch b/patches.fixes/sched-topology-Improve-load-balancing-on-AMD-EPYC.patch
new file mode 100644
index 0000000000..a28b92c0c9
--- /dev/null
+++ b/patches.fixes/sched-topology-Improve-load-balancing-on-AMD-EPYC.patch
@@ -0,0 +1,131 @@
+From 75e83ec36bfc93bdafaf9dda2262b7ff006781cf Mon Sep 17 00:00:00 2001
+From: Matt Fleming <mfleming@suse.de>
+Date: Fri, 24 May 2019 22:11:42 +0100
+Subject: [PATCH] sched/topology: Improve load balancing on AMD EPYC
+Patch-mainline: Not yet, under discussion on LKML
+References: bsc#1137366
+
+SD_BALANCE_{FORK,EXEC} and SD_WAKE_AFFINE are stripped in sd_init()
+for any sched domains with a NUMA distance greater than 2 hops
+(RECLAIM_DISTANCE). The idea being that it's expensive to balance
+across domains that far apart.
+
+However, as is rather unfortunately explained in
+
+ commit 32e45ff43eaf ("mm: increase RECLAIM_DISTANCE to 30")
+
+the value for RECLAIM_DISTANCE is based on node distance tables from
+2011-era hardware.
+
+Current AMD EPYC machines have the following NUMA node distances:
+
+node distances:
+node 0 1 2 3 4 5 6 7
+ 0: 10 16 16 16 32 32 32 32
+ 1: 16 10 16 16 32 32 32 32
+ 2: 16 16 10 16 32 32 32 32
+ 3: 16 16 16 10 32 32 32 32
+ 4: 32 32 32 32 10 16 16 16
+ 5: 32 32 32 32 16 10 16 16
+ 6: 32 32 32 32 16 16 10 16
+ 7: 32 32 32 32 16 16 16 10
+
+where 2 hops is 32.
+
+The result is that the scheduler fails to load balance properly across
+NUMA nodes on different sockets -- 2 hops apart.
+
+For example, pinning 16 busy threads to NUMA nodes 0 (CPUs 0-7) and 4
+(CPUs 32-39) like so,
+
+ $ numactl -C 0-7,32-39 ./spinner 16
+
+causes all threads to fork and remain on node 0 until the active
+balancer kicks in after a few seconds and forcibly moves some threads
+to node 4.
+
+Override node_reclaim_distance for AMD Zen.
+
+Signed-off-by: Matt Fleming <mfleming@suse.de>
+---
+ arch/x86/kernel/cpu/amd.c | 5 +++++
+ include/linux/topology.h | 3 +++
+ kernel/sched/topology.c | 3 ++-
+ mm/khugepaged.c | 2 +-
+ mm/page_alloc.c | 2 +-
+ 5 files changed, 12 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/kernel/cpu/amd.c
++++ b/arch/x86/kernel/cpu/amd.c
+@@ -7,6 +7,7 @@
+ #include <linux/sched.h>
+ #include <linux/sched/clock.h>
+ #include <linux/random.h>
++#include <linux/topology.h>
+ #include <asm/processor.h>
+ #include <asm/apic.h>
+ #include <asm/cacheinfo.h>
+@@ -812,6 +813,10 @@ static void init_amd_zn(struct cpuinfo_x
+ {
+ set_cpu_cap(c, X86_FEATURE_ZEN);
+
++#ifdef CONFIG_NUMA
++ node_reclaim_distance = 32;
++#endif
++
+ /*
+ * Fix erratum 1076: CPB feature bit not being set in CPUID.
+ * Always set it, except when running under a hypervisor.
+--- a/include/linux/topology.h
++++ b/include/linux/topology.h
+@@ -59,6 +59,9 @@ int arch_update_cpu_topology(void);
+ */
+ #define RECLAIM_DISTANCE 30
+ #endif
++
++extern int __read_mostly node_reclaim_distance;
++
+ #ifndef PENALTY_FOR_NODE_WITH_CPUS
+ #define PENALTY_FOR_NODE_WITH_CPUS (1)
+ #endif
+--- a/kernel/sched/topology.c
++++ b/kernel/sched/topology.c
+@@ -1070,6 +1070,7 @@ static int *sched_domains_numa_distance;
+ int sched_max_numa_distance;
+ static struct cpumask ***sched_domains_numa_masks;
+ static int sched_domains_curr_level;
++int __read_mostly node_reclaim_distance = RECLAIM_DISTANCE;
+ #endif
+
+ /*
+@@ -1191,7 +1192,7 @@ sd_init(struct sched_domain_topology_lev
+ sd->idle_idx = 2;
+
+ sd->flags |= SD_SERIALIZE;
+- if (sched_domains_numa_distance[tl->numa_level] > RECLAIM_DISTANCE) {
++ if (sched_domains_numa_distance[tl->numa_level] > node_reclaim_distance) {
+ sd->flags &= ~(SD_BALANCE_EXEC |
+ SD_BALANCE_FORK |
+ SD_WAKE_AFFINE);
+--- a/mm/khugepaged.c
++++ b/mm/khugepaged.c
+@@ -690,7 +690,7 @@ static bool khugepaged_scan_abort(int ni
+ for (i = 0; i < MAX_NUMNODES; i++) {
+ if (!khugepaged_node_load[i])
+ continue;
+- if (node_distance(nid, i) > RECLAIM_DISTANCE)
++ if (node_distance(nid, i) > node_reclaim_distance)
+ return true;
+ }
+ return false;
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -3087,7 +3087,7 @@ bool zone_watermark_ok_safe(struct zone
+ static bool zone_allows_reclaim(struct zone *local_zone, struct zone *zone)
+ {
+ return node_distance(zone_to_nid(local_zone), zone_to_nid(zone)) <=
+- RECLAIM_DISTANCE;
++ node_reclaim_distance;
+ }
+ #else /* CONFIG_NUMA */
+ static bool zone_allows_reclaim(struct zone *local_zone, struct zone *zone)
diff --git a/patches.fixes/scsi-Introduce-scsi_start_queue.patch b/patches.fixes/scsi-Introduce-scsi_start_queue.patch
index a580efeaff..b4d829f460 100644
--- a/patches.fixes/scsi-Introduce-scsi_start_queue.patch
+++ b/patches.fixes/scsi-Introduce-scsi_start_queue.patch
@@ -34,7 +34,7 @@ index 1fabcff..f228492 100644
+ unsigned long flags;
+
+ if (q->mq_ops) {
-+ blk_mq_start_stopped_hw_queues(q, false);
++ blk_mq_unquiesce_queue(q);
+ } else {
+ spin_lock_irqsave(q->queue_lock, flags);
+ blk_start_queue(q);
diff --git a/patches.fixes/scsi-Split-scsi_internal_device_block.patch b/patches.fixes/scsi-Split-scsi_internal_device_block.patch
index 7a86d34623..ac7463fb3d 100644
--- a/patches.fixes/scsi-Split-scsi_internal_device_block.patch
+++ b/patches.fixes/scsi-Split-scsi_internal_device_block.patch
@@ -96,7 +96,7 @@ index a95eb02..fc8f394 100644
- blk_mq_quiesce_queue(q);
- else
- blk_mq_quiesce_queue_nowait(q);
-+ blk_mq_stop_hw_queues(q);
++ blk_mq_quiesce_queue_nowait(q);
} else {
spin_lock_irqsave(q->queue_lock, flags);
blk_stop_queue(q);
diff --git a/patches.kabi/drivers-base-kABI-fixes-for-struct-device_private.patch b/patches.kabi/drivers-base-kABI-fixes-for-struct-device_private.patch
new file mode 100644
index 0000000000..1dfdd3823d
--- /dev/null
+++ b/patches.kabi/drivers-base-kABI-fixes-for-struct-device_private.patch
@@ -0,0 +1,34 @@
+From: Hannes Reinecke <hare@suse.de>
+Date: Fri, 22 Mar 2019 11:41:57 +0100
+Subject: [PATCH] drivers/base: kABI fixes for struct device_private
+References: bsc#1106383
+Patch-Mainline: never, kABI fix for SLE15
+
+kABI fixes for updates in device_private.
+Should not be necessary, but our kABI checker insists...
+
+Signed-off-by: Hannes Reinecke <hare@suse.com>
+---
+ drivers/base/base.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/base/base.h b/drivers/base/base.h
+index bef4256f8bca..9337cd4c31bf 100644
+--- a/drivers/base/base.h
++++ b/drivers/base/base.h
+@@ -78,9 +78,11 @@ struct device_private {
+ struct klist_node knode_driver;
+ struct klist_node knode_bus;
+ struct list_head deferred_probe;
+- struct device_driver *async_driver;
+ struct device *device;
++#ifndef __GENKSYMS__
++ struct device_driver *async_driver;
+ u8 dead:1;
++#endif
+ };
+ #define to_device_private_parent(obj) \
+ container_of(obj, struct device_private, knode_parent)
+--
+2.16.4
+
diff --git a/patches.kabi/x86-topology-Add-CPUID.1F-multi-die-package-support.patch b/patches.kabi/x86-topology-Add-CPUID.1F-multi-die-package-support.patch
index 04d73d353b..a27f60b695 100644
--- a/patches.kabi/x86-topology-Add-CPUID.1F-multi-die-package-support.patch
+++ b/patches.kabi/x86-topology-Add-CPUID.1F-multi-die-package-support.patch
@@ -11,8 +11,8 @@ other kabi fixups.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
- arch/x86/include/asm/processor.h | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
+ arch/x86/include/asm/processor.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
diff --git a/patches.kabi/x86-topology-Define-topology_logical_die_id.patch b/patches.kabi/x86-topology-Define-topology_logical_die_id.patch
index aab8e83b2d..182e7574df 100644
--- a/patches.kabi/x86-topology-Define-topology_logical_die_id.patch
+++ b/patches.kabi/x86-topology-Define-topology_logical_die_id.patch
@@ -24,11 +24,11 @@ Signed-off-by: Jiri Slaby <jslaby@suse.cz>
/* Index into per_cpu list: */
u16 cpu_index;
u32 microcode;
-@@ -139,6 +138,7 @@ struct cpuinfo_x86 {
- u8 x86_cache_bits;
+@@ -140,6 +139,7 @@ struct cpuinfo_x86 {
unsigned initialized : 1;
#ifndef __GENKSYMS__
-+ u16 logical_die_id;
u16 cpu_die_id;
++ u16 logical_die_id;
#endif
};
+
diff --git a/patches.suse/block-Fix-a-NULL-pointer-dereference-in-generic_make.patch b/patches.suse/block-Fix-a-NULL-pointer-dereference-in-generic_make.patch
new file mode 100644
index 0000000000..711d9c3098
--- /dev/null
+++ b/patches.suse/block-Fix-a-NULL-pointer-dereference-in-generic_make.patch
@@ -0,0 +1,78 @@
+From: "Guilherme G. Piccoli" <gpiccoli@canonical.com>
+Date: Tue, 30 Apr 2019 19:37:21 -0300
+Subject: [PATCH] block: Fix a NULL pointer dereference in
+ generic_make_request()
+Patch-Mainline: Never, 4.19 stable kernel patch only
+References: bsc#1139771
+
+Commit 37f9579f4c31 ("blk-mq: Avoid that submitting a bio concurrently
+with device removal triggers a crash") introduced a NULL pointer
+dereference in generic_make_request(). The patch sets q to NULL and
+enter_succeeded to false; right after, there's an 'if (enter_succeeded)'
+which is not taken, and then the 'else' will dereference q in
+blk_queue_dying(q).
+
+This patch just moves the 'q = NULL' to a point in which it won't trigger
+the oops, although the semantics of this NULLification remains untouched.
+
+A simple test case/reproducer is as follows:
+a) Build kernel v5.1-rc7 with CONFIG_BLK_CGROUP=n.
+
+b) Create a raid0 md array with 2 NVMe devices as members, and mount it
+with an ext4 filesystem.
+
+c) Run the following oneliner (supposing the raid0 is mounted in /mnt):
+(dd of=/mnt/tmp if=/dev/zero bs=1M count=999 &); sleep 0.3;
+echo 1 > /sys/block/nvme0n1/device/device/remove
+(whereas nvme0n1 is the 2nd array member)
+
+This will trigger the following oops:
+
+BUG: unable to handle kernel NULL pointer dereference at 0000000000000078
+PGD 0 P4D 0
+Oops: 0000 [#1] SMP PTI
+RIP: 0010:generic_make_request+0x32b/0x400
+Call Trace:
+ submit_bio+0x73/0x140
+ ext4_io_submit+0x4d/0x60
+ ext4_writepages+0x626/0xe90
+ do_writepages+0x4b/0xe0
+[...]
+
+This patch has no functional changes and preserves the md/raid0 behavior
+when a member is removed before kernel v4.17.
+
+Cc: Bart Van Assche <bvanassche@acm.org>
+Cc: stable@vger.kernel.org # v4.17
+Fixes: 37f9579f4c31 ("blk-mq: Avoid that submitting a bio concurrently with device removal triggers a crash")
+Signed-off-by: Guilherme G. Piccoli <gpiccoli@canonical.com>
+Reviewed-by: Ming Lei <ming.lei@redhat.com>
+Tested-by: Eric Ren <renzhengeek@gmail.com>
+Signed-off-by: Hannes Reinecke <hare@suse.com>
+---
+ block/blk-core.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/block/blk-core.c b/block/blk-core.c
+index 52ba6e23147f..191cd54691db 100644
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -2303,7 +2303,6 @@ blk_qc_t generic_make_request(struct bio *bio)
+ flags = REQ_NOWAIT;
+ if (blk_queue_enter(q, flags) < 0) {
+ enter_succeeded = false;
+- q = NULL;
+ }
+ }
+
+@@ -2335,6 +2334,7 @@ blk_qc_t generic_make_request(struct bio *bio)
+ bio_wouldblock_error(bio);
+ else
+ bio_io_error(bio);
++ q = NULL;
+ }
+ bio = bio_list_pop(&bio_list_on_stack[0]);
+ } while (bio);
+--
+2.16.4
+
diff --git a/rpm/package-descriptions b/rpm/package-descriptions
index d3ee977a0c..763df716fb 100644
--- a/rpm/package-descriptions
+++ b/rpm/package-descriptions
@@ -34,7 +34,7 @@ emulates are enabled. Many subsystems enabled in the default kernel
are entirely disabled. This kernel is meant to be small and to build
very quickly. The configuration may change arbitrarily between builds.
-=== Kernel-azure ===
+=== kernel-azure ===
Kernel for MS Azure cloud
Kernel for use in the MS Azure cloud and other Hyper-V based virtualization
diff --git a/scripts/git_sort/git_sort.py b/scripts/git_sort/git_sort.py
index 50edde0dd3..5e605fe2c0 100755
--- a/scripts/git_sort/git_sort.py
+++ b/scripts/git_sort/git_sort.py
@@ -227,6 +227,7 @@ remotes = (
Head(RepoURL("jeyu/linux.git"), "modules-next"),
Head(RepoURL("joro/iommu.git"), "next"),
Head(RepoURL("nvdimm/nvdimm.git"), "libnvdimm-for-next"),
+ Head(RepoURL("djbw/nvdimm.git"), "libnvdimm-pending"),
Head(RepoURL("herbert/crypto-2.6.git"), "master"),
)
diff --git a/series.conf b/series.conf
index 1e92b02140..7311df8b54 100644
--- a/series.conf
+++ b/series.conf
@@ -21920,6 +21920,9 @@
patches.drivers/misc-hpilo-Exclude-unsupported-device-via-blacklist.patch
patches.drivers/misc-hpilo-Do-not-claim-unsupported-hardware.patch
patches.drivers/intel_th-gth-Fix-an-off-by-one-in-output-unassigning.patch
+ patches.fixes/driver-core-Establish-order-of-operations-for-device.patch
+ patches.fixes/device-core-Consolidate-locking-and-unlocking-of-par.patch
+ patches.fixes/driver-core-Probe-devices-asynchronously-instead-of-.patch
patches.fixes/driver-core-Do-not-resume-suppliers-under-device_lin.patch
patches.drivers/iio-adc-fix-warning-in-Qualcomm-PM8xxx-HK-XOADC-driv.patch
patches.drivers/staging-iio-adt7316-fix-register-and-bit-definitions.patch
@@ -22906,6 +22909,8 @@
patches.drivers/media-atmel-atmel-isc-fix-INIT_WORK-misplacement.patch
patches.drivers/media-omap_vout-potential-buffer-overflow-in-vidioc_.patch
patches.drivers/media-davinci-vpbe-array-underflow-in-vpbe_enum_outp.patch
+ patches.fixes/ceph-flush-dirty-inodes-before-proceeding-with-remount.patch
+ patches.fixes/nvme-multipath-avoid-crash-on-invalid-subsystem-cntl.patch
patches.arch/KVM-PPC-Book3S-HV-Avoid-lockdep-debugging-in-TCE-rea.patch
patches.drivers/ALSA-hda-realtek-Fixup-headphone-noise-via-runtime-s.patch
patches.drivers/ALSA-hda-realtek-Avoid-superfluous-COEF-EAPD-setups.patch
@@ -22990,6 +22995,7 @@
patches.arch/x86-cpu-amd-don-t-force-the-cpb-cap-when-running-under-a-hypervisor.patch
patches.fixes/fuse-fallocate-fix-return-with-locked-inode.patch
patches.fixes/s390-qeth-fix-vlan-attribute-in-bridge_hostnotify-udev-event
+ patches.drivers/net-mvpp2-Use-strscpy-to-handle-stat-strings.patch
patches.drivers/hwmon-core-add-thermal-sensors-only-if-dev-of_node-i.patch
patches.drivers/hwmon-pmbus-core-Treat-parameters-as-paged-if-on-mul.patch
patches.drm/0002-drm-i915-gvt-refine-ggtt-range-validation.patch
@@ -23034,6 +23040,11 @@
patches.drivers/can-flexcan-fix-timeout-when-set-small-bitrate.patch
patches.fixes/can-af_can-Fix-error-path-of-can_init.patch
patches.fixes/can-purge-socket-error-queue-on-sock-destruct.patch
+ patches.drivers/ibmvnic-Do-not-close-unopened-driver-during-reset.patch
+ patches.drivers/ibmvnic-Refresh-device-multicast-list-after-reset.patch
+ patches.drivers/ibmvnic-Fix-unchecked-return-codes-of-memory-allocat.patch
+ patches.drivers/net-mvpp2-prs-Fix-parser-range-for-VID-filtering.patch
+ patches.drivers/net-mvpp2-prs-Use-the-correct-helpers-when-removing-.patch
patches.fixes/mac80211-handle-deauthentication-disassociation-from.patch
patches.fixes/mac80211-Do-not-use-stack-memory-with-scatterlist-fo.patch
patches.fixes/mac80211-drop-robust-management-frames-from-unknown-.patch
@@ -23055,11 +23066,8 @@
patches.drm/drm-i915-gvt-ignore-unexpected-pvinfo-write.patch
patches.drivers/Bluetooth-Fix-regression-with-minimum-encryption-key.patch
patches.drivers/ppp-mppe-Add-softdep-to-arc4.patch
-
- # davem/net
- patches.drivers/ibmvnic-Do-not-close-unopened-driver-during-reset.patch
- patches.drivers/ibmvnic-Refresh-device-multicast-list-after-reset.patch
- patches.drivers/ibmvnic-Fix-unchecked-return-codes-of-memory-allocat.patch
+ patches.fixes/Bluetooth-Fix-faulty-expression-for-minimum-encrypti.patch
+ patches.fixes/crypto-user-prevent-operating-on-larval-algorithms.patch
# powerpc/linux next
patches.arch/powerpc-pseries-dlpar-Fix-a-missing-check-in-dlpar_p.patch
@@ -23067,6 +23075,7 @@
patches.arch/powerpc-cacheinfo-add-cacheinfo_teardown-cacheinfo_r.patch
patches.arch/powerpc-pseries-mobility-prevent-cpu-hotplug-during-.patch
patches.arch/powerpc-pseries-mobility-rebuild-cacheinfo-hierarchy.patch
+ patches.arch/powerpc-rtas-retry-when-cpu-offline-races-with-suspe.patch
# tip/tip
patches.suse/x86-topology-Add-CPUID.1F-multi-die-package-support.patch
@@ -23097,8 +23106,9 @@
patches.suse/0005-MODSIGN-Allow-the-db-UEFI-variable-to-be-suppressed.patch
patches.suse/0006-modsign-Use-secondary-trust-keyring-for-module-signi.patch
- # herbert/crypto-2.6
- patches.fixes/crypto-user-prevent-operating-on-larval-algorithms.patch
+ # djbw/nvdimm libnvdimm-pending
+ patches.fixes/drivers-base-introduce-kill_device.patch
+ patches.fixes/libnvdimm-bus-prevent-duplicate-device_unregister-calls.patch
# out-of-tree patches
patches.suse/nvme-multipath-round-robin-I-O-policy.patch
@@ -23115,14 +23125,12 @@
patches.suse/nvme-skip-nvme_update_disk_info-if-the-controller-is.patch
patches.kabi/kabi-move-sysctl_tcp_min_snd_mss-to-preserve-struct-.patch
patches.kabi/kabi-drop-LINUX_MIB_TCPWQUEUETOOBIG-snmp-counter.patch
+ patches.suse/block-Fix-a-NULL-pointer-dereference-in-generic_make.patch
########################################################
# end of sorted patches
########################################################
- # git://git.infradead.org/nvme.git nvme-5.2
- patches.fixes/nvme-multipath-avoid-crash-on-invalid-subsystem-cntl.patch
-
# tip/tip x86/cpu
patches.suse/x86-cpufeatures-Carve-out-CQM-features-retrieval.patch
patches.suse/x86-cpufeatures-Combine-word-11-and-12-into-a-new-sc.patch
@@ -23202,6 +23210,8 @@
patches.suse/IBRS-forbid-shooting-in-foot.patch
patches.suse/do-not-default-to-ibrs-on-skl.patch
+ # bsc#1137366
+ patches.fixes/sched-topology-Improve-load-balancing-on-AMD-EPYC.patch
########################################################
# locking/core
@@ -23782,6 +23792,7 @@
patches.kabi/arch-arm64-acpi-KABI-ignore-includes.patch
patches.kabi/firmware-efi-KABI-memreserve.patch
+ patches.kabi/drivers-base-kABI-fixes-for-struct-device_private.patch
# KVM
patches.suse/0001-kvm-Introduce-nopvspin-kernel-parameter.patch