diff options
author | Dean Nelson <dcn@sgi.com> | 2006-08-08 15:03:29 -0500 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2006-08-08 13:28:52 -0700 |
commit | 7682a4c624e0011b5f3e8dd3021dc54961260d97 (patch) | |
tree | f57ecd8f805a4df701812d3f7456da48bcdf63ac /include/asm-ia64/sn/xpc.h | |
parent | 9f737633e6ee54fc174282d49b2559bd2208391d (diff) | |
download | kernel-crypto-7682a4c624e0011b5f3e8dd3021dc54961260d97.tar.gz kernel-crypto-7682a4c624e0011b5f3e8dd3021dc54961260d97.tar.xz kernel-crypto-7682a4c624e0011b5f3e8dd3021dc54961260d97.zip |
[IA64-SGI] Silent data corruption caused by XPC V2.
Jack Steiner identified a problem where XPC can cause a silent
data corruption. On module load, the placement may cause the
xpc_remote_copy_buffer to span two physical pages. DMA transfers are
done to the start virtual address translated to physical.
This patch changes the buffer from a statically allocated buffer to a
kmalloc'd buffer. Dean Nelson reviewed this before posting. I have
tested it in the configuration that was showing the memory corruption
and verified it works. I also added a BUG_ON statement to help catch
this if a similar situation is encountered.
Signed-off-by: Robin Holt <holt@sgi.com>
Signed-off-by: Dean Nelson <dcn@sgi.com>
Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'include/asm-ia64/sn/xpc.h')
-rw-r--r-- | include/asm-ia64/sn/xpc.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/asm-ia64/sn/xpc.h b/include/asm-ia64/sn/xpc.h index b72af597878..35e1386f37a 100644 --- a/include/asm-ia64/sn/xpc.h +++ b/include/asm-ia64/sn/xpc.h @@ -683,7 +683,9 @@ extern struct xpc_vars *xpc_vars; extern struct xpc_rsvd_page *xpc_rsvd_page; extern struct xpc_vars_part *xpc_vars_part; extern struct xpc_partition xpc_partitions[XP_MAX_PARTITIONS + 1]; -extern char xpc_remote_copy_buffer[]; +extern char *xpc_remote_copy_buffer; +extern void *xpc_remote_copy_buffer_base; +extern void *xpc_kmalloc_cacheline_aligned(size_t, gfp_t, void **); extern struct xpc_rsvd_page *xpc_rsvd_page_init(void); extern void xpc_allow_IPI_ops(void); extern void xpc_restrict_IPI_ops(void); |