Re: [PATCH v3 08/18] cxl: IRQ allocation for guests
From: Ian Munsie <hidden>
Date: 2016-02-10 07:24:57
Acked-by: Ian Munsie <redacted>
+ /* + * Look for the interrupt number. + * On bare-metal, we know the range 0 only contains the PSL + * interrupt so, we could start counting at range 1 and initialize + * afu_irq at 1. + * In a guest, range 0 also contains AFU interrupts, so it must + * be counted for, but we initialize afu_irq at 0 to take into + * account the PSL interrupt. + * + * For code-readability, it just seems easier to go over all + * the ranges. + */
Thanks for adding that explanation :)
+ if (cpu_has_feature(CPU_FTR_HVMODE)) + alloc_count = count; + else + alloc_count = count + 1;
Almost a shame you can't reuse the afu_irq_range_start function you defined for this, but doing so would probably make the code less readable, so fine to leave this as is.
/* We've allocated all memory now, so let's do the irq allocations */
irq_name = list_first_entry(&ctx->irq_names, struct cxl_irq_name, list);
- for (r = 1; r < CXL_IRQ_RANGES; r++) {
+ for (r = afu_irq_range_start(); r < CXL_IRQ_RANGES; r++) {
hwirq = ctx->irqs.offset[r];
for (i = 0; i < ctx->irqs.range[r]; hwirq++, i++) {
- cxl_map_irq(ctx->afu->adapter, hwirq,
- cxl_irq_afu, ctx, irq_name->name);
+ if (r == 0 && i == 0)
+ /* PSL interrupt, only for guest */That comment is perhaps not as clear as it could be - the interrupt is used on either, but it's only allocated per context on PowerVM guests. Cheers, -Ian