Lines Matching refs:irq

35 	struct afu_irq *irq;
39 irq = idr_find(&ctx->irq_idr, irq_id);
40 if (!irq) {
45 irq->handler = handler;
46 irq->private = private;
47 irq->free_private = free_private;
60 struct afu_irq *irq = (struct afu_irq *) data;
64 if (irq->handler)
65 return irq->handler(irq->private);
70 static int setup_afu_irq(struct ocxl_context *ctx, struct afu_irq *irq)
74 irq->virq = irq_create_mapping(NULL, irq->hw_irq);
75 if (!irq->virq) {
79 pr_debug("hw_irq %d mapped to virq %u\n", irq->hw_irq, irq->virq);
81 irq->name = kasprintf(GFP_KERNEL, "ocxl-afu-%u", irq->virq);
82 if (!irq->name) {
83 irq_dispose_mapping(irq->virq);
87 rc = request_irq(irq->virq, afu_irq_handler, 0, irq->name, irq);
89 kfree(irq->name);
90 irq->name = NULL;
91 irq_dispose_mapping(irq->virq);
98 static void release_afu_irq(struct afu_irq *irq)
100 free_irq(irq->virq, irq);
101 irq_dispose_mapping(irq->virq);
102 kfree(irq->name);
107 struct afu_irq *irq;
110 irq = kzalloc(sizeof(struct afu_irq), GFP_KERNEL);
111 if (!irq)
121 irq->id = idr_alloc(&ctx->irq_idr, irq, 0, MAX_IRQ_PER_CONTEXT,
123 if (irq->id < 0) {
128 rc = ocxl_link_irq_alloc(ctx->afu->fn->link, &irq->hw_irq);
132 rc = setup_afu_irq(ctx, irq);
136 trace_ocxl_afu_irq_alloc(ctx->pasid, irq->id, irq->virq, irq->hw_irq);
139 *irq_id = irq->id;
144 ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq);
146 idr_remove(&ctx->irq_idr, irq->id);
149 kfree(irq);
154 static void afu_irq_free(struct afu_irq *irq, struct ocxl_context *ctx)
156 trace_ocxl_afu_irq_free(ctx->pasid, irq->id);
159 ocxl_irq_id_to_offset(ctx, irq->id),
161 release_afu_irq(irq);
162 if (irq->free_private)
163 irq->free_private(irq->private);
164 ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq);
165 kfree(irq);
170 struct afu_irq *irq;
174 irq = idr_find(&ctx->irq_idr, irq_id);
175 if (!irq) {
179 idr_remove(&ctx->irq_idr, irq->id);
180 afu_irq_free(irq, ctx);
188 struct afu_irq *irq;
192 idr_for_each_entry(&ctx->irq_idr, irq, id)
193 afu_irq_free(irq, ctx);
200 struct afu_irq *irq;
204 irq = idr_find(&ctx->irq_idr, irq_id);
205 if (irq) {
206 xd = irq_get_handler_data(irq->virq);