Lines Matching +full:compare +full:- +full:and +full:- +full:swap
1 // SPDX-License-Identifier: GPL-2.0
35 u32 ind; /* u32 because of compare-and-swap performance */
36 atomic_t count; /* use count, 0 or 1 for non-shared indicators */
67 atomic_dec(&ind->count); in put_indicator()
72 return irq_ptr->dsci == &q_indicators[TIQDIO_SHARED_IND].ind; in references_shared_dsci()
81 if (*irq_ptr->dsci) in test_nonshared_ind()
95 * tiqdio_thinint_handler - thin interrupt handler for qdio
97 * @tpi_info: interrupt information (e.g. floating vs directed -- unused)
118 if (!*irq->dsci) in tiqdio_thinint_handler()
121 xchg(irq->dsci, 0); in tiqdio_thinint_handler()
125 irq->last_data_irq_time = irq_time; in tiqdio_thinint_handler()
139 struct chsc_scssc_area *scssc = (void *)irq_ptr->chsc_page; in set_subchannel_ind()
148 subchannel_indicator_addr = virt_to_phys(irq_ptr->dsci); in set_subchannel_ind()
151 rc = chsc_sadc(irq_ptr->schid, scssc, summary_indicator_addr, in set_subchannel_ind()
154 DBF_ERROR("%4x SSI r:%4x", irq_ptr->schid.sch_no, in set_subchannel_ind()
155 scssc->response.code); in set_subchannel_ind()
173 irq_ptr->dsci = get_indicator(); in qdio_establish_thinint()
174 DBF_HEX(&irq_ptr->dsci, sizeof(void *)); in qdio_establish_thinint()
178 put_indicator(irq_ptr->dsci); in qdio_establish_thinint()
183 list_add_rcu(&irq_ptr->entry, &tiq_list); in qdio_establish_thinint()
194 list_del_rcu(&irq_ptr->entry); in qdio_shutdown_thinint()
200 put_indicator(irq_ptr->dsci); in qdio_shutdown_thinint()
210 return -ENOMEM; in qdio_thinint_init()