Lines Matching refs:irq

34 	struct afu_irq *irq;
38 irq = idr_find(&ctx->irq_idr, irq_id);
39 if (!irq) {
44 irq->handler = handler;
45 irq->private = private;
46 irq->free_private = free_private;
59 struct afu_irq *irq = (struct afu_irq *) data;
63 if (irq->handler)
64 return irq->handler(irq->private);
69 static int setup_afu_irq(struct ocxl_context *ctx, struct afu_irq *irq)
73 irq->virq = irq_create_mapping(NULL, irq->hw_irq);
74 if (!irq->virq) {
78 pr_debug("hw_irq %d mapped to virq %u\n", irq->hw_irq, irq->virq);
80 irq->name = kasprintf(GFP_KERNEL, "ocxl-afu-%u", irq->virq);
81 if (!irq->name) {
82 irq_dispose_mapping(irq->virq);
86 rc = request_irq(irq->virq, afu_irq_handler, 0, irq->name, irq);
88 kfree(irq->name);
89 irq->name = NULL;
90 irq_dispose_mapping(irq->virq);
97 static void release_afu_irq(struct afu_irq *irq)
99 free_irq(irq->virq, irq);
100 irq_dispose_mapping(irq->virq);
101 kfree(irq->name);
106 struct afu_irq *irq;
109 irq = kzalloc(sizeof(struct afu_irq), GFP_KERNEL);
110 if (!irq)
120 irq->id = idr_alloc(&ctx->irq_idr, irq, 0, MAX_IRQ_PER_CONTEXT,
122 if (irq->id < 0) {
127 rc = ocxl_link_irq_alloc(ctx->afu->fn->link, &irq->hw_irq);
131 rc = setup_afu_irq(ctx, irq);
135 trace_ocxl_afu_irq_alloc(ctx->pasid, irq->id, irq->virq, irq->hw_irq);
138 *irq_id = irq->id;
143 ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq);
145 idr_remove(&ctx->irq_idr, irq->id);
148 kfree(irq);
153 static void afu_irq_free(struct afu_irq *irq, struct ocxl_context *ctx)
155 trace_ocxl_afu_irq_free(ctx->pasid, irq->id);
158 ocxl_irq_id_to_offset(ctx, irq->id),
160 release_afu_irq(irq);
161 if (irq->free_private)
162 irq->free_private(irq->private);
163 ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq);
164 kfree(irq);
169 struct afu_irq *irq;
173 irq = idr_find(&ctx->irq_idr, irq_id);
174 if (!irq) {
178 idr_remove(&ctx->irq_idr, irq->id);
179 afu_irq_free(irq, ctx);
187 struct afu_irq *irq;
191 idr_for_each_entry(&ctx->irq_idr, irq, id)
192 afu_irq_free(irq, ctx);
199 struct afu_irq *irq;
203 irq = idr_find(&ctx->irq_idr, irq_id);
204 if (irq) {
205 xd = irq_get_handler_data(irq->virq);