Lines Matching refs:mq
112 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
114 int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_get_gru_mq_irq_uv()
117 mq->irq = uv_setup_irq(irq_name, cpu, mq->mmr_blade, mq->mmr_offset, in xpc_get_gru_mq_irq_uv()
119 if (mq->irq < 0) in xpc_get_gru_mq_irq_uv()
120 return mq->irq; in xpc_get_gru_mq_irq_uv()
122 mq->mmr_value = uv_read_global_mmr64(mmr_pnode, mq->mmr_offset); in xpc_get_gru_mq_irq_uv()
126 mq->irq = SGI_XPC_ACTIVATE; in xpc_get_gru_mq_irq_uv()
128 mq->irq = SGI_XPC_NOTIFY; in xpc_get_gru_mq_irq_uv()
132 mq->mmr_value = (unsigned long)cpu_physical_id(cpu) << 32 | mq->irq; in xpc_get_gru_mq_irq_uv()
133 uv_write_global_mmr64(mmr_pnode, mq->mmr_offset, mq->mmr_value); in xpc_get_gru_mq_irq_uv()
142 xpc_release_gru_mq_irq_uv(struct xpc_gru_mq_uv *mq) in xpc_release_gru_mq_irq_uv() argument
145 uv_teardown_irq(mq->irq); in xpc_release_gru_mq_irq_uv()
151 mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_release_gru_mq_irq_uv()
154 uv_write_global_mmr64(mmr_pnode, mq->mmr_offset, mmr_value); in xpc_release_gru_mq_irq_uv()
161 xpc_gru_mq_watchlist_alloc_uv(struct xpc_gru_mq_uv *mq) in xpc_gru_mq_watchlist_alloc_uv() argument
166 int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_gru_mq_watchlist_alloc_uv()
168 ret = sn_mq_watchlist_alloc(mmr_pnode, (void *)uv_gpa(mq->address), in xpc_gru_mq_watchlist_alloc_uv()
169 mq->order, &mq->mmr_offset); in xpc_gru_mq_watchlist_alloc_uv()
176 ret = uv_bios_mq_watchlist_alloc(uv_gpa(mq->address), in xpc_gru_mq_watchlist_alloc_uv()
177 mq->order, &mq->mmr_offset); in xpc_gru_mq_watchlist_alloc_uv()
187 mq->watchlist_num = ret; in xpc_gru_mq_watchlist_alloc_uv()
192 xpc_gru_mq_watchlist_free_uv(struct xpc_gru_mq_uv *mq) in xpc_gru_mq_watchlist_free_uv() argument
195 int mmr_pnode = uv_blade_to_pnode(mq->mmr_blade); in xpc_gru_mq_watchlist_free_uv()
198 ret = uv_bios_mq_watchlist_free(mmr_pnode, mq->watchlist_num); in xpc_gru_mq_watchlist_free_uv()
201 ret = sn_mq_watchlist_free(mmr_pnode, mq->watchlist_num); in xpc_gru_mq_watchlist_free_uv()
218 struct xpc_gru_mq_uv *mq; in xpc_create_gru_mq_uv() local
221 mq = kmalloc(sizeof(struct xpc_gru_mq_uv), GFP_KERNEL); in xpc_create_gru_mq_uv()
222 if (mq == NULL) { in xpc_create_gru_mq_uv()
229 mq->gru_mq_desc = kzalloc(sizeof(struct gru_message_queue_desc), in xpc_create_gru_mq_uv()
231 if (mq->gru_mq_desc == NULL) { in xpc_create_gru_mq_uv()
239 mq->order = pg_order + PAGE_SHIFT; in xpc_create_gru_mq_uv()
240 mq_size = 1UL << mq->order; in xpc_create_gru_mq_uv()
242 mq->mmr_blade = uv_cpu_to_blade_id(cpu); in xpc_create_gru_mq_uv()
254 mq->address = page_address(page); in xpc_create_gru_mq_uv()
257 ret = xpc_gru_mq_watchlist_alloc_uv(mq); in xpc_create_gru_mq_uv()
261 ret = xpc_get_gru_mq_irq_uv(mq, cpu, irq_name); in xpc_create_gru_mq_uv()
265 ret = request_irq(mq->irq, irq_handler, 0, irq_name, NULL); in xpc_create_gru_mq_uv()
268 mq->irq, -ret); in xpc_create_gru_mq_uv()
274 mmr_value = (struct uv_IO_APIC_route_entry *)&mq->mmr_value; in xpc_create_gru_mq_uv()
275 ret = gru_create_message_queue(mq->gru_mq_desc, mq->address, mq_size, in xpc_create_gru_mq_uv()
285 xp_ret = xp_expand_memprotect(xp_pa(mq->address), mq_size); in xpc_create_gru_mq_uv()
291 return mq; in xpc_create_gru_mq_uv()
295 free_irq(mq->irq, NULL); in xpc_create_gru_mq_uv()
297 xpc_release_gru_mq_irq_uv(mq); in xpc_create_gru_mq_uv()
299 xpc_gru_mq_watchlist_free_uv(mq); in xpc_create_gru_mq_uv()
301 free_pages((unsigned long)mq->address, pg_order); in xpc_create_gru_mq_uv()
303 kfree(mq->gru_mq_desc); in xpc_create_gru_mq_uv()
305 kfree(mq); in xpc_create_gru_mq_uv()
311 xpc_destroy_gru_mq_uv(struct xpc_gru_mq_uv *mq) in xpc_destroy_gru_mq_uv() argument
318 mq_size = 1UL << mq->order; in xpc_destroy_gru_mq_uv()
319 ret = xp_restrict_memprotect(xp_pa(mq->address), mq_size); in xpc_destroy_gru_mq_uv()
323 free_irq(mq->irq, NULL); in xpc_destroy_gru_mq_uv()
324 xpc_release_gru_mq_irq_uv(mq); in xpc_destroy_gru_mq_uv()
327 xpc_gru_mq_watchlist_free_uv(mq); in xpc_destroy_gru_mq_uv()
329 pg_order = mq->order - PAGE_SHIFT; in xpc_destroy_gru_mq_uv()
330 free_pages((unsigned long)mq->address, pg_order); in xpc_destroy_gru_mq_uv()
332 kfree(mq); in xpc_destroy_gru_mq_uv()
670 gru_mq_desc->mq = NULL; in xpc_cache_remote_gru_mq_desc_uv()