diff options
Diffstat (limited to 'drivers/misc/sgi-xp')
| -rw-r--r-- | drivers/misc/sgi-xp/xp.h | 1 | ||||
| -rw-r--r-- | drivers/misc/sgi-xp/xp_main.c | 3 | ||||
| -rw-r--r-- | drivers/misc/sgi-xp/xp_sn2.c | 10 | ||||
| -rw-r--r-- | drivers/misc/sgi-xp/xp_uv.c | 33 | ||||
| -rw-r--r-- | drivers/misc/sgi-xp/xpc_main.c | 14 | ||||
| -rw-r--r-- | drivers/misc/sgi-xp/xpc_partition.c | 13 | ||||
| -rw-r--r-- | drivers/misc/sgi-xp/xpc_uv.c | 46 |
7 files changed, 85 insertions, 35 deletions
diff --git a/drivers/misc/sgi-xp/xp.h b/drivers/misc/sgi-xp/xp.h index 2275126cb334..851b2f25ce0e 100644 --- a/drivers/misc/sgi-xp/xp.h +++ b/drivers/misc/sgi-xp/xp.h | |||
| @@ -339,6 +339,7 @@ extern short xp_partition_id; | |||
| 339 | extern u8 xp_region_size; | 339 | extern u8 xp_region_size; |
| 340 | 340 | ||
| 341 | extern unsigned long (*xp_pa) (void *); | 341 | extern unsigned long (*xp_pa) (void *); |
| 342 | extern unsigned long (*xp_socket_pa) (unsigned long); | ||
| 342 | extern enum xp_retval (*xp_remote_memcpy) (unsigned long, const unsigned long, | 343 | extern enum xp_retval (*xp_remote_memcpy) (unsigned long, const unsigned long, |
| 343 | size_t); | 344 | size_t); |
| 344 | extern int (*xp_cpu_to_nasid) (int); | 345 | extern int (*xp_cpu_to_nasid) (int); |
diff --git a/drivers/misc/sgi-xp/xp_main.c b/drivers/misc/sgi-xp/xp_main.c index 7896849b16dc..01be66d02ca8 100644 --- a/drivers/misc/sgi-xp/xp_main.c +++ b/drivers/misc/sgi-xp/xp_main.c | |||
| @@ -44,6 +44,9 @@ EXPORT_SYMBOL_GPL(xp_region_size); | |||
| 44 | unsigned long (*xp_pa) (void *addr); | 44 | unsigned long (*xp_pa) (void *addr); |
| 45 | EXPORT_SYMBOL_GPL(xp_pa); | 45 | EXPORT_SYMBOL_GPL(xp_pa); |
| 46 | 46 | ||
| 47 | unsigned long (*xp_socket_pa) (unsigned long gpa); | ||
| 48 | EXPORT_SYMBOL_GPL(xp_socket_pa); | ||
| 49 | |||
| 47 | enum xp_retval (*xp_remote_memcpy) (unsigned long dst_gpa, | 50 | enum xp_retval (*xp_remote_memcpy) (unsigned long dst_gpa, |
| 48 | const unsigned long src_gpa, size_t len); | 51 | const unsigned long src_gpa, size_t len); |
| 49 | EXPORT_SYMBOL_GPL(xp_remote_memcpy); | 52 | EXPORT_SYMBOL_GPL(xp_remote_memcpy); |
diff --git a/drivers/misc/sgi-xp/xp_sn2.c b/drivers/misc/sgi-xp/xp_sn2.c index fb3ec9d735a9..d8e463f87241 100644 --- a/drivers/misc/sgi-xp/xp_sn2.c +++ b/drivers/misc/sgi-xp/xp_sn2.c | |||
| @@ -84,6 +84,15 @@ xp_pa_sn2(void *addr) | |||
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | /* | 86 | /* |
| 87 | * Convert a global physical to a socket physical address. | ||
| 88 | */ | ||
| 89 | static unsigned long | ||
| 90 | xp_socket_pa_sn2(unsigned long gpa) | ||
| 91 | { | ||
| 92 | return gpa; | ||
| 93 | } | ||
| 94 | |||
| 95 | /* | ||
| 87 | * Wrapper for bte_copy(). | 96 | * Wrapper for bte_copy(). |
| 88 | * | 97 | * |
| 89 | * dst_pa - physical address of the destination of the transfer. | 98 | * dst_pa - physical address of the destination of the transfer. |
| @@ -162,6 +171,7 @@ xp_init_sn2(void) | |||
| 162 | xp_region_size = sn_region_size; | 171 | xp_region_size = sn_region_size; |
| 163 | 172 | ||
| 164 | xp_pa = xp_pa_sn2; | 173 | xp_pa = xp_pa_sn2; |
| 174 | xp_socket_pa = xp_socket_pa_sn2; | ||
| 165 | xp_remote_memcpy = xp_remote_memcpy_sn2; | 175 | xp_remote_memcpy = xp_remote_memcpy_sn2; |
| 166 | xp_cpu_to_nasid = xp_cpu_to_nasid_sn2; | 176 | xp_cpu_to_nasid = xp_cpu_to_nasid_sn2; |
| 167 | xp_expand_memprotect = xp_expand_memprotect_sn2; | 177 | xp_expand_memprotect = xp_expand_memprotect_sn2; |
diff --git a/drivers/misc/sgi-xp/xp_uv.c b/drivers/misc/sgi-xp/xp_uv.c index d238576b26fa..a0d093274dc0 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) | |||
| 32 | return uv_gpa(addr); | 32 | return uv_gpa(addr); |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | /* | ||
| 36 | * Convert a global physical to socket physical address. | ||
| 37 | */ | ||
| 38 | static unsigned long | ||
| 39 | xp_socket_pa_uv(unsigned long gpa) | ||
| 40 | { | ||
| 41 | return uv_gpa_to_soc_phys_ram(gpa); | ||
| 42 | } | ||
| 43 | |||
| 44 | static enum xp_retval | ||
| 45 | xp_remote_mmr_read(unsigned long dst_gpa, const unsigned long src_gpa, | ||
| 46 | size_t len) | ||
| 47 | { | ||
| 48 | int ret; | ||
| 49 | unsigned long *dst_va = __va(uv_gpa_to_soc_phys_ram(dst_gpa)); | ||
| 50 | |||
| 51 | BUG_ON(!uv_gpa_in_mmr_space(src_gpa)); | ||
| 52 | BUG_ON(len != 8); | ||
| 53 | |||
| 54 | ret = gru_read_gpa(dst_va, src_gpa); | ||
| 55 | if (ret == 0) | ||
| 56 | return xpSuccess; | ||
| 57 | |||
| 58 | dev_err(xp, "gru_read_gpa() failed, dst_gpa=0x%016lx src_gpa=0x%016lx " | ||
| 59 | "len=%ld\n", dst_gpa, src_gpa, len); | ||
| 60 | return xpGruCopyError; | ||
| 61 | } | ||
| 62 | |||
| 63 | |||
| 35 | static enum xp_retval | 64 | static enum xp_retval |
| 36 | xp_remote_memcpy_uv(unsigned long dst_gpa, const unsigned long src_gpa, | 65 | xp_remote_memcpy_uv(unsigned long dst_gpa, const unsigned long src_gpa, |
| 37 | size_t len) | 66 | size_t len) |
| 38 | { | 67 | { |
| 39 | int ret; | 68 | int ret; |
| 40 | 69 | ||
| 70 | if (uv_gpa_in_mmr_space(src_gpa)) | ||
| 71 | return xp_remote_mmr_read(dst_gpa, src_gpa, len); | ||
| 72 | |||
| 41 | ret = gru_copy_gpa(dst_gpa, src_gpa, len); | 73 | ret = gru_copy_gpa(dst_gpa, src_gpa, len); |
| 42 | if (ret == 0) | 74 | if (ret == 0) |
| 43 | return xpSuccess; | 75 | return xpSuccess; |
| @@ -123,6 +155,7 @@ xp_init_uv(void) | |||
| 123 | xp_region_size = sn_region_size; | 155 | xp_region_size = sn_region_size; |
| 124 | 156 | ||
| 125 | xp_pa = xp_pa_uv; | 157 | xp_pa = xp_pa_uv; |
| 158 | xp_socket_pa = xp_socket_pa_uv; | ||
| 126 | xp_remote_memcpy = xp_remote_memcpy_uv; | 159 | xp_remote_memcpy = xp_remote_memcpy_uv; |
| 127 | xp_cpu_to_nasid = xp_cpu_to_nasid_uv; | 160 | xp_cpu_to_nasid = xp_cpu_to_nasid_uv; |
| 128 | xp_expand_memprotect = xp_expand_memprotect_uv; | 161 | xp_expand_memprotect = xp_expand_memprotect_uv; |
diff --git a/drivers/misc/sgi-xp/xpc_main.c b/drivers/misc/sgi-xp/xpc_main.c index fd3688a3e23f..832ed4c88cf7 100644 --- a/drivers/misc/sgi-xp/xpc_main.c +++ b/drivers/misc/sgi-xp/xpc_main.c | |||
| @@ -89,48 +89,40 @@ static int xpc_disengage_max_timelimit = 120; | |||
| 89 | 89 | ||
| 90 | static ctl_table xpc_sys_xpc_hb_dir[] = { | 90 | static ctl_table xpc_sys_xpc_hb_dir[] = { |
| 91 | { | 91 | { |
| 92 | .ctl_name = CTL_UNNUMBERED, | ||
| 93 | .procname = "hb_interval", | 92 | .procname = "hb_interval", |
| 94 | .data = &xpc_hb_interval, | 93 | .data = &xpc_hb_interval, |
| 95 | .maxlen = sizeof(int), | 94 | .maxlen = sizeof(int), |
| 96 | .mode = 0644, | 95 | .mode = 0644, |
| 97 | .proc_handler = &proc_dointvec_minmax, | 96 | .proc_handler = proc_dointvec_minmax, |
| 98 | .strategy = &sysctl_intvec, | ||
| 99 | .extra1 = &xpc_hb_min_interval, | 97 | .extra1 = &xpc_hb_min_interval, |
| 100 | .extra2 = &xpc_hb_max_interval}, | 98 | .extra2 = &xpc_hb_max_interval}, |
| 101 | { | 99 | { |
| 102 | .ctl_name = CTL_UNNUMBERED, | ||
| 103 | .procname = "hb_check_interval", | 100 | .procname = "hb_check_interval", |
| 104 | .data = &xpc_hb_check_interval, | 101 | .data = &xpc_hb_check_interval, |
| 105 | .maxlen = sizeof(int), | 102 | .maxlen = sizeof(int), |
| 106 | .mode = 0644, | 103 | .mode = 0644, |
| 107 | .proc_handler = &proc_dointvec_minmax, | 104 | .proc_handler = proc_dointvec_minmax, |
| 108 | .strategy = &sysctl_intvec, | ||
| 109 | .extra1 = &xpc_hb_check_min_interval, | 105 | .extra1 = &xpc_hb_check_min_interval, |
| 110 | .extra2 = &xpc_hb_check_max_interval}, | 106 | .extra2 = &xpc_hb_check_max_interval}, |
| 111 | {} | 107 | {} |
| 112 | }; | 108 | }; |
| 113 | static ctl_table xpc_sys_xpc_dir[] = { | 109 | static ctl_table xpc_sys_xpc_dir[] = { |
| 114 | { | 110 | { |
| 115 | .ctl_name = CTL_UNNUMBERED, | ||
| 116 | .procname = "hb", | 111 | .procname = "hb", |
| 117 | .mode = 0555, | 112 | .mode = 0555, |
| 118 | .child = xpc_sys_xpc_hb_dir}, | 113 | .child = xpc_sys_xpc_hb_dir}, |
| 119 | { | 114 | { |
| 120 | .ctl_name = CTL_UNNUMBERED, | ||
| 121 | .procname = "disengage_timelimit", | 115 | .procname = "disengage_timelimit", |
| 122 | .data = &xpc_disengage_timelimit, | 116 | .data = &xpc_disengage_timelimit, |
| 123 | .maxlen = sizeof(int), | 117 | .maxlen = sizeof(int), |
| 124 | .mode = 0644, | 118 | .mode = 0644, |
| 125 | .proc_handler = &proc_dointvec_minmax, | 119 | .proc_handler = proc_dointvec_minmax, |
| 126 | .strategy = &sysctl_intvec, | ||
| 127 | .extra1 = &xpc_disengage_min_timelimit, | 120 | .extra1 = &xpc_disengage_min_timelimit, |
| 128 | .extra2 = &xpc_disengage_max_timelimit}, | 121 | .extra2 = &xpc_disengage_max_timelimit}, |
| 129 | {} | 122 | {} |
| 130 | }; | 123 | }; |
| 131 | static ctl_table xpc_sys_dir[] = { | 124 | static ctl_table xpc_sys_dir[] = { |
| 132 | { | 125 | { |
| 133 | .ctl_name = CTL_UNNUMBERED, | ||
| 134 | .procname = "xpc", | 126 | .procname = "xpc", |
| 135 | .mode = 0555, | 127 | .mode = 0555, |
| 136 | .child = xpc_sys_xpc_dir}, | 128 | .child = xpc_sys_xpc_dir}, |
diff --git a/drivers/misc/sgi-xp/xpc_partition.c b/drivers/misc/sgi-xp/xpc_partition.c index 65877bc5edaa..9a6268c89fdd 100644 --- a/drivers/misc/sgi-xp/xpc_partition.c +++ b/drivers/misc/sgi-xp/xpc_partition.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/device.h> | 18 | #include <linux/device.h> |
| 19 | #include <linux/hardirq.h> | 19 | #include <linux/hardirq.h> |
| 20 | #include "xpc.h" | 20 | #include "xpc.h" |
| 21 | #include <asm/uv/uv_hub.h> | ||
| 21 | 22 | ||
| 22 | /* XPC is exiting flag */ | 23 | /* XPC is exiting flag */ |
| 23 | int xpc_exiting; | 24 | int xpc_exiting; |
| @@ -92,8 +93,12 @@ xpc_get_rsvd_page_pa(int nasid) | |||
| 92 | break; | 93 | break; |
| 93 | 94 | ||
| 94 | /* !!! L1_CACHE_ALIGN() is only a sn2-bte_copy requirement */ | 95 | /* !!! L1_CACHE_ALIGN() is only a sn2-bte_copy requirement */ |
| 95 | if (L1_CACHE_ALIGN(len) > buf_len) { | 96 | if (is_shub()) |
| 96 | kfree(buf_base); | 97 | len = L1_CACHE_ALIGN(len); |
| 98 | |||
| 99 | if (len > buf_len) { | ||
| 100 | if (buf_base != NULL) | ||
| 101 | kfree(buf_base); | ||
| 97 | buf_len = L1_CACHE_ALIGN(len); | 102 | buf_len = L1_CACHE_ALIGN(len); |
| 98 | buf = xpc_kmalloc_cacheline_aligned(buf_len, GFP_KERNEL, | 103 | buf = xpc_kmalloc_cacheline_aligned(buf_len, GFP_KERNEL, |
| 99 | &buf_base); | 104 | &buf_base); |
| @@ -105,7 +110,7 @@ xpc_get_rsvd_page_pa(int nasid) | |||
| 105 | } | 110 | } |
| 106 | } | 111 | } |
| 107 | 112 | ||
| 108 | ret = xp_remote_memcpy(xp_pa(buf), rp_pa, buf_len); | 113 | ret = xp_remote_memcpy(xp_pa(buf), rp_pa, len); |
| 109 | if (ret != xpSuccess) { | 114 | if (ret != xpSuccess) { |
| 110 | dev_dbg(xpc_part, "xp_remote_memcpy failed %d\n", ret); | 115 | dev_dbg(xpc_part, "xp_remote_memcpy failed %d\n", ret); |
| 111 | break; | 116 | break; |
| @@ -143,7 +148,7 @@ xpc_setup_rsvd_page(void) | |||
| 143 | dev_err(xpc_part, "SAL failed to locate the reserved page\n"); | 148 | dev_err(xpc_part, "SAL failed to locate the reserved page\n"); |
| 144 | return -ESRCH; | 149 | return -ESRCH; |
| 145 | } | 150 | } |
| 146 | rp = (struct xpc_rsvd_page *)__va(rp_pa); | 151 | rp = (struct xpc_rsvd_page *)__va(xp_socket_pa(rp_pa)); |
| 147 | 152 | ||
| 148 | if (rp->SAL_version < 3) { | 153 | if (rp->SAL_version < 3) { |
| 149 | /* SAL_versions < 3 had a SAL_partid defined as a u8 */ | 154 | /* SAL_versions < 3 had a SAL_partid defined as a u8 */ |
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c index b5bbe59f9c57..8725d5e8ab0c 100644 --- a/drivers/misc/sgi-xp/xpc_uv.c +++ b/drivers/misc/sgi-xp/xpc_uv.c | |||
| @@ -157,22 +157,24 @@ xpc_gru_mq_watchlist_alloc_uv(struct xpc_gru_mq_uv *mq) | |||
| 157 | { | 157 | { |
| 158 | int ret; | 158 | int ret; |
| 159 | 159 | ||
| 160 | #if defined CONFIG_X86_64 | 160 | #if defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV |
| 161 | ret = uv_bios_mq_watchlist_alloc(mq->mmr_blade, uv_gpa(mq->address), | 161 | int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); |
| 162 | mq->order, &mq->mmr_offset); | 162 | |
| 163 | if (ret < 0) { | 163 | ret = sn_mq_watchlist_alloc(mmr_pnode, (void *)uv_gpa(mq->address), |
| 164 | dev_err(xpc_part, "uv_bios_mq_watchlist_alloc() failed, " | ||
| 165 | "ret=%d\n", ret); | ||
| 166 | return ret; | ||
| 167 | } | ||
| 168 | #elif defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV | ||
| 169 | ret = sn_mq_watchlist_alloc(mq->mmr_blade, (void *)uv_gpa(mq->address), | ||
| 170 | mq->order, &mq->mmr_offset); | 164 | mq->order, &mq->mmr_offset); |
| 171 | if (ret < 0) { | 165 | if (ret < 0) { |
| 172 | dev_err(xpc_part, "sn_mq_watchlist_alloc() failed, ret=%d\n", | 166 | dev_err(xpc_part, "sn_mq_watchlist_alloc() failed, ret=%d\n", |
| 173 | ret); | 167 | ret); |
| 174 | return -EBUSY; | 168 | return -EBUSY; |
| 175 | } | 169 | } |
| 170 | #elif defined CONFIG_X86_64 | ||
| 171 | ret = uv_bios_mq_watchlist_alloc(uv_gpa(mq->address), | ||
| 172 | mq->order, &mq->mmr_offset); | ||
| 173 | if (ret < 0) { | ||
| 174 | dev_err(xpc_part, "uv_bios_mq_watchlist_alloc() failed, " | ||
| 175 | "ret=%d\n", ret); | ||
| 176 | return ret; | ||
| 177 | } | ||
| 176 | #else | 178 | #else |
| 177 | #error not a supported configuration | 179 | #error not a supported configuration |
| 178 | #endif | 180 | #endif |
| @@ -185,12 +187,13 @@ static void | |||
| 185 | xpc_gru_mq_watchlist_free_uv(struct xpc_gru_mq_uv *mq) | 187 | xpc_gru_mq_watchlist_free_uv(struct xpc_gru_mq_uv *mq) |
| 186 | { | 188 | { |
| 187 | int ret; | 189 | int ret; |
| 190 | int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); | ||
| 188 | 191 | ||
| 189 | #if defined CONFIG_X86_64 | 192 | #if defined CONFIG_X86_64 |
| 190 | ret = uv_bios_mq_watchlist_free(mq->mmr_blade, mq->watchlist_num); | 193 | ret = uv_bios_mq_watchlist_free(mmr_pnode, mq->watchlist_num); |
| 191 | BUG_ON(ret != BIOS_STATUS_SUCCESS); | 194 | BUG_ON(ret != BIOS_STATUS_SUCCESS); |
| 192 | #elif defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV | 195 | #elif defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV |
| 193 | ret = sn_mq_watchlist_free(mq->mmr_blade, mq->watchlist_num); | 196 | ret = sn_mq_watchlist_free(mmr_pnode, mq->watchlist_num); |
| 194 | BUG_ON(ret != SALRET_OK); | 197 | BUG_ON(ret != SALRET_OK); |
| 195 | #else | 198 | #else |
| 196 | #error not a supported configuration | 199 | #error not a supported configuration |
| @@ -204,6 +207,7 @@ xpc_create_gru_mq_uv(unsigned int mq_size, int cpu, char *irq_name, | |||
| 204 | enum xp_retval xp_ret; | 207 | enum xp_retval xp_ret; |
| 205 | int ret; | 208 | int ret; |
| 206 | int nid; | 209 | int nid; |
| 210 | int nasid; | ||
| 207 | int pg_order; | 211 | int pg_order; |
| 208 | struct page *page; | 212 | struct page *page; |
| 209 | struct xpc_gru_mq_uv *mq; | 213 | struct xpc_gru_mq_uv *mq; |
| @@ -259,9 +263,11 @@ xpc_create_gru_mq_uv(unsigned int mq_size, int cpu, char *irq_name, | |||
| 259 | goto out_5; | 263 | goto out_5; |
| 260 | } | 264 | } |
| 261 | 265 | ||
| 266 | nasid = UV_PNODE_TO_NASID(uv_cpu_to_pnode(cpu)); | ||
| 267 | |||
| 262 | mmr_value = (struct uv_IO_APIC_route_entry *)&mq->mmr_value; | 268 | mmr_value = (struct uv_IO_APIC_route_entry *)&mq->mmr_value; |
| 263 | ret = gru_create_message_queue(mq->gru_mq_desc, mq->address, mq_size, | 269 | ret = gru_create_message_queue(mq->gru_mq_desc, mq->address, mq_size, |
| 264 | nid, mmr_value->vector, mmr_value->dest); | 270 | nasid, mmr_value->vector, mmr_value->dest); |
| 265 | if (ret != 0) { | 271 | if (ret != 0) { |
| 266 | dev_err(xpc_part, "gru_create_message_queue() returned " | 272 | dev_err(xpc_part, "gru_create_message_queue() returned " |
| 267 | "error=%d\n", ret); | 273 | "error=%d\n", ret); |
| @@ -946,11 +952,13 @@ xpc_get_fifo_entry_uv(struct xpc_fifo_head_uv *head) | |||
| 946 | head->first = first->next; | 952 | head->first = first->next; |
| 947 | if (head->first == NULL) | 953 | if (head->first == NULL) |
| 948 | head->last = NULL; | 954 | head->last = NULL; |
| 955 | |||
| 956 | head->n_entries--; | ||
| 957 | BUG_ON(head->n_entries < 0); | ||
| 958 | |||
| 959 | first->next = NULL; | ||
| 949 | } | 960 | } |
| 950 | head->n_entries--; | ||
| 951 | BUG_ON(head->n_entries < 0); | ||
| 952 | spin_unlock_irqrestore(&head->lock, irq_flags); | 961 | spin_unlock_irqrestore(&head->lock, irq_flags); |
| 953 | first->next = NULL; | ||
| 954 | return first; | 962 | return first; |
| 955 | } | 963 | } |
| 956 | 964 | ||
| @@ -1019,7 +1027,8 @@ xpc_make_first_contact_uv(struct xpc_partition *part) | |||
| 1019 | xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), | 1027 | xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), |
| 1020 | XPC_ACTIVATE_MQ_MSG_SYNC_ACT_STATE_UV); | 1028 | XPC_ACTIVATE_MQ_MSG_SYNC_ACT_STATE_UV); |
| 1021 | 1029 | ||
| 1022 | while (part->sn.uv.remote_act_state != XPC_P_AS_ACTIVATING) { | 1030 | while (!((part->sn.uv.remote_act_state == XPC_P_AS_ACTIVATING) || |
| 1031 | (part->sn.uv.remote_act_state == XPC_P_AS_ACTIVE))) { | ||
| 1023 | 1032 | ||
| 1024 | dev_dbg(xpc_part, "waiting to make first contact with " | 1033 | dev_dbg(xpc_part, "waiting to make first contact with " |
| 1025 | "partition %d\n", XPC_PARTID(part)); | 1034 | "partition %d\n", XPC_PARTID(part)); |
| @@ -1422,7 +1431,6 @@ xpc_handle_notify_mq_msg_uv(struct xpc_partition *part, | |||
| 1422 | msg_slot = ch_uv->recv_msg_slots + | 1431 | msg_slot = ch_uv->recv_msg_slots + |
| 1423 | (msg->hdr.msg_slot_number % ch->remote_nentries) * ch->entry_size; | 1432 | (msg->hdr.msg_slot_number % ch->remote_nentries) * ch->entry_size; |
| 1424 | 1433 | ||
| 1425 | BUG_ON(msg->hdr.msg_slot_number != msg_slot->hdr.msg_slot_number); | ||
| 1426 | BUG_ON(msg_slot->hdr.size != 0); | 1434 | BUG_ON(msg_slot->hdr.size != 0); |
| 1427 | 1435 | ||
| 1428 | memcpy(msg_slot, msg, msg->hdr.size); | 1436 | memcpy(msg_slot, msg, msg->hdr.size); |
| @@ -1646,8 +1654,6 @@ xpc_received_payload_uv(struct xpc_channel *ch, void *payload) | |||
| 1646 | sizeof(struct xpc_notify_mq_msghdr_uv)); | 1654 | sizeof(struct xpc_notify_mq_msghdr_uv)); |
| 1647 | if (ret != xpSuccess) | 1655 | if (ret != xpSuccess) |
| 1648 | XPC_DEACTIVATE_PARTITION(&xpc_partitions[ch->partid], ret); | 1656 | XPC_DEACTIVATE_PARTITION(&xpc_partitions[ch->partid], ret); |
| 1649 | |||
| 1650 | msg->hdr.msg_slot_number += ch->remote_nentries; | ||
| 1651 | } | 1657 | } |
| 1652 | 1658 | ||
| 1653 | static struct xpc_arch_operations xpc_arch_ops_uv = { | 1659 | static struct xpc_arch_operations xpc_arch_ops_uv = { |
