[OpenWrt-Devel] [RFC PATCH] kernel: drop MIPS: fix cache flushing for highmem pages

Rosen Penev rosenp at gmail.com
Tue Dec 18 11:43:29 EST 2018


On Tue, Dec 18, 2018 at 2:35 AM Kevin 'ldir' Darbyshire-Bryant
<ldir at darbyshire-bryant.me.uk> wrote:
>
> Signed-off-by: Kevin Darbyshire-Bryant <ldir at darbyshire-bryant.me.uk>
> ---
>
> This patch, in a variety of forms, has been around since beginning 2016
> as e756c2bb07, ending up in present form 0aa6c7df60 (kernel 4.4.13 bump)
> and carried forward ever since.
>
> There have been a number of MIPS kernel memory handling changes since,
> including VDSO fixes that meant openwrt patches have been dropped with
> no apparent fallout.
>
> I'm basically wondering if this patch needs to still exist in the kernel
> 4.14.88 world?  I have been running without this patch for 3+ months on
> Archer C7 v2 with no obvious ill effects (I'd expect to see "nasty
> segfaults and kernel crashes")
>
> If it does still need to exist, should it go upstream?
>
> Thoughts, comments, more testers?
I've tested removing the patch on a 512MB mt7621 device where HIGHMEM
is used for the second 256MB. No issues.
>
>
>  ...fix-cache-flushing-for-highmem-pages.patch | 30 -------------------
>  1 file changed, 30 deletions(-)
>  delete mode 100644 target/linux/generic/pending-4.14/100-MIPS-fix-cache-flushing-for-highmem-pages.patch
>
> diff --git a/target/linux/generic/pending-4.14/100-MIPS-fix-cache-flushing-for-highmem-pages.patch b/target/linux/generic/pending-4.14/100-MIPS-fix-cache-flushing-for-highmem-pages.patch
> deleted file mode 100644
> index b1c65f7cd8..0000000000
> --- a/target/linux/generic/pending-4.14/100-MIPS-fix-cache-flushing-for-highmem-pages.patch
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -From: Felix Fietkau <nbd at nbd.name>
> -Subject: MIPS: fix cache flushing for highmem pages
> -
> -Most cache flush ops were no-op for highmem pages. This led to nasty
> -segfaults and (in the case of page_address(page) == NULL) kernel
> -crashes.
> -
> -Fix this by always flushing highmem pages using kmap/kunmap_atomic
> -around the actual cache flush. This might be a bit inefficient, but at
> -least it's stable.
> -
> -Signed-off-by: Felix Fietkau <nbd at nbd.name>
> ----
> -
> ---- a/arch/mips/mm/cache.c
> -+++ b/arch/mips/mm/cache.c
> -@@ -116,6 +116,13 @@ void __flush_anon_page(struct page *page
> - {
> -       unsigned long addr = (unsigned long) page_address(page);
> -
> -+      if (PageHighMem(page)) {
> -+              addr = (unsigned long)kmap_atomic(page);
> -+              flush_data_cache_page(addr);
> -+              __kunmap_atomic((void *)addr);
> -+              return;
> -+      }
> -+
> -       if (pages_do_alias(addr, vmaddr)) {
> -               if (page_mapcount(page) && !Page_dcache_dirty(page)) {
> -                       void *kaddr;
> --
> 2.17.2 (Apple Git-113)
>
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list