Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2018-10-31 15:30:11 +0100
committerTakashi Iwai <tiwai@suse.de>2018-10-31 15:30:11 +0100
commita5b19896c210aeabcd7a72234fd8d4e22c3a743f (patch)
treeb0933d732f50056957e7b4d78cf68ff0f43530bf
parent0fa5877f9133ff6e7d368da17f32add763e9b69c (diff)
parent5a4eeb4a246bc13ba9bec322bf059ca47205540e (diff)
Merge branch 'users/jthumshirn/SLE15/for-next' into SLE15
Pull nvdimm fixes from Johannes Thumshirn
-rw-r--r--patches.fixes/0001-drm-amdgpu-powerplay-fix-missing-break-in-switch-sta.patch3
-rw-r--r--patches.fixes/0001-drm-hisilicon-hibmc-Do-not-carry-error-code-in-HiBMC.patch3
-rw-r--r--patches.fixes/0001-drm-hisilicon-hibmc-Don-t-overwrite-fb-helper-surfac.patch3
-rw-r--r--patches.fixes/0001-drm-i915-audio-Hook-up-component-bindings-even-if-di.patch3
-rw-r--r--patches.fixes/0001-drm-i915-gen9-Fix-initial-readout-for-Y-tiled-frameb.patch3
-rw-r--r--patches.fixes/0001-drm-sti-do-not-remove-the-drm_bridge-that-was-never-.patch3
-rw-r--r--patches.fixes/0001-drm-virtio-fix-bounds-check-in-virtio_gpu_cmd_get_ca.patch3
-rw-r--r--patches.fixes/libnvdimm-dimm-maximize-label-transfer-size.patch71
-rw-r--r--patches.fixes/libnvdimm-label-change-nvdimm_num_label_slots-per-uefi-2-7.patch79
-rw-r--r--patches.fixes/libnvdimm-label-fix-sparse-warning.patch46
-rw-r--r--patches.fixes/nvdimm-clarify-comment-in-sizeof_namespace_index.patch40
-rw-r--r--patches.fixes/nvdimm-remove-empty-if-statement.patch38
-rw-r--r--patches.fixes/nvdimm-sanity-check-labeloff.patch36
-rw-r--r--patches.fixes/nvdimm-split-label-init-out-from-the-logic-for-getting-config-data.patch199
-rw-r--r--patches.fixes/nvdimm-use-namespace-index-data-to-reduce-number-of-label-reads-needed.patch181
-rw-r--r--series.conf24
16 files changed, 712 insertions, 23 deletions
diff --git a/patches.fixes/0001-drm-amdgpu-powerplay-fix-missing-break-in-switch-sta.patch b/patches.fixes/0001-drm-amdgpu-powerplay-fix-missing-break-in-switch-sta.patch
index e48edf5d75..02da211c31 100644
--- a/patches.fixes/0001-drm-amdgpu-powerplay-fix-missing-break-in-switch-sta.patch
+++ b/patches.fixes/0001-drm-amdgpu-powerplay-fix-missing-break-in-switch-sta.patch
@@ -3,8 +3,7 @@ From: Colin Ian King <colin.king@canonical.com>
Date: Mon, 8 Oct 2018 17:22:28 +0100
Subject: drm/amdgpu/powerplay: fix missing break in switch statements
Git-commit: 14b284832e7dea6f54f0adfd7bed105548b94e57
-Git-repo: git://anongit.freedesktop.org/drm/drm-misc
-Patch-mainline: Queued in subsystem maintainer repository
+Patch-mainline: v4.20-rc1
References: bsc#1113722
There are several switch statements that are missing break statements.
diff --git a/patches.fixes/0001-drm-hisilicon-hibmc-Do-not-carry-error-code-in-HiBMC.patch b/patches.fixes/0001-drm-hisilicon-hibmc-Do-not-carry-error-code-in-HiBMC.patch
index 97ae2d8eca..0fb9b3daaa 100644
--- a/patches.fixes/0001-drm-hisilicon-hibmc-Do-not-carry-error-code-in-HiBMC.patch
+++ b/patches.fixes/0001-drm-hisilicon-hibmc-Do-not-carry-error-code-in-HiBMC.patch
@@ -4,8 +4,7 @@ Date: Sat, 22 Sep 2018 01:25:25 +0800
Subject: drm/hisilicon: hibmc: Do not carry error code in HiBMC framebuffer
pointer
Git-commit: 331d880b35a76b5de0eec8cbcecbf615d758a5f9
-Git-repo: git://anongit.freedesktop.org/drm/drm-misc
-Patch-mainline: Queued in subsystem maintainer repository
+Patch-mainline: v4.20-rc1
References: bsc#1113722
In hibmc_drm_fb_create(), when the call to hibmc_framebuffer_init() fails
diff --git a/patches.fixes/0001-drm-hisilicon-hibmc-Don-t-overwrite-fb-helper-surfac.patch b/patches.fixes/0001-drm-hisilicon-hibmc-Don-t-overwrite-fb-helper-surfac.patch
index e9a82d4ec0..702f9d11c7 100644
--- a/patches.fixes/0001-drm-hisilicon-hibmc-Don-t-overwrite-fb-helper-surfac.patch
+++ b/patches.fixes/0001-drm-hisilicon-hibmc-Don-t-overwrite-fb-helper-surfac.patch
@@ -3,8 +3,7 @@ From: John Garry <john.garry@huawei.com>
Date: Sat, 22 Sep 2018 01:25:26 +0800
Subject: drm/hisilicon: hibmc: Don't overwrite fb helper surface depth
Git-commit: 0ff9f49646353ce31312411e7e7bd2281492a40e
-Git-repo: git://anongit.freedesktop.org/drm/drm-misc
-Patch-mainline: Queued in subsystem maintainer repository
+Patch-mainline: v4.20-rc1
References: bsc#1113722
Currently the driver overwrites the surface depth provided by the fb
diff --git a/patches.fixes/0001-drm-i915-audio-Hook-up-component-bindings-even-if-di.patch b/patches.fixes/0001-drm-i915-audio-Hook-up-component-bindings-even-if-di.patch
index 58fce69ed7..0482da221c 100644
--- a/patches.fixes/0001-drm-i915-audio-Hook-up-component-bindings-even-if-di.patch
+++ b/patches.fixes/0001-drm-i915-audio-Hook-up-component-bindings-even-if-di.patch
@@ -4,8 +4,7 @@ Date: Fri, 17 Aug 2018 11:02:41 +0100
Subject: drm/i915/audio: Hook up component bindings even if displays are
disabled
Git-commit: 35a5fd9ebfa93758ca579e30f337b6c9126d995b
-Git-repo: git://anongit.freedesktop.org/drm/drm-misc
-Patch-mainline: Queued in subsystem maintainer repository
+Patch-mainline: v4.20-rc1
References: bsc#1113722
If the display has been disabled by modparam, we still want to connect
diff --git a/patches.fixes/0001-drm-i915-gen9-Fix-initial-readout-for-Y-tiled-frameb.patch b/patches.fixes/0001-drm-i915-gen9-Fix-initial-readout-for-Y-tiled-frameb.patch
index ee7c94ee5b..a8baf99390 100644
--- a/patches.fixes/0001-drm-i915-gen9-Fix-initial-readout-for-Y-tiled-frameb.patch
+++ b/patches.fixes/0001-drm-i915-gen9-Fix-initial-readout-for-Y-tiled-frameb.patch
@@ -6,8 +6,7 @@ MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Git-commit: d9a515867bdba59ebf196a6ade10faae8e8be36a
-Git-repo: git://anongit.freedesktop.org/drm/drm-misc
-Patch-mainline: Queued in subsystem maintainer repository
+Patch-mainline: v4.20-rc1
References: bsc#1113722
If BIOS configured a Y tiled FB we failed to set up the backing object
diff --git a/patches.fixes/0001-drm-sti-do-not-remove-the-drm_bridge-that-was-never-.patch b/patches.fixes/0001-drm-sti-do-not-remove-the-drm_bridge-that-was-never-.patch
index 27cb2c1653..f6e9581e09 100644
--- a/patches.fixes/0001-drm-sti-do-not-remove-the-drm_bridge-that-was-never-.patch
+++ b/patches.fixes/0001-drm-sti-do-not-remove-the-drm_bridge-that-was-never-.patch
@@ -3,8 +3,7 @@ From: Peter Rosin <peda@axentia.se>
Date: Mon, 6 Aug 2018 08:19:09 +0200
Subject: drm/sti: do not remove the drm_bridge that was never added
Git-commit: 66e31a72dc38543b2d9d1ce267dc78ba9beebcfd
-Git-repo: git://anongit.freedesktop.org/drm/drm-misc
-Patch-mainline: Queued in subsystem maintainer repository
+Patch-mainline: v4.20-rc1
References: bsc#1113722
Removing the drm_bridge_remove call should avoid a NULL dereference
diff --git a/patches.fixes/0001-drm-virtio-fix-bounds-check-in-virtio_gpu_cmd_get_ca.patch b/patches.fixes/0001-drm-virtio-fix-bounds-check-in-virtio_gpu_cmd_get_ca.patch
index f12f9191bf..c3f3505f42 100644
--- a/patches.fixes/0001-drm-virtio-fix-bounds-check-in-virtio_gpu_cmd_get_ca.patch
+++ b/patches.fixes/0001-drm-virtio-fix-bounds-check-in-virtio_gpu_cmd_get_ca.patch
@@ -3,8 +3,7 @@ From: Dan Carpenter <dan.carpenter@oracle.com>
Date: Wed, 4 Jul 2018 12:42:50 +0300
Subject: drm/virtio: fix bounds check in virtio_gpu_cmd_get_capset()
Git-commit: 09c4b49457434fa74749ad6194ef28464d9f5df9
-Git-repo: git://anongit.freedesktop.org/drm/drm-misc
-Patch-mainline: Queued in subsystem maintainer repository
+Patch-mainline: v4.20-rc1
References: bsc#1113722
This doesn't affect runtime because in the current code "idx" is always
diff --git a/patches.fixes/libnvdimm-dimm-maximize-label-transfer-size.patch b/patches.fixes/libnvdimm-dimm-maximize-label-transfer-size.patch
new file mode 100644
index 0000000000..e1194a8b8b
--- /dev/null
+++ b/patches.fixes/libnvdimm-dimm-maximize-label-transfer-size.patch
@@ -0,0 +1,71 @@
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Wed, 10 Oct 2018 16:38:24 -0700
+Subject: libnvdimm, dimm: Maximize label transfer size
+Git-commit: d11cf4a7321b538563b0ab30dc0d1f18f9c56226
+Patch-mainline: v4.20-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+Use kvzalloc() to bypass the arbitrary PAGE_SIZE limit of label transfer
+operations. Given the expense of calling into firmware, maximize the
+amount of label data we transfer per call to be up to the total label
+space if allowed by the firmware.
+
+Instead of limiting based on PAGE_SIZE we can instead simply limit the
+maximum size based on either the config_size int he case of the get
+operation, or the length of the write based on the set operation.
+
+On a system with 24 NVDIMM modules each with a config_size of 128K and a
+maximum transfer size of 64K - 4, this patch reduces the init time for the
+label data from around 24 seconds down to between 4-5 seconds.
+
+Reviewed-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/dimm_devs.c | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/drivers/nvdimm/dimm_devs.c
++++ b/drivers/nvdimm/dimm_devs.c
+@@ -110,8 +110,8 @@ int nvdimm_init_config_data(struct nvdim
+ if (!ndd->data)
+ return -ENOMEM;
+
+- max_cmd_size = min_t(u32, PAGE_SIZE, ndd->nsarea.max_xfer);
+- cmd = kzalloc(max_cmd_size + sizeof(*cmd), GFP_KERNEL);
++ max_cmd_size = min_t(u32, ndd->nsarea.config_size, ndd->nsarea.max_xfer);
++ cmd = kvzalloc(max_cmd_size + sizeof(*cmd), GFP_KERNEL);
+ if (!cmd)
+ return -ENOMEM;
+
+@@ -133,7 +133,7 @@ int nvdimm_init_config_data(struct nvdim
+ memcpy(ndd->data + offset, cmd->out_buf, cmd->in_length);
+ }
+ dev_dbg(ndd->dev, "%s: len: %zu rc: %d\n", __func__, offset, rc);
+- kfree(cmd);
++ kvfree(cmd);
+
+ return rc;
+ }
+@@ -156,9 +156,8 @@ int nvdimm_set_config_data(struct nvdimm
+ if (offset + len > ndd->nsarea.config_size)
+ return -ENXIO;
+
+- max_cmd_size = min_t(u32, PAGE_SIZE, len);
+- max_cmd_size = min_t(u32, max_cmd_size, ndd->nsarea.max_xfer);
+- cmd = kzalloc(max_cmd_size + sizeof(*cmd) + sizeof(u32), GFP_KERNEL);
++ max_cmd_size = min_t(u32, len, ndd->nsarea.max_xfer);
++ cmd = kvzalloc(max_cmd_size + sizeof(*cmd) + sizeof(u32), GFP_KERNEL);
+ if (!cmd)
+ return -ENOMEM;
+
+@@ -182,7 +181,7 @@ int nvdimm_set_config_data(struct nvdimm
+ break;
+ }
+ }
+- kfree(cmd);
++ kvfree(cmd);
+
+ return rc;
+ }
diff --git a/patches.fixes/libnvdimm-label-change-nvdimm_num_label_slots-per-uefi-2-7.patch b/patches.fixes/libnvdimm-label-change-nvdimm_num_label_slots-per-uefi-2-7.patch
new file mode 100644
index 0000000000..2f7a23858b
--- /dev/null
+++ b/patches.fixes/libnvdimm-label-change-nvdimm_num_label_slots-per-uefi-2-7.patch
@@ -0,0 +1,79 @@
+From: Toshi Kani <toshi.kani@hpe.com>
+Date: Fri, 23 Feb 2018 14:59:22 -0700
+Subject: libnvdimm, label: change nvdimm_num_label_slots per UEFI 2.7
+Git-commit: 9e694d9c18dde0fa57ec067043b581bd57c9fb65
+Patch-mainline: v4.17-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+sizeof_namespace_index() fails when NVDIMM devices have the minimum
+1024 bytes label storage area. nvdimm_num_label_slots() returns 3
+slots while the area is only big enough for 2 slots.
+
+Change nvdimm_num_label_slots() to calculate a number of label slots
+according to UEFI 2.7 spec.
+
+Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/label.c | 34 ++++++++++++++++++++++++----------
+ 1 file changed, 24 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
+index c858cfadea40..1d28cd656536 100644
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -45,9 +45,27 @@ unsigned sizeof_namespace_label(struct nvdimm_drvdata *ndd)
+ return ndd->nslabel_size;
+ }
+
++static size_t __sizeof_namespace_index(u32 nslot)
++{
++ return ALIGN(sizeof(struct nd_namespace_index) + DIV_ROUND_UP(nslot, 8),
++ NSINDEX_ALIGN);
++}
++
++static int __nvdimm_num_label_slots(struct nvdimm_drvdata *ndd,
++ size_t index_size)
++{
++ return (ndd->nsarea.config_size - index_size * 2) /
++ sizeof_namespace_label(ndd);
++}
++
+ int nvdimm_num_label_slots(struct nvdimm_drvdata *ndd)
+ {
+- return ndd->nsarea.config_size / (sizeof_namespace_label(ndd) + 1);
++ u32 tmp_nslot, n;
++
++ tmp_nslot = ndd->nsarea.config_size / sizeof_namespace_label(ndd);
++ n = __sizeof_namespace_index(tmp_nslot) / NSINDEX_ALIGN;
++
++ return __nvdimm_num_label_slots(ndd, NSINDEX_ALIGN * n);
+ }
+
+ size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd)
+@@ -55,18 +73,14 @@ size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd)
+ u32 nslot, space, size;
+
+ /*
+- * The minimum index space is 512 bytes, with that amount of
+- * index we can describe ~1400 labels which is less than a byte
+- * of overhead per label. Round up to a byte of overhead per
+- * label and determine the size of the index region. Yes, this
+- * starts to waste space at larger config_sizes, but it's
+- * unlikely we'll ever see anything but 128K.
++ * Per UEFI 2.7, the minimum size of the Label Storage Area is large
++ * enough to hold 2 index blocks and 2 labels. The minimum index
++ * block size is 256 bytes, and the minimum label size is 256 bytes.
+ */
+ nslot = nvdimm_num_label_slots(ndd);
+ space = ndd->nsarea.config_size - nslot * sizeof_namespace_label(ndd);
+- size = ALIGN(sizeof(struct nd_namespace_index) + DIV_ROUND_UP(nslot, 8),
+- NSINDEX_ALIGN) * 2;
+- if (size <= space)
++ size = __sizeof_namespace_index(nslot) * 2;
++ if (size <= space && nslot >= 2)
+ return size / 2;
+
+ dev_err(ndd->dev, "label area (%d) too small to host (%d byte) labels\n",
+
diff --git a/patches.fixes/libnvdimm-label-fix-sparse-warning.patch b/patches.fixes/libnvdimm-label-fix-sparse-warning.patch
new file mode 100644
index 0000000000..2dfa8f3626
--- /dev/null
+++ b/patches.fixes/libnvdimm-label-fix-sparse-warning.patch
@@ -0,0 +1,46 @@
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Thu, 11 Oct 2018 18:25:20 -0700
+Subject: libnvdimm, label: Fix sparse warning
+Git-commit: 97052c1c31d5bcf08823ce1ea272447edd2d52de
+Patch-mainline: v4.20-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+The kbuild robot reports:
+
+drivers/nvdimm/label.c:500:32: warning: restricted __le32 degrades to integer
+
+...read 'nslot' into a local u32.
+
+Reported-by: kbuild test robot <lkp@intel.com>
+Acked-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/label.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
+index 7f03d117824f..750dbaa6ce82 100644
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -424,6 +424,7 @@ int nd_label_data_init(struct nvdimm_drvdata *ndd)
+ struct nd_namespace_index *nsindex;
+ unsigned int i;
+ int rc = 0;
++ u32 nslot;
+
+ if (ndd->data)
+ return 0;
+@@ -495,9 +496,10 @@ int nd_label_data_init(struct nvdimm_drvdata *ndd)
+
+ /* Determine starting offset for label data */
+ offset = __le64_to_cpu(nsindex->labeloff);
++ nslot = __le32_to_cpu(nsindex->nslot);
+
+ /* Loop through the free list pulling in any active labels */
+- for (i = 0; i < nsindex->nslot; i++, offset += ndd->nslabel_size) {
++ for (i = 0; i < nslot; i++, offset += ndd->nslabel_size) {
+ size_t label_read_size;
+
+ /* zero out the unused labels */
+
diff --git a/patches.fixes/nvdimm-clarify-comment-in-sizeof_namespace_index.patch b/patches.fixes/nvdimm-clarify-comment-in-sizeof_namespace_index.patch
new file mode 100644
index 0000000000..df9ac85d50
--- /dev/null
+++ b/patches.fixes/nvdimm-clarify-comment-in-sizeof_namespace_index.patch
@@ -0,0 +1,40 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Wed, 10 Oct 2018 16:38:55 -0700
+Subject: nvdimm: Clarify comment in sizeof_namespace_index
+Git-commit: 1cfeb66e8e137be8e01b88bb4d416e987abda4a4
+Patch-mainline: v4.20-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+When working on the label code I found it rather confusing to see several
+spots that reference a minimum label size of 256 while working with labels
+that are 128 bytes in size.
+
+This patch is meant to provide a clarification on one of the comments that
+was at the heart of the issue. Specifically for version 1.2 and later of
+the namespace specification the minimum label size is 256, prior to that
+the minimum label size was 128. So we should state that as such to avoid
+confusion.
+
+Reviewed-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/label.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
+index 1f5842509dbc..bb813b8e8ace 100644
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -75,7 +75,8 @@ size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd)
+ /*
+ * Per UEFI 2.7, the minimum size of the Label Storage Area is large
+ * enough to hold 2 index blocks and 2 labels. The minimum index
+- * block size is 256 bytes, and the minimum label size is 256 bytes.
++ * block size is 256 bytes. The label size is 128 for namespaces
++ * prior to version 1.2 and at minimum 256 for version 1.2 and later.
+ */
+ nslot = nvdimm_num_label_slots(ndd);
+ space = ndd->nsarea.config_size - nslot * sizeof_namespace_label(ndd);
+
diff --git a/patches.fixes/nvdimm-remove-empty-if-statement.patch b/patches.fixes/nvdimm-remove-empty-if-statement.patch
new file mode 100644
index 0000000000..59914d4a43
--- /dev/null
+++ b/patches.fixes/nvdimm-remove-empty-if-statement.patch
@@ -0,0 +1,38 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Wed, 10 Oct 2018 16:39:06 -0700
+Subject: nvdimm: Remove empty if statement
+Git-commit: 19418b024427ec60ba6084addf691a8d93670398
+Patch-mainline: v4.20-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+This patch removes an empty statement from an if expression and promotes
+the else statement to the if expression with the expression logic reversed.
+
+I feel this is more readable as the empty statement can lead to issues if
+any additional logic was ever added.
+
+Reviewed-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/label.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
+index bb813b8e8ace..43bad0d5bdb6 100644
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -261,9 +261,8 @@ int nd_label_validate(struct nvdimm_drvdata *ndd)
+ void nd_label_copy(struct nvdimm_drvdata *ndd, struct nd_namespace_index *dst,
+ struct nd_namespace_index *src)
+ {
+- if (dst && src)
+- /* pass */;
+- else
++ /* just exit if either destination or source is NULL */
++ if (!dst || !src)
+ return;
+
+ memcpy(dst, src, sizeof_namespace_index(ndd));
+
diff --git a/patches.fixes/nvdimm-sanity-check-labeloff.patch b/patches.fixes/nvdimm-sanity-check-labeloff.patch
new file mode 100644
index 0000000000..9b784ab70b
--- /dev/null
+++ b/patches.fixes/nvdimm-sanity-check-labeloff.patch
@@ -0,0 +1,36 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Wed, 10 Oct 2018 16:38:41 -0700
+Subject: nvdimm: Sanity check labeloff
+Git-commit: d86d4d63d88861107d3bfc84be7294552231ecd0
+Patch-mainline: v4.20-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+This patch adds validation for the labeloff field in the indexes.
+
+Reviewed-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/label.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
+index 1d28cd656536..1f5842509dbc 100644
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -183,6 +183,13 @@ static int __nd_label_validate(struct nvdimm_drvdata *ndd)
+ __le64_to_cpu(nsindex[i]->otheroff));
+ continue;
+ }
++ if (__le64_to_cpu(nsindex[i]->labeloff)
++ != 2 * sizeof_namespace_index(ndd)) {
++ dev_dbg(dev, "nsindex%d labeloff: %#llx invalid\n",
++ i, (unsigned long long)
++ __le64_to_cpu(nsindex[i]->labeloff));
++ continue;
++ }
+
+ size = __le64_to_cpu(nsindex[i]->mysize);
+ if (size > sizeof_namespace_index(ndd)
+
diff --git a/patches.fixes/nvdimm-split-label-init-out-from-the-logic-for-getting-config-data.patch b/patches.fixes/nvdimm-split-label-init-out-from-the-logic-for-getting-config-data.patch
new file mode 100644
index 0000000000..b74d58adf0
--- /dev/null
+++ b/patches.fixes/nvdimm-split-label-init-out-from-the-logic-for-getting-config-data.patch
@@ -0,0 +1,199 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Wed, 10 Oct 2018 16:39:20 -0700
+Subject: nvdimm: Split label init out from the logic for getting config data
+Git-commit: 2d657d17f72d2ae70c02f0d0ea6a04ad0f016b57
+Patch-mainline: v4.20-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+This patch splits the initialization of the label data into two functions.
+One for doing the init, and another for reading the actual configuration
+data. The idea behind this is that by doing this we create a symmetry
+between the getting and setting of config data in that we have a function
+for both. In addition it will make it easier for us to identify the bits
+that are related to init versus the pieces that are a wrapper for reading
+data from the ACPI interface.
+
+So for example by splitting things out like this it becomes much more
+obvious that we were performing checks that weren't necessarily related to
+the set/get operations such as relying on ndd->data being present when the
+set and get ops should not care about a locally cached copy of the label
+area.
+
+Reviewed-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/dimm.c | 2 -
+ drivers/nvdimm/dimm_devs.c | 49 +++++++++++++++++----------------------------
+ drivers/nvdimm/label.c | 38 ++++++++++++++++++++++++++++++++++
+ drivers/nvdimm/label.h | 1
+ drivers/nvdimm/nd.h | 2 +
+ 5 files changed, 61 insertions(+), 31 deletions(-)
+
+--- a/drivers/nvdimm/dimm.c
++++ b/drivers/nvdimm/dimm.c
+@@ -54,7 +54,7 @@ static int nvdimm_probe(struct device *d
+ if (rc)
+ goto err;
+
+- rc = nvdimm_init_config_data(ndd);
++ rc = nd_label_data_init(ndd);
+ if (rc == -EACCES)
+ nvdimm_set_locked(dev);
+ if (rc)
+--- a/drivers/nvdimm/dimm_devs.c
++++ b/drivers/nvdimm/dimm_devs.c
+@@ -84,55 +84,47 @@ int nvdimm_init_nsarea(struct nvdimm_drv
+ return cmd_rc;
+ }
+
+-int nvdimm_init_config_data(struct nvdimm_drvdata *ndd)
++int nvdimm_get_config_data(struct nvdimm_drvdata *ndd, void *buf,
++ size_t offset, size_t len)
+ {
+ struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(ndd->dev);
++ struct nvdimm_bus_descriptor *nd_desc = nvdimm_bus->nd_desc;
+ int rc = validate_dimm(ndd), cmd_rc = 0;
+ struct nd_cmd_get_config_data_hdr *cmd;
+- struct nvdimm_bus_descriptor *nd_desc;
+- u32 max_cmd_size, config_size;
+- size_t offset;
++ size_t max_cmd_size, buf_offset;
+
+ if (rc)
+ return rc;
+
+- if (ndd->data)
+- return 0;
+-
+- if (ndd->nsarea.status || ndd->nsarea.max_xfer == 0
+- || ndd->nsarea.config_size < ND_LABEL_MIN_SIZE) {
+- dev_dbg(ndd->dev, "failed to init config data area: (%d:%d)\n",
+- ndd->nsarea.max_xfer, ndd->nsarea.config_size);
++ if (offset + len > ndd->nsarea.config_size)
+ return -ENXIO;
+- }
+-
+- ndd->data = kvmalloc(ndd->nsarea.config_size, GFP_KERNEL);
+- if (!ndd->data)
+- return -ENOMEM;
+
+- max_cmd_size = min_t(u32, ndd->nsarea.config_size, ndd->nsarea.max_xfer);
++ max_cmd_size = min_t(u32, len, ndd->nsarea.max_xfer);
+ cmd = kvzalloc(max_cmd_size + sizeof(*cmd), GFP_KERNEL);
+ if (!cmd)
+ return -ENOMEM;
+
+- nd_desc = nvdimm_bus->nd_desc;
+- for (config_size = ndd->nsarea.config_size, offset = 0;
+- config_size; config_size -= cmd->in_length,
+- offset += cmd->in_length) {
+- cmd->in_length = min(config_size, max_cmd_size);
+- cmd->in_offset = offset;
++ for (buf_offset = 0; len;
++ len -= cmd->in_length, buf_offset += cmd->in_length) {
++ size_t cmd_size;
++
++ cmd->in_offset = offset + buf_offset;
++ cmd->in_length = min(max_cmd_size, len);
++
++ cmd_size = sizeof(*cmd) + cmd->in_length;
++
+ rc = nd_desc->ndctl(nd_desc, to_nvdimm(ndd->dev),
+- ND_CMD_GET_CONFIG_DATA, cmd,
+- cmd->in_length + sizeof(*cmd), &cmd_rc);
++ ND_CMD_GET_CONFIG_DATA, cmd, cmd_size, &cmd_rc);
+ if (rc < 0)
+ break;
+ if (cmd_rc < 0) {
+ rc = cmd_rc;
+ break;
+ }
+- memcpy(ndd->data + offset, cmd->out_buf, cmd->in_length);
++
++ /* out_buf should be valid, copy it into our output buffer */
++ memcpy(buf + buf_offset, cmd->out_buf, cmd->in_length);
+ }
+- dev_dbg(ndd->dev, "%s: len: %zu rc: %d\n", __func__, offset, rc);
+ kvfree(cmd);
+
+ return rc;
+@@ -150,9 +142,6 @@ int nvdimm_set_config_data(struct nvdimm
+ if (rc)
+ return rc;
+
+- if (!ndd->data)
+- return -ENXIO;
+-
+ if (offset + len > ndd->nsarea.config_size)
+ return -ENXIO;
+
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -422,6 +422,44 @@ int nd_label_reserve_dpa(struct nvdimm_d
+ return 0;
+ }
+
++int nd_label_data_init(struct nvdimm_drvdata *ndd)
++{
++ size_t config_size, read_size;
++ int rc = 0;
++
++ if (ndd->data)
++ return 0;
++
++ if (ndd->nsarea.status || ndd->nsarea.max_xfer == 0) {
++ dev_dbg(ndd->dev, "failed to init config data area: (%u:%u)\n",
++ ndd->nsarea.max_xfer, ndd->nsarea.config_size);
++ return -ENXIO;
++ }
++
++ /*
++ * We need to determine the maximum index area as this is the section
++ * we must read and validate before we can start processing labels.
++ *
++ * If the area is too small to contain the two indexes and 2 labels
++ * then we abort.
++ *
++ * Start at a label size of 128 as this should result in the largest
++ * possible namespace index size.
++ */
++ ndd->nslabel_size = 128;
++ read_size = sizeof_namespace_index(ndd) * 2;
++ if (!read_size)
++ return -ENXIO;
++
++ /* Allocate config data */
++ config_size = ndd->nsarea.config_size;
++ ndd->data = kvzalloc(config_size, GFP_KERNEL);
++ if (!ndd->data)
++ return -ENOMEM;
++
++ return nvdimm_get_config_data(ndd, ndd->data, 0, config_size);
++}
++
+ int nd_label_active_count(struct nvdimm_drvdata *ndd)
+ {
+ struct nd_namespace_index *nsindex;
+--- a/drivers/nvdimm/label.h
++++ b/drivers/nvdimm/label.h
+@@ -141,6 +141,7 @@ struct nvdimm_drvdata;
+ int nd_label_validate(struct nvdimm_drvdata *ndd);
+ void nd_label_copy(struct nvdimm_drvdata *ndd, struct nd_namespace_index *dst,
+ struct nd_namespace_index *src);
++int nd_label_data_init(struct nvdimm_drvdata *ndd);
+ size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd);
+ int nd_label_active_count(struct nvdimm_drvdata *ndd);
+ struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int n);
+--- a/drivers/nvdimm/nd.h
++++ b/drivers/nvdimm/nd.h
+@@ -247,6 +247,8 @@ struct nvdimm_drvdata *to_ndd(struct nd_
+ int nvdimm_check_config_data(struct device *dev);
+ int nvdimm_init_nsarea(struct nvdimm_drvdata *ndd);
+ int nvdimm_init_config_data(struct nvdimm_drvdata *ndd);
++int nvdimm_get_config_data(struct nvdimm_drvdata *ndd, void *buf,
++ size_t offset, size_t len);
+ int nvdimm_set_config_data(struct nvdimm_drvdata *ndd, size_t offset,
+ void *buf, size_t len);
+ long nvdimm_clear_poison(struct device *dev, phys_addr_t phys,
diff --git a/patches.fixes/nvdimm-use-namespace-index-data-to-reduce-number-of-label-reads-needed.patch b/patches.fixes/nvdimm-use-namespace-index-data-to-reduce-number-of-label-reads-needed.patch
new file mode 100644
index 0000000000..baaf360b8b
--- /dev/null
+++ b/patches.fixes/nvdimm-use-namespace-index-data-to-reduce-number-of-label-reads-needed.patch
@@ -0,0 +1,181 @@
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Wed, 10 Oct 2018 16:39:35 -0700
+Subject: nvdimm: Use namespace index data to reduce number of label reads
+ needed
+Git-commit: 7d47aad4570e5e6e9a8162bb417ca9b74132f27c
+Patch-mainline: v4.20-rc1
+References: bsc#1111921, bsc#1113408, FATE#326765, bsc#1113972
+
+This patch adds logic that is meant to make use of the namespace index data
+to reduce the number of reads that are needed to initialize a given
+namespace. The general idea is that once we have enough data to validate
+the namespace index we do so and then proceed to fetch only those labels
+that are not listed as being "free". By doing this I am seeing a total time
+reduction from about 4-5 seconds to 2-3 seconds for 24 NVDIMM modules each
+with 128K of label config area.
+
+Reviewed-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ drivers/nvdimm/dimm.c | 4 ---
+ drivers/nvdimm/label.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++---
+ drivers/nvdimm/label.h | 3 --
+ 3 files changed, 88 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/nvdimm/dimm.c b/drivers/nvdimm/dimm.c
+index 07bf96948553..9899c97138a3 100644
+--- a/drivers/nvdimm/dimm.c
++++ b/drivers/nvdimm/dimm.c
+@@ -84,10 +84,6 @@ static int nvdimm_probe(struct device *dev)
+ dev_dbg(dev, "config data size: %d\n", ndd->nsarea.config_size);
+
+ nvdimm_bus_lock(dev);
+- ndd->ns_current = nd_label_validate(ndd);
+- ndd->ns_next = nd_label_next_nsindex(ndd->ns_current);
+- nd_label_copy(ndd, to_next_namespace_index(ndd),
+- to_current_namespace_index(ndd));
+ if (ndd->ns_current >= 0) {
+ rc = nd_label_reserve_dpa(ndd);
+ if (rc == 0)
+diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
+index 563f24af01b5..7f03d117824f 100644
+--- a/drivers/nvdimm/label.c
++++ b/drivers/nvdimm/label.c
+@@ -235,7 +235,7 @@ static int __nd_label_validate(struct nvdimm_drvdata *ndd)
+ return -1;
+ }
+
+-int nd_label_validate(struct nvdimm_drvdata *ndd)
++static int nd_label_validate(struct nvdimm_drvdata *ndd)
+ {
+ /*
+ * In order to probe for and validate namespace index blocks we
+@@ -258,8 +258,9 @@ int nd_label_validate(struct nvdimm_drvdata *ndd)
+ return -1;
+ }
+
+-void nd_label_copy(struct nvdimm_drvdata *ndd, struct nd_namespace_index *dst,
+- struct nd_namespace_index *src)
++static void nd_label_copy(struct nvdimm_drvdata *ndd,
++ struct nd_namespace_index *dst,
++ struct nd_namespace_index *src)
+ {
+ /* just exit if either destination or source is NULL */
+ if (!dst || !src)
+@@ -419,7 +420,9 @@ int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd)
+
+ int nd_label_data_init(struct nvdimm_drvdata *ndd)
+ {
+- size_t config_size, read_size;
++ size_t config_size, read_size, max_xfer, offset;
++ struct nd_namespace_index *nsindex;
++ unsigned int i;
+ int rc = 0;
+
+ if (ndd->data)
+@@ -452,7 +455,87 @@ int nd_label_data_init(struct nvdimm_drvdata *ndd)
+ if (!ndd->data)
+ return -ENOMEM;
+
+- return nvdimm_get_config_data(ndd, ndd->data, 0, config_size);
++ /*
++ * We want to guarantee as few reads as possible while conserving
++ * memory. To do that we figure out how much unused space will be left
++ * in the last read, divide that by the total number of reads it is
++ * going to take given our maximum transfer size, and then reduce our
++ * maximum transfer size based on that result.
++ */
++ max_xfer = min_t(size_t, ndd->nsarea.max_xfer, config_size);
++ if (read_size < max_xfer) {
++ /* trim waste */
++ max_xfer -= ((max_xfer - 1) - (config_size - 1) % max_xfer) /
++ DIV_ROUND_UP(config_size, max_xfer);
++ /* make certain we read indexes in exactly 1 read */
++ if (max_xfer < read_size)
++ max_xfer = read_size;
++ }
++
++ /* Make our initial read size a multiple of max_xfer size */
++ read_size = min(DIV_ROUND_UP(read_size, max_xfer) * max_xfer,
++ config_size);
++
++ /* Read the index data */
++ rc = nvdimm_get_config_data(ndd, ndd->data, 0, read_size);
++ if (rc)
++ goto out_err;
++
++ /* Validate index data, if not valid assume all labels are invalid */
++ ndd->ns_current = nd_label_validate(ndd);
++ if (ndd->ns_current < 0)
++ return 0;
++
++ /* Record our index values */
++ ndd->ns_next = nd_label_next_nsindex(ndd->ns_current);
++
++ /* Copy "current" index on top of the "next" index */
++ nsindex = to_current_namespace_index(ndd);
++ nd_label_copy(ndd, to_next_namespace_index(ndd), nsindex);
++
++ /* Determine starting offset for label data */
++ offset = __le64_to_cpu(nsindex->labeloff);
++
++ /* Loop through the free list pulling in any active labels */
++ for (i = 0; i < nsindex->nslot; i++, offset += ndd->nslabel_size) {
++ size_t label_read_size;
++
++ /* zero out the unused labels */
++ if (test_bit_le(i, nsindex->free)) {
++ memset(ndd->data + offset, 0, ndd->nslabel_size);
++ continue;
++ }
++
++ /* if we already read past here then just continue */
++ if (offset + ndd->nslabel_size <= read_size)
++ continue;
++
++ /* if we haven't read in a while reset our read_size offset */
++ if (read_size < offset)
++ read_size = offset;
++
++ /* determine how much more will be read after this next call. */
++ label_read_size = offset + ndd->nslabel_size - read_size;
++ label_read_size = DIV_ROUND_UP(label_read_size, max_xfer) *
++ max_xfer;
++
++ /* truncate last read if needed */
++ if (read_size + label_read_size > config_size)
++ label_read_size = config_size - read_size;
++
++ /* Read the label data */
++ rc = nvdimm_get_config_data(ndd, ndd->data + read_size,
++ read_size, label_read_size);
++ if (rc)
++ goto out_err;
++
++ /* push read_size to next read offset */
++ read_size += label_read_size;
++ }
++
++ dev_dbg(ndd->dev, "len: %zu rc: %d\n", offset, rc);
++out_err:
++ return rc;
+ }
+
+ int nd_label_active_count(struct nvdimm_drvdata *ndd)
+diff --git a/drivers/nvdimm/label.h b/drivers/nvdimm/label.h
+index 685afb3de0fe..e9a2ad3c2150 100644
+--- a/drivers/nvdimm/label.h
++++ b/drivers/nvdimm/label.h
+@@ -138,9 +138,6 @@ static inline int nd_label_next_nsindex(int index)
+ }
+
+ struct nvdimm_drvdata;
+-int nd_label_validate(struct nvdimm_drvdata *ndd);
+-void nd_label_copy(struct nvdimm_drvdata *ndd, struct nd_namespace_index *dst,
+- struct nd_namespace_index *src);
+ int nd_label_data_init(struct nvdimm_drvdata *ndd);
+ size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd);
+ int nd_label_active_count(struct nvdimm_drvdata *ndd);
+
diff --git a/series.conf b/series.conf
index 5e6642bdd8..12745d044b 100644
--- a/series.conf
+++ b/series.conf
@@ -14963,6 +14963,7 @@
patches.drivers/rtc-hctosys-Ensure-system-time-doesn-t-overflow-time
patches.drivers/rtc-snvs-Fix-usage-of-snvs_rtc_enable
patches.drivers/libnvdimm-label-change-min-label-storage-size-per-uefi-2.7.patch
+ patches.fixes/libnvdimm-label-change-nvdimm_num_label_slots-per-uefi-2-7.patch
patches.drivers/nfit-skip-region-registration-for-incomplete-control-regions.patch
patches.fixes/0001-acpi-nfit-rework-NVDIMM-leaf-method-detection.patch
patches.drivers/nfit-fix-region-registration-vs-block-data-window-ra
@@ -18198,6 +18199,13 @@
patches.fixes/jbd2-fix-use-after-free-in-jbd2_log_do_checkpoint.patch
patches.fixes/Documentation-l1tf-Fix-small-spelling-typo.patch
patches.drivers/mfd-arizona-Correct-calling-of-runtime_put_sync.patch
+ patches.fixes/libnvdimm-dimm-maximize-label-transfer-size.patch
+ patches.fixes/nvdimm-sanity-check-labeloff.patch
+ patches.fixes/nvdimm-clarify-comment-in-sizeof_namespace_index.patch
+ patches.fixes/nvdimm-remove-empty-if-statement.patch
+ patches.fixes/nvdimm-split-label-init-out-from-the-logic-for-getting-config-data.patch
+ patches.fixes/nvdimm-use-namespace-index-data-to-reduce-number-of-label-reads-needed.patch
+ patches.fixes/libnvdimm-label-fix-sparse-warning.patch
patches.drivers/PCI-ASPM-Fix-link_state-teardown-on-device-removal.patch
patches.drivers/scsi-qla2xxx-Fix-process-response-queue-for-ISP26XX-.patch
patches.drivers/scsi-qla2xxx-Fix-incorrect-port-speed-being-set-for-.patch
@@ -18289,10 +18297,17 @@
patches.arch/powerpc-pseries-Disable-CPU-hotplug-across-migration.patch
patches.arch/powerpc-fadump-re-register-firmware-assisted-dump-if.patch
patches.arch/powerpc-rtas-Fix-a-potential-race-between-CPU-Offlin.patch
+ patches.fixes/0001-drm-sti-do-not-remove-the-drm_bridge-that-was-never-.patch
patches.fixes/0001-drm-cirrus-Use-drm_framebuffer_put-to-avoid-kernel-o.patch
+ patches.fixes/0001-drm-virtio-fix-bounds-check-in-virtio_gpu_cmd_get_ca.patch
patches.drivers/drm-i915-cfl-Add-a-new-CFL-PCI-ID
+ patches.fixes/0001-drm-i915-audio-Hook-up-component-bindings-even-if-di.patch
+ patches.fixes/0001-drm-hisilicon-hibmc-Do-not-carry-error-code-in-HiBMC.patch
+ patches.fixes/0001-drm-hisilicon-hibmc-Don-t-overwrite-fb-helper-surfac.patch
+ patches.fixes/0001-drm-amdgpu-powerplay-fix-missing-break-in-switch-sta.patch
patches.drivers/drm-i915-Restore-vblank-interrupts-earlier.patch
patches.drivers/drm-i915-dp-Link-train-Fallback-on-eDP-only-if-fallb.patch
+ patches.fixes/0001-drm-i915-gen9-Fix-initial-readout-for-Y-tiled-frameb.patch
patches.drivers/iio-adc-imx25-gcq-Fix-leak-of-device_node-in-mx25_gc.patch
patches.drivers/iio-adc-at91-fix-acking-DRDY-irq-on-simple-conversio.patch
patches.drivers/iio-adc-at91-fix-wrong-channel-number-in-triggered-b.patch
@@ -18319,15 +18334,6 @@
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
- # git://anongit.freedesktop.org/drm/drm-misc.git drm-misc-next
- patches.fixes/0001-drm-sti-do-not-remove-the-drm_bridge-that-was-never-.patch
- patches.fixes/0001-drm-virtio-fix-bounds-check-in-virtio_gpu_cmd_get_ca.patch
- patches.fixes/0001-drm-i915-audio-Hook-up-component-bindings-even-if-di.patch
- patches.fixes/0001-drm-hisilicon-hibmc-Do-not-carry-error-code-in-HiBMC.patch
- patches.fixes/0001-drm-hisilicon-hibmc-Don-t-overwrite-fb-helper-surfac.patch
- patches.fixes/0001-drm-amdgpu-powerplay-fix-missing-break-in-switch-sta.patch
- patches.fixes/0001-drm-i915-gen9-Fix-initial-readout-for-Y-tiled-frameb.patch
-
# out-of-tree patches
########################################################
# end of sorted patches