• Home
  • Raw
  • Download

Lines Matching refs:irq

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