Searched refs:amo (Results 1 - 5 of 5) sorted by relevance

/linux-4.1.27/arch/ia64/include/asm/sn/
H A Dmspec.h35 * 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 Dxpc_sn2.c34 * 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 Dxpc.h132 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 Dxpc_main.c29 * 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 Dxp_sn2.c36 * (amo operations do not timeout on at least some CPUs on Shubs <= v1.2,

Completed in 166 milliseconds