Lines Matching refs:ctx

51 void cxl_release_mapping(struct cxl_context *ctx)
53 if (ctx->kernelapi && ctx->mapping)
104 struct cxl_context *ctx;
111 ctx = cxl_context_alloc();
112 if (!ctx)
115 ctx->kernelapi = true;
118 rc = cxl_context_init(ctx, afu, false);
122 return ctx;
125 kfree(ctx);
136 int cxl_release_context(struct cxl_context *ctx)
138 if (ctx->status >= STARTED)
141 cxl_context_free(ctx);
147 static irq_hw_number_t cxl_find_afu_irq(struct cxl_context *ctx, int num)
153 range = ctx->irqs.range[r];
155 return ctx->irqs.offset[r] + num;
163 int cxl_set_priv(struct cxl_context *ctx, void *priv)
165 if (!ctx)
168 ctx->priv = priv;
174 void *cxl_get_priv(struct cxl_context *ctx)
176 if (!ctx)
179 return ctx->priv;
183 int cxl_allocate_afu_irqs(struct cxl_context *ctx, int num)
189 num = ctx->afu->pp_irqs;
190 res = afu_allocate_irqs(ctx, num);
198 hwirq = cxl_find_afu_irq(ctx, 0);
200 cxl_map_irq(ctx->afu->adapter, hwirq, cxl_ops->psl_interrupt, ctx, "psl");
203 if (ctx->status == STARTED) {
205 cxl_ops->update_ivtes(ctx);
213 void cxl_free_afu_irqs(struct cxl_context *ctx)
219 hwirq = cxl_find_afu_irq(ctx, 0);
223 cxl_unmap_irq(virq, ctx);
226 afu_irq_name_free(ctx);
227 cxl_ops->release_irq_ranges(&ctx->irqs, ctx->afu->adapter);
231 int cxl_map_afu_irq(struct cxl_context *ctx, int num,
239 hwirq = cxl_find_afu_irq(ctx, num);
243 return cxl_map_irq(ctx->afu->adapter, hwirq, handler, cookie, name);
247 void cxl_unmap_afu_irq(struct cxl_context *ctx, int num, void *cookie)
252 hwirq = cxl_find_afu_irq(ctx, num);
266 int cxl_start_context(struct cxl_context *ctx, u64 wed,
272 pr_devel("%s: pe: %i\n", __func__, ctx->pe);
274 mutex_lock(&ctx->status_mutex);
275 if (ctx->status == STARTED)
282 rc = cxl_adapter_context_get(ctx->afu->adapter);
287 ctx->pid = get_task_pid(task, PIDTYPE_PID);
291 ctx->mm = get_task_mm(current);
294 cxl_context_mm_count_get(ctx);
296 if (ctx->mm) {
298 mmput(ctx->mm);
300 mm_context_add_copro(ctx->mm);
313 if ((rc = cxl_ops->attach_process(ctx, kernel, wed, 0))) {
314 put_pid(ctx->pid);
315 ctx->pid = NULL;
316 cxl_adapter_context_put(ctx->afu->adapter);
319 cxl_context_mm_count_put(ctx);
320 if (ctx->mm)
321 mm_context_remove_copro(ctx->mm);
326 ctx->status = STARTED;
328 mutex_unlock(&ctx->status_mutex);
333 int cxl_process_element(struct cxl_context *ctx)
335 return ctx->external_pe;
340 int cxl_stop_context(struct cxl_context *ctx)
342 return __detach_context(ctx);
346 void cxl_set_master(struct cxl_context *ctx)
348 ctx->master = true;
388 struct file *cxl_get_fd(struct cxl_context *ctx, struct file_operations *fops,
396 if (ctx->mapping)
421 name = kasprintf(GFP_KERNEL, "cxl:%d", ctx->pe);
422 file = cxl_getfile(name, fops, ctx, flags);
427 cxl_context_set_mapping(ctx, file->f_mapping);
443 void cxl_set_driver_ops(struct cxl_context *ctx,
447 atomic_set(&ctx->afu_driver_events, 0);
448 ctx->afu_driver_ops = ops;
452 void cxl_context_events_pending(struct cxl_context *ctx,
455 atomic_add(new_events, &ctx->afu_driver_events);
456 wake_up_all(&ctx->wq);
460 int cxl_start_work(struct cxl_context *ctx,
467 work->num_interrupts = ctx->afu->pp_irqs;
468 else if ((work->num_interrupts < ctx->afu->pp_irqs) ||
469 (work->num_interrupts > ctx->afu->irqs_max)) {
473 rc = afu_register_irqs(ctx, work->num_interrupts);
477 rc = cxl_start_context(ctx, work->work_element_descriptor, current);
479 afu_release_irqs(ctx, ctx);
487 void __iomem *cxl_psa_map(struct cxl_context *ctx)
489 if (ctx->status != STARTED)
493 __func__, ctx->psn_phys, ctx->psn_size);
494 return ioremap(ctx->psn_phys, ctx->psn_size);
504 int cxl_afu_reset(struct cxl_context *ctx)
506 struct cxl_afu *afu = ctx->afu;