]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.1
authorSasha Levin <sashal@kernel.org>
Tue, 14 Mar 2023 02:17:11 +0000 (22:17 -0400)
committerSasha Levin <sashal@kernel.org>
Tue, 14 Mar 2023 02:17:11 +0000 (22:17 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-6.1/adreno-shutdown-the-gpu-properly.patch [new file with mode: 0644]
queue-6.1/drm-amdgpu-soc21-add-video-cap-query-support-for-vcn.patch [new file with mode: 0644]
queue-6.1/drm-amdgpu-soc21-don-t-expose-av1-if-vcn0-is-harvest.patch [new file with mode: 0644]
queue-6.1/drm-msm-adreno-fix-runtime-pm-imbalance-at-unbind.patch [new file with mode: 0644]
queue-6.1/series
queue-6.1/tpm-eventlog-don-t-abort-tpm_read_log-on-faulty-acpi.patch [new file with mode: 0644]
queue-6.1/watch_queue-fix-ioc_watch_queue_set_size-alloc-error.patch [new file with mode: 0644]

diff --git a/queue-6.1/adreno-shutdown-the-gpu-properly.patch b/queue-6.1/adreno-shutdown-the-gpu-properly.patch
new file mode 100644 (file)
index 0000000..c25ea6b
--- /dev/null
@@ -0,0 +1,104 @@
+From 9537468e1fc0b61ba7a0fd9bdd889322d1e7e3e1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 9 Jan 2023 22:25:47 +0000
+Subject: adreno: Shutdown the GPU properly
+
+From: Joel Fernandes (Google) <joel@joelfernandes.org>
+
+[ Upstream commit e752e5454e6417da3f40ec1306a041ea96c56423 ]
+
+During kexec on ARM device, we notice that device_shutdown() only calls
+pm_runtime_force_suspend() while shutting down the GPU. This means the GPU
+kthread is still running and further, there maybe active submits.
+
+This causes all kinds of issues during a kexec reboot:
+
+Warning from shutdown path:
+
+[  292.509662] WARNING: CPU: 0 PID: 6304 at [...] adreno_runtime_suspend+0x3c/0x44
+[  292.509863] Hardware name: Google Lazor (rev3 - 8) with LTE (DT)
+[  292.509872] pstate: 80400009 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
+[  292.509881] pc : adreno_runtime_suspend+0x3c/0x44
+[  292.509891] lr : pm_generic_runtime_suspend+0x30/0x44
+[  292.509905] sp : ffffffc014473bf0
+[...]
+[  292.510043] Call trace:
+[  292.510051]  adreno_runtime_suspend+0x3c/0x44
+[  292.510061]  pm_generic_runtime_suspend+0x30/0x44
+[  292.510071]  pm_runtime_force_suspend+0x54/0xc8
+[  292.510081]  adreno_shutdown+0x1c/0x28
+[  292.510090]  platform_shutdown+0x2c/0x38
+[  292.510104]  device_shutdown+0x158/0x210
+[  292.510119]  kernel_restart_prepare+0x40/0x4c
+
+And here from GPU kthread, an SError OOPs:
+
+[  192.648789]  el1h_64_error+0x7c/0x80
+[  192.648812]  el1_interrupt+0x20/0x58
+[  192.648833]  el1h_64_irq_handler+0x18/0x24
+[  192.648854]  el1h_64_irq+0x7c/0x80
+[  192.648873]  local_daif_inherit+0x10/0x18
+[  192.648900]  el1h_64_sync_handler+0x48/0xb4
+[  192.648921]  el1h_64_sync+0x7c/0x80
+[  192.648941]  a6xx_gmu_set_oob+0xbc/0x1fc
+[  192.648968]  a6xx_hw_init+0x44/0xe38
+[  192.648991]  msm_gpu_hw_init+0x48/0x80
+[  192.649013]  msm_gpu_submit+0x5c/0x1a8
+[  192.649034]  msm_job_run+0xb0/0x11c
+[  192.649058]  drm_sched_main+0x170/0x434
+[  192.649086]  kthread+0x134/0x300
+[  192.649114]  ret_from_fork+0x10/0x20
+
+Fix by calling adreno_system_suspend() in the device_shutdown() path.
+
+[ Applied Rob Clark feedback on fixing adreno_unbind() similarly, also
+  tested as above. ]
+
+Cc: Rob Clark <robdclark@chromium.org>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Cc: Ricardo Ribalda <ribalda@chromium.org>
+Cc: Ross Zwisler <zwisler@kernel.org>
+Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
+Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
+Reviewed-by: Rob Clark <robdclark@gmail.com>
+Patchwork: https://patchwork.freedesktop.org/patch/517633/
+Link: https://lore.kernel.org/r/20230109222547.1368644-1-joel@joelfernandes.org
+Signed-off-by: Rob Clark <robdclark@chromium.org>
+Stable-dep-of: 6153c44392b0 ("drm/msm/adreno: fix runtime PM imbalance at unbind")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/adreno/adreno_device.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
+index 628806423f7d2..36f062c7582f9 100644
+--- a/drivers/gpu/drm/msm/adreno/adreno_device.c
++++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
+@@ -551,13 +551,14 @@ static int adreno_bind(struct device *dev, struct device *master, void *data)
+       return 0;
+ }
++static int adreno_system_suspend(struct device *dev);
+ static void adreno_unbind(struct device *dev, struct device *master,
+               void *data)
+ {
+       struct msm_drm_private *priv = dev_get_drvdata(master);
+       struct msm_gpu *gpu = dev_to_gpu(dev);
+-      pm_runtime_force_suspend(dev);
++      WARN_ON_ONCE(adreno_system_suspend(dev));
+       gpu->funcs->destroy(gpu);
+       priv->gpu_pdev = NULL;
+@@ -609,7 +610,7 @@ static int adreno_remove(struct platform_device *pdev)
+ static void adreno_shutdown(struct platform_device *pdev)
+ {
+-      pm_runtime_force_suspend(&pdev->dev);
++      WARN_ON_ONCE(adreno_system_suspend(&pdev->dev));
+ }
+ static const struct of_device_id dt_match[] = {
+-- 
+2.39.2
+
diff --git a/queue-6.1/drm-amdgpu-soc21-add-video-cap-query-support-for-vcn.patch b/queue-6.1/drm-amdgpu-soc21-add-video-cap-query-support-for-vcn.patch
new file mode 100644 (file)
index 0000000..95a5841
--- /dev/null
@@ -0,0 +1,35 @@
+From 6246dc2fe71a080e6ea6f7db2e1bdb4c115087b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Mar 2023 19:33:53 +0530
+Subject: drm/amdgpu/soc21: Add video cap query support for VCN_4_0_4
+
+From: Veerabadhran Gopalakrishnan <veerabadhran.gopalakrishnan@amd.com>
+
+[ Upstream commit 6ce2ea07c5ff0a8188eab0e5cd1f0e4899b36835 ]
+
+Added the video capability query support for VCN version 4_0_4
+
+Signed-off-by: Veerabadhran Gopalakrishnan <veerabadhran.gopalakrishnan@amd.com>
+Reviewed-by: Leo Liu <leo.liu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: stable@vger.kernel.org # 6.1.x
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/soc21.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/soc21.c b/drivers/gpu/drm/amd/amdgpu/soc21.c
+index 61ee41aa8abb7..9c52af5005253 100644
+--- a/drivers/gpu/drm/amd/amdgpu/soc21.c
++++ b/drivers/gpu/drm/amd/amdgpu/soc21.c
+@@ -109,6 +109,7 @@ static int soc21_query_video_codecs(struct amdgpu_device *adev, bool encode,
+       switch (adev->ip_versions[UVD_HWIP][0]) {
+       case IP_VERSION(4, 0, 0):
+       case IP_VERSION(4, 0, 2):
++      case IP_VERSION(4, 0, 4):
+               if (adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0) {
+                       if (encode)
+                               *codecs = &vcn_4_0_0_video_codecs_encode_vcn1;
+-- 
+2.39.2
+
diff --git a/queue-6.1/drm-amdgpu-soc21-don-t-expose-av1-if-vcn0-is-harvest.patch b/queue-6.1/drm-amdgpu-soc21-don-t-expose-av1-if-vcn0-is-harvest.patch
new file mode 100644 (file)
index 0000000..bfd969b
--- /dev/null
@@ -0,0 +1,118 @@
+From f93f852a2db701dd337ed6b7ce471bd7601497fb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 13 Jan 2023 10:45:59 -0500
+Subject: drm/amdgpu/soc21: don't expose AV1 if VCN0 is harvested
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+[ Upstream commit a6de636eb04f146d23644dbbb7173e142452a9b7 ]
+
+Only VCN0 supports AV1.
+
+Reviewed-by: Leo Liu <leo.liu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Stable-dep-of: 6ce2ea07c5ff ("drm/amdgpu/soc21: Add video cap query support for VCN_4_0_4")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/soc21.c | 61 +++++++++++++++++++++++-------
+ 1 file changed, 48 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/soc21.c b/drivers/gpu/drm/amd/amdgpu/soc21.c
+index 00df439ed493d..61ee41aa8abb7 100644
+--- a/drivers/gpu/drm/amd/amdgpu/soc21.c
++++ b/drivers/gpu/drm/amd/amdgpu/soc21.c
+@@ -47,19 +47,31 @@
+ static const struct amd_ip_funcs soc21_common_ip_funcs;
+ /* SOC21 */
+-static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_encode_array[] =
++static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_encode_array_vcn0[] =
+ {
+       {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)},
+       {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)},
+ };
+-static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_encode =
++static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_encode_array_vcn1[] =
+ {
+-      .codec_count = ARRAY_SIZE(vcn_4_0_0_video_codecs_encode_array),
+-      .codec_array = vcn_4_0_0_video_codecs_encode_array,
++      {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)},
++      {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)},
++};
++
++static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_encode_vcn0 =
++{
++      .codec_count = ARRAY_SIZE(vcn_4_0_0_video_codecs_encode_array_vcn0),
++      .codec_array = vcn_4_0_0_video_codecs_encode_array_vcn0,
++};
++
++static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_encode_vcn1 =
++{
++      .codec_count = ARRAY_SIZE(vcn_4_0_0_video_codecs_encode_array_vcn1),
++      .codec_array = vcn_4_0_0_video_codecs_encode_array_vcn1,
+ };
+-static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_decode_array[] =
++static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_decode_array_vcn0[] =
+ {
+       {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4096, 52)},
+       {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)},
+@@ -68,23 +80,46 @@ static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_decode_array[
+       {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, 8192, 4352, 0)},
+ };
+-static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_decode =
++static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_decode_array_vcn1[] =
+ {
+-      .codec_count = ARRAY_SIZE(vcn_4_0_0_video_codecs_decode_array),
+-      .codec_array = vcn_4_0_0_video_codecs_decode_array,
++      {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4096, 52)},
++      {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)},
++      {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)},
++      {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)},
++};
++
++static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_decode_vcn0 =
++{
++      .codec_count = ARRAY_SIZE(vcn_4_0_0_video_codecs_decode_array_vcn0),
++      .codec_array = vcn_4_0_0_video_codecs_decode_array_vcn0,
++};
++
++static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_decode_vcn1 =
++{
++      .codec_count = ARRAY_SIZE(vcn_4_0_0_video_codecs_decode_array_vcn1),
++      .codec_array = vcn_4_0_0_video_codecs_decode_array_vcn1,
+ };
+ static int soc21_query_video_codecs(struct amdgpu_device *adev, bool encode,
+                                const struct amdgpu_video_codecs **codecs)
+ {
+-      switch (adev->ip_versions[UVD_HWIP][0]) {
++      if (adev->vcn.num_vcn_inst == hweight8(adev->vcn.harvest_config))
++              return -EINVAL;
++      switch (adev->ip_versions[UVD_HWIP][0]) {
+       case IP_VERSION(4, 0, 0):
+       case IP_VERSION(4, 0, 2):
+-              if (encode)
+-                      *codecs = &vcn_4_0_0_video_codecs_encode;
+-              else
+-                      *codecs = &vcn_4_0_0_video_codecs_decode;
++              if (adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0) {
++                      if (encode)
++                              *codecs = &vcn_4_0_0_video_codecs_encode_vcn1;
++                      else
++                              *codecs = &vcn_4_0_0_video_codecs_decode_vcn1;
++              } else {
++                      if (encode)
++                              *codecs = &vcn_4_0_0_video_codecs_encode_vcn0;
++                      else
++                              *codecs = &vcn_4_0_0_video_codecs_decode_vcn0;
++              }
+               return 0;
+       default:
+               return -EINVAL;
+-- 
+2.39.2
+
diff --git a/queue-6.1/drm-msm-adreno-fix-runtime-pm-imbalance-at-unbind.patch b/queue-6.1/drm-msm-adreno-fix-runtime-pm-imbalance-at-unbind.patch
new file mode 100644 (file)
index 0000000..ffd7e94
--- /dev/null
@@ -0,0 +1,52 @@
+From 7ad70c02c9a608a45827d7bbb6a0c969f3b1d4f7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 21 Feb 2023 11:14:27 +0100
+Subject: drm/msm/adreno: fix runtime PM imbalance at unbind
+
+From: Johan Hovold <johan+linaro@kernel.org>
+
+[ Upstream commit 6153c44392b04ff2da1e9aa82ba87da9ab9a0fc1 ]
+
+A recent commit moved enabling of runtime PM from adreno_gpu_init() to
+adreno_load_gpu() (called on first open()), which means that unbind()
+may now be called with runtime PM disabled in case the device was never
+opened in between.
+
+Make sure to only forcibly suspend and disable runtime PM at unbind() in
+case runtime PM has been enabled to prevent a disable count imbalance.
+
+This specifically avoids leaving runtime PM disabled when the device
+is later opened after a successful bind:
+
+       msm_dpu ae01000.display-controller: [drm:adreno_load_gpu [msm]] *ERROR* Couldn't power up the GPU: -13
+
+Fixes: 4b18299b3365 ("drm/msm/adreno: Defer enabling runpm until hw_init()")
+Reported-by: Bjorn Andersson <quic_bjorande@quicinc.com>
+Link: https://lore.kernel.org/lkml/20230203181245.3523937-1-quic_bjorande@quicinc.com
+Cc: stable@vger.kernel.org     # 6.0
+Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
+Patchwork: https://patchwork.freedesktop.org/patch/523549/
+Link: https://lore.kernel.org/r/20230221101430.14546-2-johan+linaro@kernel.org
+Signed-off-by: Rob Clark <robdclark@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/adreno/adreno_device.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
+index 36f062c7582f9..c5c4c93b3689c 100644
+--- a/drivers/gpu/drm/msm/adreno/adreno_device.c
++++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
+@@ -558,7 +558,8 @@ static void adreno_unbind(struct device *dev, struct device *master,
+       struct msm_drm_private *priv = dev_get_drvdata(master);
+       struct msm_gpu *gpu = dev_to_gpu(dev);
+-      WARN_ON_ONCE(adreno_system_suspend(dev));
++      if (pm_runtime_enabled(dev))
++              WARN_ON_ONCE(adreno_system_suspend(dev));
+       gpu->funcs->destroy(gpu);
+       priv->gpu_pdev = NULL;
+-- 
+2.39.2
+
index bb22bfb3629eacb73984e85696db8a804de4f7bf..ca5f29d9d6281ed1952a6337e1b2e0e47ec984ae 100644 (file)
@@ -113,3 +113,9 @@ riscv-use-read_once_nocheck-in-imprecise-unwinding-s.patch
 risc-v-don-t-check-text_mutex-during-stop_machine.patch
 drm-amdgpu-fix-return-value-check-in-kfd.patch
 ext4-fix-deadlock-during-directory-rename.patch
+drm-amdgpu-soc21-don-t-expose-av1-if-vcn0-is-harvest.patch
+drm-amdgpu-soc21-add-video-cap-query-support-for-vcn.patch
+adreno-shutdown-the-gpu-properly.patch
+drm-msm-adreno-fix-runtime-pm-imbalance-at-unbind.patch
+watch_queue-fix-ioc_watch_queue_set_size-alloc-error.patch
+tpm-eventlog-don-t-abort-tpm_read_log-on-faulty-acpi.patch
diff --git a/queue-6.1/tpm-eventlog-don-t-abort-tpm_read_log-on-faulty-acpi.patch b/queue-6.1/tpm-eventlog-don-t-abort-tpm_read_log-on-faulty-acpi.patch
new file mode 100644 (file)
index 0000000..18333f6
--- /dev/null
@@ -0,0 +1,73 @@
+From 00f59c85cc216f1b5141febb74eee41cd9c57f3b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Feb 2023 10:25:52 +0100
+Subject: tpm/eventlog: Don't abort tpm_read_log on faulty ACPI address
+
+From: Morten Linderud <morten@linderud.pw>
+
+[ Upstream commit 80a6c216b16d7f5c584d2148c2e4345ea4eb06ce ]
+
+tpm_read_log_acpi() should return -ENODEV when no eventlog from the ACPI
+table is found. If the firmware vendor includes an invalid log address
+we are unable to map from the ACPI memory and tpm_read_log() returns -EIO
+which would abort discovery of the eventlog.
+
+Change the return value from -EIO to -ENODEV when acpi_os_map_iomem()
+fails to map the event log.
+
+The following hardware was used to test this issue:
+    Framework Laptop (Pre-production)
+    BIOS: INSYDE Corp, Revision: 3.2
+    TPM Device: NTC, Firmware Revision: 7.2
+
+Dump of the faulty ACPI TPM2 table:
+    [000h 0000   4]                    Signature : "TPM2"    [Trusted Platform Module hardware interface Table]
+    [004h 0004   4]                 Table Length : 0000004C
+    [008h 0008   1]                     Revision : 04
+    [009h 0009   1]                     Checksum : 2B
+    [00Ah 0010   6]                       Oem ID : "INSYDE"
+    [010h 0016   8]                 Oem Table ID : "TGL-ULT"
+    [018h 0024   4]                 Oem Revision : 00000002
+    [01Ch 0028   4]              Asl Compiler ID : "ACPI"
+    [020h 0032   4]        Asl Compiler Revision : 00040000
+
+    [024h 0036   2]               Platform Class : 0000
+    [026h 0038   2]                     Reserved : 0000
+    [028h 0040   8]              Control Address : 0000000000000000
+    [030h 0048   4]                 Start Method : 06 [Memory Mapped I/O]
+
+    [034h 0052  12]            Method Parameters : 00 00 00 00 00 00 00 00 00 00 00 00
+    [040h 0064   4]           Minimum Log Length : 00010000
+    [044h 0068   8]                  Log Address : 000000004053D000
+
+Fixes: 0cf577a03f21 ("tpm: Fix handling of missing event log")
+Tested-by: Erkki Eilonen <erkki@bearmetal.eu>
+Signed-off-by: Morten Linderud <morten@linderud.pw>
+Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
+Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/char/tpm/eventlog/acpi.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/char/tpm/eventlog/acpi.c b/drivers/char/tpm/eventlog/acpi.c
+index 0913d3eb8d518..cd266021d0103 100644
+--- a/drivers/char/tpm/eventlog/acpi.c
++++ b/drivers/char/tpm/eventlog/acpi.c
+@@ -143,8 +143,12 @@ int tpm_read_log_acpi(struct tpm_chip *chip)
+       ret = -EIO;
+       virt = acpi_os_map_iomem(start, len);
+-      if (!virt)
++      if (!virt) {
++              dev_warn(&chip->dev, "%s: Failed to map ACPI memory\n", __func__);
++              /* try EFI log next */
++              ret = -ENODEV;
+               goto err;
++      }
+       memcpy_fromio(log->bios_event_log, virt, len);
+-- 
+2.39.2
+
diff --git a/queue-6.1/watch_queue-fix-ioc_watch_queue_set_size-alloc-error.patch b/queue-6.1/watch_queue-fix-ioc_watch_queue_set_size-alloc-error.patch
new file mode 100644 (file)
index 0000000..979119c
--- /dev/null
@@ -0,0 +1,39 @@
+From 2e463090efdcab0b490541161574c1075a42950a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 Mar 2023 16:21:06 +0100
+Subject: watch_queue: fix IOC_WATCH_QUEUE_SET_SIZE alloc error paths
+
+From: David Disseldorp <ddiss@suse.de>
+
+[ Upstream commit 03e1d60e177eedbd302b77af4ea5e21b5a7ade31 ]
+
+The watch_queue_set_size() allocation error paths return the ret value
+set via the prior pipe_resize_ring() call, which will always be zero.
+
+As a result, IOC_WATCH_QUEUE_SET_SIZE callers such as "keyctl watch"
+fail to detect kernel wqueue->notes allocation failures and proceed to
+KEYCTL_WATCH_KEY, with any notifications subsequently lost.
+
+Fixes: c73be61cede58 ("pipe: Add general notification queue support")
+Signed-off-by: David Disseldorp <ddiss@suse.de>
+Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/watch_queue.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c
+index a6f9bdd956c39..f10f403104e7d 100644
+--- a/kernel/watch_queue.c
++++ b/kernel/watch_queue.c
+@@ -273,6 +273,7 @@ long watch_queue_set_size(struct pipe_inode_info *pipe, unsigned int nr_notes)
+       if (ret < 0)
+               goto error;
++      ret = -ENOMEM;
+       pages = kcalloc(sizeof(struct page *), nr_pages, GFP_KERNEL);
+       if (!pages)
+               goto error;
+-- 
+2.39.2
+