diff options
| -rw-r--r-- | arch/ia64/sn/kernel/xpc_partition.c | 15 | ||||
| -rw-r--r-- | include/asm-ia64/sn/addrs.h | 8 | 
2 files changed, 22 insertions, 1 deletions
diff --git a/arch/ia64/sn/kernel/xpc_partition.c b/arch/ia64/sn/kernel/xpc_partition.c index b31d9988a37a..2c3c4a8af553 100644 --- a/arch/ia64/sn/kernel/xpc_partition.c +++ b/arch/ia64/sn/kernel/xpc_partition.c  | |||
| @@ -204,6 +204,19 @@ xpc_rsvd_page_init(void) | |||
| 204 | return NULL; | 204 | return NULL; | 
| 205 | } | 205 | } | 
| 206 | } | 206 | } | 
| 207 | } else if (!IS_AMO_ADDRESS((u64) amos_page)) { | ||
| 208 | /* | ||
| 209 | * EFI's XPBOOT can also set amos_page in the reserved page, | ||
| 210 | * but it happens to leave it as an uncached physical address | ||
| 211 | * and we need it to be an uncached virtual, so we'll have to | ||
| 212 | * convert it. | ||
| 213 | */ | ||
| 214 | if (!IS_AMO_PHYS_ADDRESS((u64) amos_page)) { | ||
| 215 | dev_err(xpc_part, "previously used amos_page address " | ||
| 216 | "is bad = 0x%p\n", (void *) amos_page); | ||
| 217 | return NULL; | ||
| 218 | } | ||
| 219 | amos_page = (AMO_t *) TO_AMO((u64) amos_page); | ||
| 207 | } | 220 | } | 
| 208 | 221 | ||
| 209 | memset(xpc_vars, 0, sizeof(struct xpc_vars)); | 222 | memset(xpc_vars, 0, sizeof(struct xpc_vars)); | 
| @@ -944,7 +957,7 @@ xpc_discovery(void) | |||
| 944 | 957 | ||
| 945 | /* | 958 | /* | 
| 946 | * Given a partid, get the nasids owned by that partition from the | 959 | * Given a partid, get the nasids owned by that partition from the | 
| 947 | * remote partitions reserved page. | 960 | * remote partition's reserved page. | 
| 948 | */ | 961 | */ | 
| 949 | enum xpc_retval | 962 | enum xpc_retval | 
| 950 | xpc_initiate_partid_to_nasids(partid_t partid, void *nasid_mask) | 963 | xpc_initiate_partid_to_nasids(partid_t partid, void *nasid_mask) | 
diff --git a/include/asm-ia64/sn/addrs.h b/include/asm-ia64/sn/addrs.h index 960d626ee589..1bfdfb4d7b01 100644 --- a/include/asm-ia64/sn/addrs.h +++ b/include/asm-ia64/sn/addrs.h  | |||
| @@ -136,6 +136,7 @@ | |||
| 136 | */ | 136 | */ | 
| 137 | #define CAC_BASE (CACHED | AS_CAC_SPACE) | 137 | #define CAC_BASE (CACHED | AS_CAC_SPACE) | 
| 138 | #define AMO_BASE (UNCACHED | AS_AMO_SPACE) | 138 | #define AMO_BASE (UNCACHED | AS_AMO_SPACE) | 
| 139 | #define AMO_PHYS_BASE (UNCACHED_PHYS | AS_AMO_SPACE) | ||
| 139 | #define GET_BASE (CACHED | AS_GET_SPACE) | 140 | #define GET_BASE (CACHED | AS_GET_SPACE) | 
| 140 | 141 | ||
| 141 | /* | 142 | /* | 
| @@ -161,6 +162,13 @@ | |||
| 161 | 162 | ||
| 162 | 163 | ||
| 163 | /* | 164 | /* | 
| 165 | * Macros to test for address type. | ||
| 166 | */ | ||
| 167 | #define IS_AMO_ADDRESS(x) (((u64)(x) & (REGION_BITS | AS_MASK)) == AMO_BASE) | ||
| 168 | #define IS_AMO_PHYS_ADDRESS(x) (((u64)(x) & (REGION_BITS | AS_MASK)) == AMO_PHYS_BASE) | ||
| 169 | |||
| 170 | |||
| 171 | /* | ||
| 164 | * The following definitions pertain to the IO special address | 172 | * The following definitions pertain to the IO special address | 
| 165 | * space. They define the location of the big and little windows | 173 | * space. They define the location of the big and little windows | 
| 166 | * of any given node. | 174 | * of any given node. | 
