On 09/08/2024 19:11, Bart Van Assche wrote:
On 12/2/20 2:36 AM, John Garry wrote:
+ for (i = 0; i < nvec; i++) {
+ int irq = platform_get_irq(dev, i);
+ if (irq < 0) {
+ ret = irq;
+ goto err_free_devres;
+ }
+ ptr->irq[i] = irq;
+ }
(replying to an email from four years ago)
Why does this function call platform_get_irq(dev, i) instead of
platform_get_irq(dev, affd->pre_vectors + i)? Is there perhaps something
about the hisi_sas driver that I'm missing? I'm asking this because this
function would be useful for UFS controller drivers if the
affd->pre_vectors offset would be added when calling platform_get_irq().
int devm_platform_get_irqs_affinity(struct platform_device *dev,
struct irq_affinity *affd,
unsigned int minvec,
unsigned int maxvec,
int **irqs)
Function devm_platform_get_irqs_affinity() gets the irq number for a
total between @minvec and @maxvec interrupts, and fills them into @irqs
arg. It does not just get the interrupts for index @minvec to @maxvec only.
For context, as I remember, hisi_sas v2 hw has 128 interrupts lines.
Interrupts index [96, 112) are completion queue interrupts, which we
want to spread over all CPUs. See interrupt_init_v2_hw() in that driver
for how the control interrupts, like phy up/down, are used.