From: Nicolas Pitre Date: Thu, 3 Sep 2009 20:45:59 +0000 (+0100) Subject: ARM: 5691/1: fix cache aliasing issues between kmap() and kmap_atomic() with highmem X-Git-Tag: v2.6.32-rc1~691^2^2~3 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7929eb9cf643ae416e5081b2a6fa558d37b9854c;p=pandora-kernel.git ARM: 5691/1: fix cache aliasing issues between kmap() and kmap_atomic() with highmem Let's suppose a highmem page is kmap'd with kmap(). A pkmap entry is used, the page mapped to it, and the virtual cache is dirtied. Then kunmap() is used which does virtually nothing except for decrementing a usage count. Then, let's suppose the _same_ page gets mapped using kmap_atomic(). It is therefore mapped onto a fixmap entry instead, which has a different virtual address unaware of the dirty cache data for that page sitting in the pkmap mapping. Fortunately it is easy to know if a pkmap mapping still exists for that page and use it directly with kmap_atomic(), thanks to kmap_high_get(). And actual testing with a printk in the added code path shows that this condition is actually met *extremely* frequently. Seems that we've been quite lucky that things have worked so well with highmem so far. Cc: stable@kernel.org Signed-off-by: Nicolas Pitre Signed-off-by: Russell King --- Reading git-diff-tree failed