From 4d1db3083ca7a6afa2ae4597aa93fdc35b066f2d Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Sat, 7 Jan 2023 14:51:06 +0100 Subject: [PATCH] backport some fixes-fixes from v6.1.4 found with git log --decorate v5.16^..v6.1.4 -- Makefile kernel/ secuirty drivers/ fs \ block mm net virt/ ipc init arch/x86/ | ~/gitdm/stablefixes \ --fixed-after v6.1.2 --regressed-before v6.1.2 Signed-off-by: Thomas Lamprecht --- ...00-Fix-PLL-setup-for-G200_SE_A-rev-4.patch | 47 +++++ ...emap-expanding-vma-with-addr-inside-.patch | 59 ++++++ ...-memory-leak-in-set_mempolicy_home_n.patch | 54 +++++ ...Force-AMD-GUID-_REV-2-on-HP-Eliteboo.patch | 64 ++++++ ...Stop-using-AMD-specific-codepath-for.patch | 190 ++++++++++++++++++ 5 files changed, 414 insertions(+) create mode 100644 patches/kernel/0018-drm-mgag200-Fix-PLL-setup-for-G200_SE_A-rev-4.patch create mode 100644 patches/kernel/0019-mm-mremap-fix-mremap-expanding-vma-with-addr-inside-.patch create mode 100644 patches/kernel/0020-mm-mempolicy-fix-memory-leak-in-set_mempolicy_home_n.patch create mode 100644 patches/kernel/0021-ACPI-x86-s2idle-Force-AMD-GUID-_REV-2-on-HP-Eliteboo.patch create mode 100644 patches/kernel/0022-ACPI-x86-s2idle-Stop-using-AMD-specific-codepath-for.patch diff --git a/patches/kernel/0018-drm-mgag200-Fix-PLL-setup-for-G200_SE_A-rev-4.patch b/patches/kernel/0018-drm-mgag200-Fix-PLL-setup-for-G200_SE_A-rev-4.patch new file mode 100644 index 0000000..2dfcacb --- /dev/null +++ b/patches/kernel/0018-drm-mgag200-Fix-PLL-setup-for-G200_SE_A-rev-4.patch @@ -0,0 +1,47 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jocelyn Falempe +Date: Thu, 13 Oct 2022 15:28:10 +0200 +Subject: [PATCH] drm/mgag200: Fix PLL setup for G200_SE_A rev >=4 + +commit b389286d0234e1edbaf62ed8bc0892a568c33662 upstream. + +For G200_SE_A, PLL M setting is wrong, which leads to blank screen, +or "signal out of range" on VGA display. +previous code had "m |= 0x80" which was changed to +m |= ((pixpllcn & BIT(8)) >> 1); + +Tested on G200_SE_A rev 42 + +This line of code was moved to another file with +commit 877507bb954e ("drm/mgag200: Provide per-device callbacks for +PIXPLLC") but can be easily backported before this commit. + +v2: * put BIT(7) First to respect MSB-to-LSB (Thomas) + * Add a comment to explain that this bit must be set (Thomas) + +Fixes: 2dd040946ecf ("drm/mgag200: Store values (not bits) in struct mgag200_pll_values") +Cc: stable@vger.kernel.org +Signed-off-by: Jocelyn Falempe +Reviewed-by: Thomas Zimmermann +Link: https://patchwork.freedesktop.org/patch/msgid/20221013132810.521945-1-jfalempe@redhat.com +Signed-off-by: Greg Kroah-Hartman +(cherry picked from commit 3650c063f22d03795026bd6f3d473e5bbdabb442) +Signed-off-by: Thomas Lamprecht +--- + drivers/gpu/drm/mgag200/mgag200_g200se.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/mgag200/mgag200_g200se.c b/drivers/gpu/drm/mgag200/mgag200_g200se.c +index be389ed91cbd..bd6e573c9a1a 100644 +--- a/drivers/gpu/drm/mgag200/mgag200_g200se.c ++++ b/drivers/gpu/drm/mgag200/mgag200_g200se.c +@@ -284,7 +284,8 @@ static void mgag200_g200se_04_pixpllc_atomic_update(struct drm_crtc *crtc, + pixpllcp = pixpllc->p - 1; + pixpllcs = pixpllc->s; + +- xpixpllcm = pixpllcm | ((pixpllcn & BIT(8)) >> 1); ++ // For G200SE A, BIT(7) should be set unconditionally. ++ xpixpllcm = BIT(7) | pixpllcm; + xpixpllcn = pixpllcn; + xpixpllcp = (pixpllcs << 3) | pixpllcp; + diff --git a/patches/kernel/0019-mm-mremap-fix-mremap-expanding-vma-with-addr-inside-.patch b/patches/kernel/0019-mm-mremap-fix-mremap-expanding-vma-with-addr-inside-.patch new file mode 100644 index 0000000..f7fb8c0 --- /dev/null +++ b/patches/kernel/0019-mm-mremap-fix-mremap-expanding-vma-with-addr-inside-.patch @@ -0,0 +1,59 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Vlastimil Babka +Date: Fri, 16 Dec 2022 17:32:27 +0100 +Subject: [PATCH] mm, mremap: fix mremap() expanding vma with addr inside vma +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit 6f12be792fde994ed934168f93c2a0d2a0cf0bc5 upstream. + +Since 6.1 we have noticed random rpm install failures that were tracked to +mremap() returning -ENOMEM and to commit ca3d76b0aa80 ("mm: add merging +after mremap resize"). + +The problem occurs when mremap() expands a VMA in place, but using an +starting address that's not vma->vm_start, but somewhere in the middle. +The extension_pgoff calculation introduced by the commit is wrong in that +case, so vma_merge() fails due to pgoffs not being compatible. Fix the +calculation. + +By the way it seems that the situations, where rpm now expands a vma from +the middle, were made possible also due to that commit, thanks to the +improved vma merging. Yet it should work just fine, except for the buggy +calculation. + +Link: https://lkml.kernel.org/r/20221216163227.24648-1-vbabka@suse.cz +Reported-by: Jiri Slaby + Link: https://bugzilla.suse.com/show_bug.cgi?id=1206359 +Fixes: ca3d76b0aa80 ("mm: add merging after mremap resize") +Signed-off-by: Vlastimil Babka +Cc: Jakub Matěna +Cc: "Kirill A . Shutemov" +Cc: Liam Howlett +Cc: Matthew Wilcox +Cc: Mel Gorman +Cc: Michal Hocko +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +(cherry picked from commit 4d528dab403ba45db24769f5e5a9514ab0890351) +Signed-off-by: Thomas Lamprecht +--- + mm/mremap.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/mm/mremap.c b/mm/mremap.c +index e465ffe279bb..fe587c5d6591 100644 +--- a/mm/mremap.c ++++ b/mm/mremap.c +@@ -1016,7 +1016,8 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, + long pages = (new_len - old_len) >> PAGE_SHIFT; + unsigned long extension_start = addr + old_len; + unsigned long extension_end = addr + new_len; +- pgoff_t extension_pgoff = vma->vm_pgoff + (old_len >> PAGE_SHIFT); ++ pgoff_t extension_pgoff = vma->vm_pgoff + ++ ((extension_start - vma->vm_start) >> PAGE_SHIFT); + + if (vma->vm_flags & VM_ACCOUNT) { + if (security_vm_enough_memory_mm(mm, pages)) { diff --git a/patches/kernel/0020-mm-mempolicy-fix-memory-leak-in-set_mempolicy_home_n.patch b/patches/kernel/0020-mm-mempolicy-fix-memory-leak-in-set_mempolicy_home_n.patch new file mode 100644 index 0000000..e37472b --- /dev/null +++ b/patches/kernel/0020-mm-mempolicy-fix-memory-leak-in-set_mempolicy_home_n.patch @@ -0,0 +1,54 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Mathieu Desnoyers +Date: Thu, 15 Dec 2022 14:46:21 -0500 +Subject: [PATCH] mm/mempolicy: fix memory leak in set_mempolicy_home_node + system call + +commit 38ce7c9bdfc228c14d7621ba36d3eebedd9d4f76 upstream. + +When encountering any vma in the range with policy other than MPOL_BIND or +MPOL_PREFERRED_MANY, an error is returned without issuing a mpol_put on +the policy just allocated with mpol_dup(). + +This allows arbitrary users to leak kernel memory. + +Link: https://lkml.kernel.org/r/20221215194621.202816-1-mathieu.desnoyers@efficios.com +Fixes: c6018b4b2549 ("mm/mempolicy: add set_mempolicy_home_node syscall") +Signed-off-by: Mathieu Desnoyers +Reviewed-by: Randy Dunlap +Reviewed-by: "Huang, Ying" +Reviewed-by: Aneesh Kumar K.V +Acked-by: Michal Hocko +Cc: Aneesh Kumar K.V +Cc: Dave Hansen +Cc: Feng Tang +Cc: Michal Hocko +Cc: Andrea Arcangeli +Cc: Mel Gorman +Cc: Mike Kravetz +Cc: Randy Dunlap +Cc: Vlastimil Babka +Cc: Andi Kleen +Cc: Dan Williams +Cc: Huang Ying +Cc: [5.17+] +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +(cherry picked from commit 0ce4cc6d269ddc448a825955b495f662f5d9e153) +Signed-off-by: Thomas Lamprecht +--- + mm/mempolicy.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/mm/mempolicy.c b/mm/mempolicy.c +index 61aa9aedb728..02c8a712282f 100644 +--- a/mm/mempolicy.c ++++ b/mm/mempolicy.c +@@ -1540,6 +1540,7 @@ SYSCALL_DEFINE4(set_mempolicy_home_node, unsigned long, start, unsigned long, le + * the home node for vmas we already updated before. + */ + if (new->mode != MPOL_BIND && new->mode != MPOL_PREFERRED_MANY) { ++ mpol_put(new); + err = -EOPNOTSUPP; + break; + } diff --git a/patches/kernel/0021-ACPI-x86-s2idle-Force-AMD-GUID-_REV-2-on-HP-Eliteboo.patch b/patches/kernel/0021-ACPI-x86-s2idle-Force-AMD-GUID-_REV-2-on-HP-Eliteboo.patch new file mode 100644 index 0000000..6c80511 --- /dev/null +++ b/patches/kernel/0021-ACPI-x86-s2idle-Force-AMD-GUID-_REV-2-on-HP-Eliteboo.patch @@ -0,0 +1,64 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Mario Limonciello +Date: Thu, 15 Dec 2022 13:16:15 -0600 +Subject: [PATCH] ACPI: x86: s2idle: Force AMD GUID/_REV 2 on HP Elitebook 865 + +commit 3ea45390e9c0d35805ef8357ace55594fd4233d0 upstream. + +HP Elitebook 865 supports both the AMD GUID w/ _REV 2 and Microsoft +GUID with _REV 0. Both have very similar code but the AMD GUID +has a special workaround that is specific to a problem with +spurious wakeups on systems with Qualcomm WLAN. + +This is believed to be a bug in the Qualcomm WLAN F/W (it doesn't +affect any other WLAN H/W). If this WLAN firmware is fixed this +quirk can be dropped. + +Cc: stable@vger.kernel.org # 6.1 +Signed-off-by: Mario Limonciello +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman +(cherry picked from commit 577821f756cf3dfd308906d38610db178268841a) +Signed-off-by: Thomas Lamprecht +--- + drivers/acpi/x86/s2idle.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c +index 5350c73564b6..422415cb14f4 100644 +--- a/drivers/acpi/x86/s2idle.c ++++ b/drivers/acpi/x86/s2idle.c +@@ -401,6 +401,13 @@ static const struct acpi_device_id amd_hid_ids[] = { + {} + }; + ++static int lps0_prefer_amd(const struct dmi_system_id *id) ++{ ++ pr_debug("Using AMD GUID w/ _REV 2.\n"); ++ rev_id = 2; ++ return 0; ++} ++ + static int lps0_prefer_microsoft(const struct dmi_system_id *id) + { + pr_debug("Preferring Microsoft GUID.\n"); +@@ -462,6 +469,19 @@ static const struct dmi_system_id s2idle_dmi_table[] __initconst = { + DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow X16 GV601"), + }, + }, ++ { ++ /* ++ * AMD Rembrandt based HP EliteBook 835/845/865 G9 ++ * Contains specialized AML in AMD/_REV 2 path to avoid ++ * triggering a bug in Qualcomm WLAN firmware. This may be ++ * removed in the future if that firmware is fixed. ++ */ ++ .callback = lps0_prefer_amd, ++ .matches = { ++ DMI_MATCH(DMI_BOARD_VENDOR, "HP"), ++ DMI_MATCH(DMI_BOARD_NAME, "8990"), ++ }, ++ }, + {} + }; + diff --git a/patches/kernel/0022-ACPI-x86-s2idle-Stop-using-AMD-specific-codepath-for.patch b/patches/kernel/0022-ACPI-x86-s2idle-Stop-using-AMD-specific-codepath-for.patch new file mode 100644 index 0000000..e127075 --- /dev/null +++ b/patches/kernel/0022-ACPI-x86-s2idle-Stop-using-AMD-specific-codepath-for.patch @@ -0,0 +1,190 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Mario Limonciello +Date: Thu, 15 Dec 2022 13:16:16 -0600 +Subject: [PATCH] ACPI: x86: s2idle: Stop using AMD specific codepath for + Rembrandt+ + +commit e555c85792bd5f9828a2fd2ca9761f70efb1c77b upstream. + +After we introduced a module parameter and quirk infrastructure for +picking the Microsoft GUID over the SOC vendor GUID we discovered +that lots and lots of systems are getting this wrong. + +The table continues to grow, and is becoming unwieldy. + +We don't really have any benefit to forcing vendors to populate the +AMD GUID. This is just extra work, and more and more vendors seem +to mess it up. As the Microsoft GUID is used by Windows as well, +it's very likely that it won't be messed up like this. + +So drop all the quirks forcing it and the Rembrandt behavior. This +means that Cezanne or later effectively only run the Microsoft GUID +codepath with the exception of HP Elitebook 8*5 G9. + +Fixes: fd894f05cf30 ("ACPI: x86: s2idle: If a new AMD _HID is missing assume Rembrandt") +Cc: stable@vger.kernel.org # 6.1 +Reported-by: Benjamin Cheng +Reported-by: bilkow@tutanota.com +Reported-by: Paul +Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2292 +Link: https://bugzilla.kernel.org/show_bug.cgi?id=216768 +Signed-off-by: Mario Limonciello +Reviewed-by: Philipp Zabel +Tested-by: Philipp Zabel +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman +(cherry picked from commit e6d180a35bc0efd614b0df45f92a08550143555d) +Signed-off-by: Thomas Lamprecht +--- + drivers/acpi/x86/s2idle.c | 87 ++------------------------------------- + 1 file changed, 3 insertions(+), 84 deletions(-) + +diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c +index 422415cb14f4..c7afce465a07 100644 +--- a/drivers/acpi/x86/s2idle.c ++++ b/drivers/acpi/x86/s2idle.c +@@ -28,10 +28,6 @@ static bool sleep_no_lps0 __read_mostly; + module_param(sleep_no_lps0, bool, 0644); + MODULE_PARM_DESC(sleep_no_lps0, "Do not use the special LPS0 device interface"); + +-static bool prefer_microsoft_dsm_guid __read_mostly; +-module_param(prefer_microsoft_dsm_guid, bool, 0644); +-MODULE_PARM_DESC(prefer_microsoft_dsm_guid, "Prefer using Microsoft GUID in LPS0 device _DSM evaluation"); +- + static const struct acpi_device_id lps0_device_ids[] = { + {"PNP0D80", }, + {"", }, +@@ -369,27 +365,15 @@ static int validate_dsm(acpi_handle handle, const char *uuid, int rev, guid_t *d + } + + struct amd_lps0_hid_device_data { +- const unsigned int rev_id; + const bool check_off_by_one; +- const bool prefer_amd_guid; + }; + + static const struct amd_lps0_hid_device_data amd_picasso = { +- .rev_id = 0, + .check_off_by_one = true, +- .prefer_amd_guid = false, + }; + + static const struct amd_lps0_hid_device_data amd_cezanne = { +- .rev_id = 0, + .check_off_by_one = false, +- .prefer_amd_guid = false, +-}; +- +-static const struct amd_lps0_hid_device_data amd_rembrandt = { +- .rev_id = 2, +- .check_off_by_one = false, +- .prefer_amd_guid = true, + }; + + static const struct acpi_device_id amd_hid_ids[] = { +@@ -397,7 +381,6 @@ static const struct acpi_device_id amd_hid_ids[] = { + {"AMD0005", (kernel_ulong_t)&amd_picasso, }, + {"AMDI0005", (kernel_ulong_t)&amd_picasso, }, + {"AMDI0006", (kernel_ulong_t)&amd_cezanne, }, +- {"AMDI0007", (kernel_ulong_t)&amd_rembrandt, }, + {} + }; + +@@ -407,68 +390,7 @@ static int lps0_prefer_amd(const struct dmi_system_id *id) + rev_id = 2; + return 0; + } +- +-static int lps0_prefer_microsoft(const struct dmi_system_id *id) +-{ +- pr_debug("Preferring Microsoft GUID.\n"); +- prefer_microsoft_dsm_guid = true; +- return 0; +-} +- + static const struct dmi_system_id s2idle_dmi_table[] __initconst = { +- { +- /* +- * ASUS TUF Gaming A17 FA707RE +- * https://bugzilla.kernel.org/show_bug.cgi?id=216101 +- */ +- .callback = lps0_prefer_microsoft, +- .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "ASUS TUF Gaming A17"), +- }, +- }, +- { +- /* ASUS ROG Zephyrus G14 (2022) */ +- .callback = lps0_prefer_microsoft, +- .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "ROG Zephyrus G14 GA402"), +- }, +- }, +- { +- /* +- * Lenovo Yoga Slim 7 Pro X 14ARH7 +- * https://bugzilla.kernel.org/show_bug.cgi?id=216473 : 82V2 +- * https://bugzilla.kernel.org/show_bug.cgi?id=216438 : 82TL +- */ +- .callback = lps0_prefer_microsoft, +- .matches = { +- DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), +- DMI_MATCH(DMI_PRODUCT_NAME, "82"), +- }, +- }, +- { +- /* +- * ASUSTeK COMPUTER INC. ROG Flow X13 GV301RE_GV301RE +- * https://gitlab.freedesktop.org/drm/amd/-/issues/2148 +- */ +- .callback = lps0_prefer_microsoft, +- .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow X13 GV301"), +- }, +- }, +- { +- /* +- * ASUSTeK COMPUTER INC. ROG Flow X16 GV601RW_GV601RW +- * https://gitlab.freedesktop.org/drm/amd/-/issues/2148 +- */ +- .callback = lps0_prefer_microsoft, +- .matches = { +- DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +- DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow X16 GV601"), +- }, +- }, + { + /* + * AMD Rembrandt based HP EliteBook 835/845/865 G9 +@@ -504,16 +426,14 @@ static int lps0_device_attach(struct acpi_device *adev, + if (dev_id->id[0]) + data = (const struct amd_lps0_hid_device_data *) dev_id->driver_data; + else +- data = &amd_rembrandt; +- rev_id = data->rev_id; ++ data = &amd_cezanne; + lps0_dsm_func_mask = validate_dsm(adev->handle, + ACPI_LPS0_DSM_UUID_AMD, rev_id, &lps0_dsm_guid); + if (lps0_dsm_func_mask > 0x3 && data->check_off_by_one) { + lps0_dsm_func_mask = (lps0_dsm_func_mask << 1) | 0x1; + acpi_handle_debug(adev->handle, "_DSM UUID %s: Adjusted function mask: 0x%x\n", + ACPI_LPS0_DSM_UUID_AMD, lps0_dsm_func_mask); +- } else if (lps0_dsm_func_mask_microsoft > 0 && data->prefer_amd_guid && +- !prefer_microsoft_dsm_guid) { ++ } else if (lps0_dsm_func_mask_microsoft > 0 && rev_id) { + lps0_dsm_func_mask_microsoft = -EINVAL; + acpi_handle_debug(adev->handle, "_DSM Using AMD method\n"); + } +@@ -521,8 +441,7 @@ static int lps0_device_attach(struct acpi_device *adev, + rev_id = 1; + lps0_dsm_func_mask = validate_dsm(adev->handle, + ACPI_LPS0_DSM_UUID, rev_id, &lps0_dsm_guid); +- if (!prefer_microsoft_dsm_guid) +- lps0_dsm_func_mask_microsoft = -EINVAL; ++ lps0_dsm_func_mask_microsoft = -EINVAL; + } + + if (lps0_dsm_func_mask < 0 && lps0_dsm_func_mask_microsoft < 0) -- 2.39.2