From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, John David Anglin <dave.anglin@bell.net>,
Helge Deller <deller@gmx.de>
Subject: [PATCH 3.12 56/77] parisc: Ensure full cache coherency for kmap/kunmap
Date: Mon, 13 Jan 2014 16:28:17 -0800 [thread overview]
Message-ID: <20140114002754.093379834@linuxfoundation.org> (raw)
In-Reply-To: <20140114002752.497010554@linuxfoundation.org>
3.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: John David Anglin <dave.anglin@bell.net>
commit f8dae00684d678afa13041ef170cecfd1297ed40 upstream.
Helge Deller noted a few weeks ago problems with the AIO support on
parisc. This change is the result of numerous iterations on how best to
deal with this problem.
The solution adopted here is to provide full cache coherency in a
uniform manner on all parisc systems. This involves calling
flush_dcache_page() on kmap operations and flush_kernel_dcache_page() on
kunmap operations. As a result, the copy_user_page() and
clear_user_page() functions can be removed and the overall code is
simpler.
The change ensures that both userspace and kernel aliases to a mapped
page are invalidated and flushed. This is necessary for the correct
operation of PA8800 and PA8900 based systems which do not support
inequivalent aliases.
With this change, I have observed no cache related issues on c8000 and
rp3440. It is now possible for example to do kernel builds with "-j64"
on four way systems.
On systems using XFS file systems, the patch recently posted by Mikulas
Patocka to "fix crash using XFS on loopback" is needed to avoid a hang
caused by an uninitialized lock passed to flush_dcache_page() in the
page struct.
Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/asm/cacheflush.h | 12 ++++--------
arch/parisc/include/asm/page.h | 5 ++---
arch/parisc/kernel/cache.c | 35 -----------------------------------
3 files changed, 6 insertions(+), 46 deletions(-)
--- a/arch/parisc/include/asm/cacheflush.h
+++ b/arch/parisc/include/asm/cacheflush.h
@@ -125,42 +125,38 @@ flush_anon_page(struct vm_area_struct *v
void mark_rodata_ro(void);
#endif
-#ifdef CONFIG_PA8X00
-/* Only pa8800, pa8900 needs this */
-
#include <asm/kmap_types.h>
#define ARCH_HAS_KMAP
-void kunmap_parisc(void *addr);
-
static inline void *kmap(struct page *page)
{
might_sleep();
+ flush_dcache_page(page);
return page_address(page);
}
static inline void kunmap(struct page *page)
{
- kunmap_parisc(page_address(page));
+ flush_kernel_dcache_page_addr(page_address(page));
}
static inline void *kmap_atomic(struct page *page)
{
pagefault_disable();
+ flush_dcache_page(page);
return page_address(page);
}
static inline void __kunmap_atomic(void *addr)
{
- kunmap_parisc(addr);
+ flush_kernel_dcache_page_addr(addr);
pagefault_enable();
}
#define kmap_atomic_prot(page, prot) kmap_atomic(page)
#define kmap_atomic_pfn(pfn) kmap_atomic(pfn_to_page(pfn))
#define kmap_atomic_to_page(ptr) virt_to_page(ptr)
-#endif
#endif /* _PARISC_CACHEFLUSH_H */
--- a/arch/parisc/include/asm/page.h
+++ b/arch/parisc/include/asm/page.h
@@ -28,9 +28,8 @@ struct page;
void clear_page_asm(void *page);
void copy_page_asm(void *to, void *from);
-void clear_user_page(void *vto, unsigned long vaddr, struct page *pg);
-void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
- struct page *pg);
+#define clear_user_page(vto, vaddr, page) clear_page_asm(vto)
+#define copy_user_page(vto, vfrom, vaddr, page) copy_page_asm(vto, vfrom)
/* #define CONFIG_PARISC_TMPALIAS */
--- a/arch/parisc/kernel/cache.c
+++ b/arch/parisc/kernel/cache.c
@@ -388,41 +388,6 @@ void flush_kernel_dcache_page_addr(void
}
EXPORT_SYMBOL(flush_kernel_dcache_page_addr);
-void clear_user_page(void *vto, unsigned long vaddr, struct page *page)
-{
- clear_page_asm(vto);
- if (!parisc_requires_coherency())
- flush_kernel_dcache_page_asm(vto);
-}
-EXPORT_SYMBOL(clear_user_page);
-
-void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
- struct page *pg)
-{
- /* Copy using kernel mapping. No coherency is needed
- (all in kmap/kunmap) on machines that don't support
- non-equivalent aliasing. However, the `from' page
- needs to be flushed before it can be accessed through
- the kernel mapping. */
- preempt_disable();
- flush_dcache_page_asm(__pa(vfrom), vaddr);
- preempt_enable();
- copy_page_asm(vto, vfrom);
- if (!parisc_requires_coherency())
- flush_kernel_dcache_page_asm(vto);
-}
-EXPORT_SYMBOL(copy_user_page);
-
-#ifdef CONFIG_PA8X00
-
-void kunmap_parisc(void *addr)
-{
- if (parisc_requires_coherency())
- flush_kernel_dcache_page_addr(addr);
-}
-EXPORT_SYMBOL(kunmap_parisc);
-#endif
-
void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
{
unsigned long flags;
next prev parent reply other threads:[~2014-01-14 0:28 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-14 0:27 [PATCH 3.12 00/77] 3.12.8-stable review Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 01/77] IPv6: Fixed support for blackhole and prohibit routes Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 02/77] net: do not pretend FRAGLIST support Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 03/77] rds: prevent BUG_ON triggered on congestion update to loopback Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 04/77] net: clear local_df when passing skb between namespaces Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 05/77] macvtap: update file current position Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 06/77] tun: " Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 07/77] tun: unbreak truncated packet signalling Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 08/77] macvtap: Do not double-count received packets Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 09/77] macvtap: signal truncated packets Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 10/77] virtio: delete napi structures from netdev before releasing memory Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 11/77] br: fix use of ->rx_handler_data in code executed on non-rx_handler path Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 12/77] packet: fix send path when running with proto == 0 Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 13/77] ipv6: dont count addrconf generated routes against gc limit Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 14/77] net: drop_monitor: fix the value of maxattr Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 15/77] inet: fix NULL pointer Oops in fib(6)_rule_suppress Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 16/77] net: unix: allow set_peek_off to fail Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 17/77] vxlan: release rt when found circular route Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 18/77] tg3: Initialize REG_BASE_ADDR at PCI config offset 120 to 0 Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 19/77] netvsc: dont flush peers notifying work during setting mtu Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 20/77] ipv6: fix illegal mac_header comparison on 32bit Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 21/77] net: unix: allow bind to fail on mutex lock Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 23/77] net: inet_diag: zero out uninitialized idiag_{src,dst} fields Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 24/77] drivers/net/hamradio: Integer overflow in hdlcdrv_ioctl() Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 26/77] net: fec: fix potential use after free Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 27/77] ipv6: always set the new created dsts from in ip6_rt_copy Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 28/77] rds: prevent dereference of a NULL device Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 29/77] arc_emac: fix potential use after free Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 30/77] net: rose: restore old recvmsg behavior Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 31/77] vlan: Fix header ops passthru when doing TX VLAN offload Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 32/77] virtio_net: fix error handling for mergeable buffers Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 33/77] virtio-net: make all RX paths handle errors consistently Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 34/77] virtio_net: dont leak memory or block when too many frags Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 35/77] ipv4: fix tunneled VM traffic over hw VXLAN/GRE GSO NIC Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 36/77] virtio-net: fix refill races during restore Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 37/77] net: llc: fix use after free in llc_ui_recvmsg Greg Kroah-Hartman
2014-01-14 0:27 ` [PATCH 3.12 38/77] netpoll: Fix missing TXQ unlock and and OOPS Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 39/77] bridge: use spin_lock_bh() in br_multicast_set_hash_max Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 40/77] sfc: Add length checks to efx_xmit_with_hwtstamp() and efx_ptp_is_ptp_tx() Greg Kroah-Hartman
2014-01-14 0:45 ` Ben Hutchings
2014-01-16 10:50 ` Luis Henriques
2014-01-16 19:42 ` David Miller
2014-01-16 20:51 ` Luis Henriques
2014-01-16 21:15 ` Ben Hutchings
2014-01-14 0:28 ` [PATCH 3.12 41/77] sfc: PTP: Moderate log message on event queue overflow Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 42/77] sfc: Rate-limit log message for PTP packets without a matching timestamp event Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 43/77] sfc: Stop/re-start PTP when stopping/starting the datapath Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 44/77] sfc: Maintain current frequency adjustment when applying a time offset Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 45/77] sfc: RX buffer allocation takes prefix size into account in IP header alignment Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 46/77] sfc: Refactor efx_mcdi_poll() by introducing efx_mcdi_poll_once() Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 47/77] sfc: Poll for MCDI completion once before timeout occurs Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 48/77] ARM: fix footbridge clockevent device Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 49/77] ARM: fix "bad mode in ... handler" message for undefined instructions Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 50/77] ARM: 7923/1: mm: fix dcache flush logic for compound high pages Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 51/77] ARM: dts: exynos5250: Fix MDMA0 clock number Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 52/77] ARM: shmobile: kzm9g: Fix coherent DMA mask Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 53/77] ARM: shmobile: armadillo: " Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 54/77] ARM: shmobile: mackerel: " Greg Kroah-Hartman
2014-01-14 0:28 ` Greg Kroah-Hartman [this message]
2014-01-14 0:28 ` [PATCH 3.12 57/77] ahci: add PCI ID for Marvell 88SE9170 SATA controller Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 58/77] clk: clk-divider: fix divisor > 255 bug Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 59/77] clk: samsung: exynos4: Correct SRC_MFC register Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 60/77] clk: samsung: exynos5250: Fix ACP gate register offset Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 61/77] clk: samsung: exynos5250: Add MDMA0 clocks Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 62/77] clk: samsung: exynos5250: Add CLK_IGNORE_UNUSED flag for the sysreg clock Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 63/77] clk: exynos5250: fix sysmmu_mfc{l,r} gate clocks Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 65/77] mfd: rtsx_pcr: Disable interrupts before cancelling delayed works Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 66/77] ACPI / TPM: fix memory leak when walking ACPI namespace Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 67/77] ACPI / Battery: Add a _BIX quirk for NEC LZ750/LS Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 68/77] mac80211: move "bufferable MMPDU" check to fix AP mode scan Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 69/77] intel_pstate: Add X86_FEATURE_APERFMPERF to cpu match parameters Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 70/77] SCSI: sd: Reduce buffer size for vpd request Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 71/77] netfilter: fix wrong byte order in nf_ct_seqadj_set internal information Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 72/77] netfilter: nf_nat: fix access to uninitialized buffer in IRC NAT helper Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 73/77] x86, fpu, amd: Clear exceptions in AMD FXSAVE workaround Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 74/77] sched: Fix race on toggling cfs_bandwidth_used Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 75/77] sched: Fix cfs_bandwidth misuse of hrtimer_expires_remaining Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 76/77] sched: Fix hrtimer_cancel()/rq->lock deadlock Greg Kroah-Hartman
2014-01-14 0:28 ` [PATCH 3.12 77/77] sched: Guarantee new group-entities always have weight Greg Kroah-Hartman
2014-01-14 3:03 ` [PATCH 3.12 00/77] 3.12.8-stable review Guenter Roeck
2014-01-14 14:42 ` Satoru Takeuchi
2014-01-14 23:12 ` Greg Kroah-Hartman
2014-01-14 19:31 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140114002754.093379834@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=dave.anglin@bell.net \
--cc=deller@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).