diff --git a/patches/kernel/0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch b/patches/kernel/0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch index c7fcb74..63bd832 100644 --- a/patches/kernel/0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch +++ b/patches/kernel/0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch @@ -54,7 +54,7 @@ Signed-off-by: Fabian Grünbichler 2 files changed, 110 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt -index 27ca3fbc47aa..5e3caff3fb49 100644 +index 2db36b52a4ff..9b7f4e3e6e30 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -2968,6 +2968,15 @@ @@ -74,7 +74,7 @@ index 27ca3fbc47aa..5e3caff3fb49 100644 Safety option to keep boot IRQs enabled. This should never be necessary. diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index 242040c87ce2..3926d5bf4d06 100644 +index 451fd28f1855..a928bd86e102 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -3702,6 +3702,106 @@ static int __init pci_apply_final_quirks(void) @@ -184,7 +184,7 @@ index 242040c87ce2..3926d5bf4d06 100644 /* * Following are device-specific reset methods which can be used to * reset a single function if other methods (e.g. FLR, PM D0->D3) are -@@ -4534,6 +4634,7 @@ static const struct pci_dev_acs_enabled { +@@ -4536,6 +4636,7 @@ static const struct pci_dev_acs_enabled { { PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs }, /* APM X-Gene */ { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs }, diff --git a/patches/kernel/0007-mm-shmem-do-not-wait-for-lock_page-in-shmem_unused_h.patch b/patches/kernel/0007-mm-shmem-do-not-wait-for-lock_page-in-shmem_unused_h.patch deleted file mode 100644 index 9d640ed..0000000 --- a/patches/kernel/0007-mm-shmem-do-not-wait-for-lock_page-in-shmem_unused_h.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: "Kirill A. Shutemov" -Date: Fri, 23 Mar 2018 09:19:21 +0100 -Subject: [PATCH] mm/shmem: do not wait for lock_page() in - shmem_unused_huge_shrink() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -shmem_unused_huge_shrink() gets called from reclaim path. Waiting for -page lock may lead to deadlock there. - -There was a bug report that may be attributed to this: - -http://lkml.kernel.org/r/alpine.LRH.2.11.1801242349220.30642@mail.ewheeler.net - -Replace lock_page() with trylock_page() and skip the page if we failed to -lock it. We will get to the page on the next scan. - -We can test for the PageTransHuge() outside the page lock as we only need -protection against splitting the page under us. Holding pin oni the page -is enough for this. - -Link: http://lkml.kernel.org/r/20180316210830.43738-1-kirill.shutemov@linux.intel.com -Fixes: 779750d20b93 ("shmem: split huge pages beyond i_size under memory pressure") -Signed-off-by: Kirill A. Shutemov -Reported-by: Eric Wheeler -Acked-by: Michal Hocko -Reviewed-by: Andrew Morton -Cc: Tetsuo Handa -Cc: Hugh Dickins -Cc: [4.8+] -Signed-off-by: Andrew Morton <> -(cherry-picked from https://git.kernel.org/pub/scm/linux/kernel/git/mhocko/mm.git/commit/?h=since-4.15&id=73eccc61c701ee7b4223aea2079542a712feeea7) -Signed-off-by: Fabian Grünbichler ---- - mm/shmem.c | 31 ++++++++++++++++++++----------- - 1 file changed, 20 insertions(+), 11 deletions(-) - -diff --git a/mm/shmem.c b/mm/shmem.c -index f6695c111086..800482fe6ed6 100644 ---- a/mm/shmem.c -+++ b/mm/shmem.c -@@ -497,36 +497,45 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo, - info = list_entry(pos, struct shmem_inode_info, shrinklist); - inode = &info->vfs_inode; - -- if (nr_to_split && split >= nr_to_split) { -- iput(inode); -- continue; -- } -+ if (nr_to_split && split >= nr_to_split) -+ goto leave; - -- page = find_lock_page(inode->i_mapping, -+ page = find_get_page(inode->i_mapping, - (inode->i_size & HPAGE_PMD_MASK) >> PAGE_SHIFT); - if (!page) - goto drop; - -+ /* No huge page at the end of the file: nothing to split */ - if (!PageTransHuge(page)) { -- unlock_page(page); - put_page(page); - goto drop; - } - -+ /* -+ * Leave the inode on the list if we failed to lock -+ * the page at this time. -+ * -+ * Waiting for the lock may lead to deadlock in the -+ * reclaim path. -+ */ -+ if (!trylock_page(page)) { -+ put_page(page); -+ goto leave; -+ } -+ - ret = split_huge_page(page); - unlock_page(page); - put_page(page); - -- if (ret) { -- /* split failed: leave it on the list */ -- iput(inode); -- continue; -- } -+ /* If split failed leave the inode on the list */ -+ if (ret) -+ goto leave; - - split++; - drop: - list_del_init(&info->shrinklist); - removed++; -+leave: - iput(inode); - } - --- -2.14.2 - diff --git a/patches/kernel/0007-mm-thp-Do-not-wait-for-lock_page-in-deferred_split_s.patch b/patches/kernel/0007-mm-thp-Do-not-wait-for-lock_page-in-deferred_split_s.patch deleted file mode 100644 index 9497533..0000000 --- a/patches/kernel/0007-mm-thp-Do-not-wait-for-lock_page-in-deferred_split_s.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: "Kirill A. Shutemov" -Date: Thu, 15 Mar 2018 18:07:47 +0300 -Subject: [PATCH] mm/thp: Do not wait for lock_page() in deferred_split_scan() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -deferred_split_scan() gets called from reclaim path. Waiting for page -lock may lead to deadlock there. - -Replace lock_page() with trylock_page() and skip the page if we failed -to lock it. We will get to the page on the next scan. - -Fixes: 9a982250f773 ("thp: introduce deferred_split_huge_page()") - -Signed-off-by: Kirill A. Shutemov -Acked-by: Michal Hocko -(cherry-picked from https://patchwork.kernel.org/patch/10284703/) -Signed-off-by: Fabian Grünbichler ---- - mm/huge_memory.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/mm/huge_memory.c b/mm/huge_memory.c -index 0e7ded98d114..4ed6c89e95c3 100644 ---- a/mm/huge_memory.c -+++ b/mm/huge_memory.c -@@ -2791,11 +2791,13 @@ static unsigned long deferred_split_scan(struct shrinker *shrink, - - list_for_each_safe(pos, next, &list) { - page = list_entry((void *)pos, struct page, mapping); -- lock_page(page); -+ if (!trylock_page(page)) -+ goto next; - /* split_huge_page() removes page from list on success */ - if (!split_huge_page(page)) - split++; - unlock_page(page); -+next: - put_page(page); - } - --- -2.14.2 -