• Home
  • Raw
  • Download

Lines Matching full:irq

30 	struct afu_irq *irq = (struct afu_irq *) data;  in afu_irq_handler()  local
33 if (irq->ev_ctx) in afu_irq_handler()
34 eventfd_signal(irq->ev_ctx, 1); in afu_irq_handler()
38 static int setup_afu_irq(struct ocxl_context *ctx, struct afu_irq *irq) in setup_afu_irq() argument
42 irq->virq = irq_create_mapping(NULL, irq->hw_irq); in setup_afu_irq()
43 if (!irq->virq) { in setup_afu_irq()
47 pr_debug("hw_irq %d mapped to virq %u\n", irq->hw_irq, irq->virq); in setup_afu_irq()
49 irq->name = kasprintf(GFP_KERNEL, "ocxl-afu-%u", irq->virq); in setup_afu_irq()
50 if (!irq->name) { in setup_afu_irq()
51 irq_dispose_mapping(irq->virq); in setup_afu_irq()
55 rc = request_irq(irq->virq, afu_irq_handler, 0, irq->name, irq); in setup_afu_irq()
57 kfree(irq->name); in setup_afu_irq()
58 irq->name = NULL; in setup_afu_irq()
59 irq_dispose_mapping(irq->virq); in setup_afu_irq()
66 static void release_afu_irq(struct afu_irq *irq) in release_afu_irq() argument
68 free_irq(irq->virq, irq); in release_afu_irq()
69 irq_dispose_mapping(irq->virq); in release_afu_irq()
70 kfree(irq->name); in release_afu_irq()
75 struct afu_irq *irq; in ocxl_afu_irq_alloc() local
78 irq = kzalloc(sizeof(struct afu_irq), GFP_KERNEL); in ocxl_afu_irq_alloc()
79 if (!irq) in ocxl_afu_irq_alloc()
89 irq->id = idr_alloc(&ctx->irq_idr, irq, 0, MAX_IRQ_PER_CONTEXT, in ocxl_afu_irq_alloc()
91 if (irq->id < 0) { in ocxl_afu_irq_alloc()
96 rc = ocxl_link_irq_alloc(ctx->afu->fn->link, &irq->hw_irq, in ocxl_afu_irq_alloc()
97 &irq->trigger_page); in ocxl_afu_irq_alloc()
101 rc = setup_afu_irq(ctx, irq); in ocxl_afu_irq_alloc()
105 *irq_offset = irq_id_to_offset(ctx, irq->id); in ocxl_afu_irq_alloc()
107 trace_ocxl_afu_irq_alloc(ctx->pasid, irq->id, irq->virq, irq->hw_irq, in ocxl_afu_irq_alloc()
113 ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq); in ocxl_afu_irq_alloc()
115 idr_remove(&ctx->irq_idr, irq->id); in ocxl_afu_irq_alloc()
118 kfree(irq); in ocxl_afu_irq_alloc()
122 static void afu_irq_free(struct afu_irq *irq, struct ocxl_context *ctx) in afu_irq_free() argument
124 trace_ocxl_afu_irq_free(ctx->pasid, irq->id); in afu_irq_free()
127 irq_id_to_offset(ctx, irq->id), in afu_irq_free()
129 release_afu_irq(irq); in afu_irq_free()
130 if (irq->ev_ctx) in afu_irq_free()
131 eventfd_ctx_put(irq->ev_ctx); in afu_irq_free()
132 ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq); in afu_irq_free()
133 kfree(irq); in afu_irq_free()
138 struct afu_irq *irq; in ocxl_afu_irq_free() local
143 irq = idr_find(&ctx->irq_idr, id); in ocxl_afu_irq_free()
144 if (!irq) { in ocxl_afu_irq_free()
148 idr_remove(&ctx->irq_idr, irq->id); in ocxl_afu_irq_free()
149 afu_irq_free(irq, ctx); in ocxl_afu_irq_free()
156 struct afu_irq *irq; in ocxl_afu_irq_free_all() local
160 idr_for_each_entry(&ctx->irq_idr, irq, id) in ocxl_afu_irq_free_all()
161 afu_irq_free(irq, ctx); in ocxl_afu_irq_free_all()
167 struct afu_irq *irq; in ocxl_afu_irq_set_fd() local
172 irq = idr_find(&ctx->irq_idr, id); in ocxl_afu_irq_set_fd()
173 if (!irq) { in ocxl_afu_irq_set_fd()
184 irq->ev_ctx = ev_ctx; in ocxl_afu_irq_set_fd()
192 struct afu_irq *irq; in ocxl_afu_irq_get_addr() local
197 irq = idr_find(&ctx->irq_idr, id); in ocxl_afu_irq_get_addr()
198 if (irq) in ocxl_afu_irq_get_addr()
199 addr = irq->trigger_page; in ocxl_afu_irq_get_addr()