aboutsummaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>2018-11-04 20:25:46 +0000
committerKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>2018-12-20 09:45:19 +0000
commit8ff0dd57bffbb1be5799be3ff049df34211669df (patch)
tree41d811b6b0a6190179234e56a0f3853c8388a5ab /target
parentc0248183a49a9830a4a2458e54e83fa8a3c646c9 (diff)
downloadupstream-8ff0dd57bffbb1be5799be3ff049df34211669df.tar.gz
upstream-8ff0dd57bffbb1be5799be3ff049df34211669df.tar.bz2
upstream-8ff0dd57bffbb1be5799be3ff049df34211669df.zip
kernel: drop MIPS fix cache flushing for highmem pages
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. Simple tests (ntfs-3g) on a HIGHMEM 512MB mt7621 device have not turned up data corruption issues which would otherwise be expected. Similarly running on other MIPS based devices for the past 2 months hasn't turned up anything obvious to retain this out of tree patch. With thanks to Rosen Penev for testing on the known 'highmem' device and Felix Fietkau for testing advice. Not putting acked-by as it's my fault if it breaks :-) Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Diffstat (limited to 'target')
-rw-r--r--target/linux/generic/pending-4.14/100-MIPS-fix-cache-flushing-for-highmem-pages.patch30
-rw-r--r--target/linux/generic/pending-4.19/100-MIPS-fix-cache-flushing-for-highmem-pages.patch30
2 files changed, 0 insertions, 60 deletions
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@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@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;
diff --git a/target/linux/generic/pending-4.19/100-MIPS-fix-cache-flushing-for-highmem-pages.patch b/target/linux/generic/pending-4.19/100-MIPS-fix-cache-flushing-for-highmem-pages.patch
deleted file mode 100644
index b1c65f7cd8..0000000000
--- a/target/linux/generic/pending-4.19/100-MIPS-fix-cache-flushing-for-highmem-pages.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From: Felix Fietkau <nbd@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@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;