Lines Matching refs:mq
109 xpc_get_gru_mq_irq_uv(struct xpc_gru_mq_uv *mq, int cpu, char *irq_name) in xpc_get_gru_mq_irq_uv() argument
111 int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_get_gru_mq_irq_uv()
114 mq->irq = uv_setup_irq(irq_name, cpu, mq->mmr_blade, mq->mmr_offset, in xpc_get_gru_mq_irq_uv()
116 if (mq->irq < 0) in xpc_get_gru_mq_irq_uv()
117 return mq->irq; in xpc_get_gru_mq_irq_uv()
119 mq->mmr_value = uv_read_global_mmr64(mmr_pnode, mq->mmr_offset); in xpc_get_gru_mq_irq_uv()
123 mq->irq = SGI_XPC_ACTIVATE; in xpc_get_gru_mq_irq_uv()
125 mq->irq = SGI_XPC_NOTIFY; in xpc_get_gru_mq_irq_uv()
129 mq->mmr_value = (unsigned long)cpu_physical_id(cpu) << 32 | mq->irq; in xpc_get_gru_mq_irq_uv()
130 uv_write_global_mmr64(mmr_pnode, mq->mmr_offset, mq->mmr_value); in xpc_get_gru_mq_irq_uv()
139 xpc_release_gru_mq_irq_uv(struct xpc_gru_mq_uv *mq) in xpc_release_gru_mq_irq_uv() argument
142 uv_teardown_irq(mq->irq); in xpc_release_gru_mq_irq_uv()
148 mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_release_gru_mq_irq_uv()
151 uv_write_global_mmr64(mmr_pnode, mq->mmr_offset, mmr_value); in xpc_release_gru_mq_irq_uv()
158 xpc_gru_mq_watchlist_alloc_uv(struct xpc_gru_mq_uv *mq) in xpc_gru_mq_watchlist_alloc_uv() argument
163 int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_gru_mq_watchlist_alloc_uv()
165 ret = sn_mq_watchlist_alloc(mmr_pnode, (void *)uv_gpa(mq->address), in xpc_gru_mq_watchlist_alloc_uv()
166 mq->order, &mq->mmr_offset); in xpc_gru_mq_watchlist_alloc_uv()
173 ret = uv_bios_mq_watchlist_alloc(uv_gpa(mq->address), in xpc_gru_mq_watchlist_alloc_uv()
174 mq->order, &mq->mmr_offset); in xpc_gru_mq_watchlist_alloc_uv()
184 mq->watchlist_num = ret; in xpc_gru_mq_watchlist_alloc_uv()
189 xpc_gru_mq_watchlist_free_uv(struct xpc_gru_mq_uv *mq) in xpc_gru_mq_watchlist_free_uv() argument
192 int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_gru_mq_watchlist_free_uv()
195 ret = uv_bios_mq_watchlist_free(mmr_pnode, mq->watchlist_num); in xpc_gru_mq_watchlist_free_uv()
198 ret = sn_mq_watchlist_free(mmr_pnode, mq->watchlist_num); in xpc_gru_mq_watchlist_free_uv()
215 struct xpc_gru_mq_uv *mq; in xpc_create_gru_mq_uv() local
218 mq = kmalloc(sizeof(struct xpc_gru_mq_uv), GFP_KERNEL); in xpc_create_gru_mq_uv()
219 if (mq == NULL) { in xpc_create_gru_mq_uv()
226 mq->gru_mq_desc = kzalloc(sizeof(struct gru_message_queue_desc), in xpc_create_gru_mq_uv()
228 if (mq->gru_mq_desc == NULL) { in xpc_create_gru_mq_uv()
236 mq->order = pg_order + PAGE_SHIFT; in xpc_create_gru_mq_uv()
237 mq_size = 1UL << mq->order; in xpc_create_gru_mq_uv()
239 mq->mmr_blade = uv_cpu_to_blade_id(cpu); in xpc_create_gru_mq_uv()
251 mq->address = page_address(page); in xpc_create_gru_mq_uv()
254 ret = xpc_gru_mq_watchlist_alloc_uv(mq); in xpc_create_gru_mq_uv()
258 ret = xpc_get_gru_mq_irq_uv(mq, cpu, irq_name); in xpc_create_gru_mq_uv()
262 ret = request_irq(mq->irq, irq_handler, 0, irq_name, NULL); in xpc_create_gru_mq_uv()
265 mq->irq, -ret); in xpc_create_gru_mq_uv()
271 mmr_value = (struct uv_IO_APIC_route_entry *)&mq->mmr_value; in xpc_create_gru_mq_uv()
272 ret = gru_create_message_queue(mq->gru_mq_desc, mq->address, mq_size, in xpc_create_gru_mq_uv()
282 xp_ret = xp_expand_memprotect(xp_pa(mq->address), mq_size); in xpc_create_gru_mq_uv()
288 return mq; in xpc_create_gru_mq_uv()
292 free_irq(mq->irq, NULL); in xpc_create_gru_mq_uv()
294 xpc_release_gru_mq_irq_uv(mq); in xpc_create_gru_mq_uv()
296 xpc_gru_mq_watchlist_free_uv(mq); in xpc_create_gru_mq_uv()
298 free_pages((unsigned long)mq->address, pg_order); in xpc_create_gru_mq_uv()
300 kfree(mq->gru_mq_desc); in xpc_create_gru_mq_uv()
302 kfree(mq); in xpc_create_gru_mq_uv()
308 xpc_destroy_gru_mq_uv(struct xpc_gru_mq_uv *mq) in xpc_destroy_gru_mq_uv() argument
315 mq_size = 1UL << mq->order; in xpc_destroy_gru_mq_uv()
316 ret = xp_restrict_memprotect(xp_pa(mq->address), mq_size); in xpc_destroy_gru_mq_uv()
320 free_irq(mq->irq, NULL); in xpc_destroy_gru_mq_uv()
321 xpc_release_gru_mq_irq_uv(mq); in xpc_destroy_gru_mq_uv()
324 xpc_gru_mq_watchlist_free_uv(mq); in xpc_destroy_gru_mq_uv()
326 pg_order = mq->order - PAGE_SHIFT; in xpc_destroy_gru_mq_uv()
327 free_pages((unsigned long)mq->address, pg_order); in xpc_destroy_gru_mq_uv()
329 kfree(mq); in xpc_destroy_gru_mq_uv()
666 gru_mq_desc->mq = NULL; in xpc_cache_remote_gru_mq_desc_uv()