diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2009-12-23 10:00:05 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-12-23 10:00:05 -0800 |
commit | 193cb93e5a5f32c0520eed17e87135d20594d1e1 (patch) | |
tree | 3b5584f4e5e73f5f01807e5176cbe29e1db69868 /drivers/misc/sgi-xp/xp_uv.c | |
parent | 23e707dd9b0b26215d801c59e87feed1c218a0f9 (diff) | |
parent | f42ecb2808db5386f983d593a7c08d3ea3b94a27 (diff) | |
download | kernel-crypto-193cb93e5a5f32c0520eed17e87135d20594d1e1.tar.gz kernel-crypto-193cb93e5a5f32c0520eed17e87135d20594d1e1.tar.xz kernel-crypto-193cb93e5a5f32c0520eed17e87135d20594d1e1.zip |
Merge branch 'master' of /home/gregkh/linux/git/torvalds-2.6
Diffstat (limited to 'drivers/misc/sgi-xp/xp_uv.c')
-rw-r--r-- | drivers/misc/sgi-xp/xp_uv.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/misc/sgi-xp/xp_uv.c b/drivers/misc/sgi-xp/xp_uv.c index d238576b26f..a0d093274dc 100644 --- a/drivers/misc/sgi-xp/xp_uv.c +++ b/drivers/misc/sgi-xp/xp_uv.c @@ -32,12 +32,44 @@ xp_pa_uv(void *addr) return uv_gpa(addr); } +/* + * Convert a global physical to socket physical address. + */ +static unsigned long +xp_socket_pa_uv(unsigned long gpa) +{ + return uv_gpa_to_soc_phys_ram(gpa); +} + +static enum xp_retval +xp_remote_mmr_read(unsigned long dst_gpa, const unsigned long src_gpa, + size_t len) +{ + int ret; + unsigned long *dst_va = __va(uv_gpa_to_soc_phys_ram(dst_gpa)); + + BUG_ON(!uv_gpa_in_mmr_space(src_gpa)); + BUG_ON(len != 8); + + ret = gru_read_gpa(dst_va, src_gpa); + if (ret == 0) + return xpSuccess; + + dev_err(xp, "gru_read_gpa() failed, dst_gpa=0x%016lx src_gpa=0x%016lx " + "len=%ld\n", dst_gpa, src_gpa, len); + return xpGruCopyError; +} + + static enum xp_retval xp_remote_memcpy_uv(unsigned long dst_gpa, const unsigned long src_gpa, size_t len) { int ret; + if (uv_gpa_in_mmr_space(src_gpa)) + return xp_remote_mmr_read(dst_gpa, src_gpa, len); + ret = gru_copy_gpa(dst_gpa, src_gpa, len); if (ret == 0) return xpSuccess; @@ -123,6 +155,7 @@ xp_init_uv(void) xp_region_size = sn_region_size; xp_pa = xp_pa_uv; + xp_socket_pa = xp_socket_pa_uv; xp_remote_memcpy = xp_remote_memcpy_uv; xp_cpu_to_nasid = xp_cpu_to_nasid_uv; xp_expand_memprotect = xp_expand_memprotect_uv; |