Searched refs:amo (Results 1 - 5 of 5) sorted by relevance
/linux-4.1.27/arch/ia64/include/asm/sn/ |
H A D | mspec.h | 35 * Each Atomic Memory Operation (amo, formerly known as fetchop) 40 * NOTE: The amo structure _MUST_ be placed in either the first or second 42 * other than additional amo entries. This is because there are two 45 * may be loaded into processor cache. The amo will be referenced 51 struct amo { struct
|
/linux-4.1.27/drivers/misc/sgi-xp/ |
H A D | xpc_sn2.c | 34 * Memory for XPC's amo variables is allocated by the MSPEC driver. These 40 * amo variables (based on XP_MAX_NPARTITIONS_SN2) to identify the senders of 41 * NOTIFY IRQs, 128 amo variables (based on XP_NASID_MASK_WORDS_SN2) to identify 42 * the senders of ACTIVATE IRQs, 1 amo variable to identify which remote 44 * local XPC and 1 amo variable to request partition deactivation. 165 xpc_receive_IRQ_amo_sn2(struct amo *amo) xpc_receive_IRQ_amo_sn2() argument 167 return FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_CLEAR); xpc_receive_IRQ_amo_sn2() 171 xpc_send_IRQ_sn2(struct amo *amo, u64 flag, int nasid, int phys_cpuid, xpc_send_IRQ_sn2() argument 179 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_OR, flag); xpc_send_IRQ_sn2() 188 ret = xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo->variable), xpc_send_IRQ_sn2() 196 static struct amo * xpc_init_IRQ_amo_sn2() 199 struct amo *amo = xpc_vars_sn2->amos_page + index; xpc_init_IRQ_amo_sn2() local 201 (void)xpc_receive_IRQ_amo_sn2(amo); /* clear amo variable */ xpc_init_IRQ_amo_sn2() 202 return amo; xpc_init_IRQ_amo_sn2() 226 * Flag the appropriate amo variable and send an IRQ to the specified node. 232 struct amo *amos = (struct amo *)__va(amos_page_pa + xpc_send_activate_IRQ_sn2() 234 sizeof(struct amo))); xpc_send_activate_IRQ_sn2() 245 struct amo *amos = (struct amo *)__va(xpc_vars_sn2->amos_page_pa + xpc_send_local_activate_IRQ_sn2() 247 sizeof(struct amo))); xpc_send_local_activate_IRQ_sn2() 291 * than one partition, we use an amo structure per partition to indicate 322 * because the write to their associated amo variable completed after the IRQ 470 struct amo *amo = (struct amo *)__va(part->sn.sn2.remote_amos_page_pa + xpc_indicate_partition_engaged_sn2() local 472 sizeof(struct amo))); xpc_indicate_partition_engaged_sn2() 476 /* set bit corresponding to our partid in remote partition's amo */ xpc_indicate_partition_engaged_sn2() 477 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_OR, xpc_indicate_partition_engaged_sn2() 486 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo-> xpc_indicate_partition_engaged_sn2() 498 struct amo *amo = (struct amo *)__va(part_sn2->remote_amos_page_pa + xpc_indicate_partition_disengaged_sn2() local 500 sizeof(struct amo))); xpc_indicate_partition_disengaged_sn2() 504 /* clear bit corresponding to our partid in remote partition's amo */ xpc_indicate_partition_disengaged_sn2() 505 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_AND, xpc_indicate_partition_disengaged_sn2() 514 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo-> xpc_indicate_partition_disengaged_sn2() 522 * bit in their engaged partitions amo. xpc_indicate_partition_disengaged_sn2() 533 struct amo *amo = xpc_vars_sn2->amos_page + xpc_assume_partition_disengaged_sn2() local 536 /* clear bit(s) based on partid mask in our partition's amo */ xpc_assume_partition_disengaged_sn2() 537 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_AND, xpc_assume_partition_disengaged_sn2() 544 struct amo *amo = xpc_vars_sn2->amos_page + xpc_partition_engaged_sn2() local 547 /* our partition's amo variable ANDed with partid mask */ xpc_partition_engaged_sn2() 548 return (FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_LOAD) & xpc_partition_engaged_sn2() 555 struct amo *amo = xpc_vars_sn2->amos_page + xpc_any_partition_engaged_sn2() local 558 /* our partition's amo variable */ xpc_any_partition_engaged_sn2() 559 return FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_LOAD) != 0; xpc_any_partition_engaged_sn2() 566 * Change protections to allow amo operations on non-Shub 1.1 systems. 569 xpc_allow_amo_ops_sn2(struct amo *amos_page) xpc_allow_amo_ops_sn2() 585 * Change protections to allow amo operations on Shub 1.1 systems. 635 struct amo *amos_page; xpc_setup_rsvd_page_sn2() 652 * The allocated amo page needs MCA reporting to remain disabled after xpc_setup_rsvd_page_sn2() 656 * on subsequent loads of XPC. This amo page is never freed, and its xpc_setup_rsvd_page_sn2() 661 amos_page = (struct amo *)TO_AMO(uncached_alloc_page(0, 1)); xpc_setup_rsvd_page_sn2() 668 * Open up amo-R/W to cpu. This is done on Shub 1.1 systems xpc_setup_rsvd_page_sn2() 673 dev_err(xpc_part, "can't allow amo operations\n"); xpc_setup_rsvd_page_sn2() 694 /* initialize the activate IRQ related amo variables */ xpc_setup_rsvd_page_sn2() 698 /* initialize the engaged remote partitions related amo variables */ xpc_setup_rsvd_page_sn2() 847 struct amo *amo = (struct amo *)__va(part_sn2->remote_amos_page_pa + xpc_request_partition_deactivation_sn2() local 849 sizeof(struct amo))); xpc_request_partition_deactivation_sn2() 853 /* set bit corresponding to our partid in remote partition's amo */ xpc_request_partition_deactivation_sn2() 854 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_OR, xpc_request_partition_deactivation_sn2() 863 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo-> xpc_request_partition_deactivation_sn2() 871 * bit in their deactivate request amo. xpc_request_partition_deactivation_sn2() 883 struct amo *amo = (struct amo *)__va(part->sn.sn2.remote_amos_page_pa + xpc_cancel_partition_deactivation_request_sn2() local 885 sizeof(struct amo))); xpc_cancel_partition_deactivation_request_sn2() 889 /* clear bit corresponding to our partid in remote partition's amo */ xpc_cancel_partition_deactivation_request_sn2() 890 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_AND, xpc_cancel_partition_deactivation_request_sn2() 899 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo-> xpc_cancel_partition_deactivation_request_sn2() 909 struct amo *amo = xpc_vars_sn2->amos_page + xpc_partition_deactivation_requested_sn2() local 912 /* our partition's amo variable ANDed with partid mask */ xpc_partition_deactivation_requested_sn2() 913 return (FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_LOAD) & xpc_partition_deactivation_requested_sn2() 1087 * Loop through the activation amo variables and process any bits 1101 struct amo *act_amos; xpc_identify_activate_IRQ_sender_sn2() 1105 /* scan through activate amo variables looking for non-zero entries */ xpc_identify_activate_IRQ_sender_sn2() 1115 /* no IRQs from nasids in this amo variable */ xpc_identify_activate_IRQ_sender_sn2() 1119 dev_dbg(xpc_part, "amo[%d] gave back 0x%lx\n", l, xpc_identify_activate_IRQ_sender_sn2() 1159 /* retry once to help avoid missing amo */ xpc_process_activate_IRQ_rcvd_sn2() 1421 (struct amo *)__va(pulled_entry->chctl_amo_pa); xpc_pull_remote_vars_part_sn2() 2435 /* open up protections for IPI and [potentially] amo operations */ xpc_init_sn2()
|
H A D | xpc.h | 132 struct amo *amos_page; /* vaddr of page of amos from MSPEC driver */ 153 unsigned long chctl_amo_pa; /* physical address of chctl flags' amo */ 700 struct amo *remote_chctl_amo_va; /* addr of remote chctl flags' amo */ 701 struct amo *local_chctl_amo_va; /* address of chctl flags' amo */ 860 * These can occur whenever an IRQ's associated amo write doesn't complete
|
H A D | xpc_main.c | 29 * came from. Thus, xpc_send_IRQ_sn2() does a remote amo write 30 * followed by an IPI. The amo indicates where data is to be pulled 31 * from, so after the IPI arrives, the remote partition checks the amo 32 * word. The IPI can actually arrive before the amo however, so other 33 * code must periodically check for this case. Also, remote amo 38 * cleanup) any errors due to the remote amo write, PIO read, and/or 286 * IRQ/amo pairs have been missed. xpc_hb_checker()
|
H A D | xp_sn2.c | 36 * (amo operations do not timeout on at least some CPUs on Shubs <= v1.2,
|
Completed in 166 milliseconds