Re: [PATCH] irq: Add node_affinity CPU masks for smarter irqbalance hints
From: Yong Zhang <hidden>
Date: 2009-11-24 05:17:46
Also in:
lkml
[snip]
quoted
1) I think you should consider CONFIG_CPUMASK_OFFSTACK which will affect node_affinity. 2) It seems like this patch can't work with SPARSE_IRQ.This mechanism isn't going to be used by any internal kernel mechanism for determining interrupt placement or operation. It's purely something that either a driver can modify, or external script (through /proc), that irqbalance will make use of. If irqbalance isn't running, or the current version of irqbalance doesn't support reading node_affinity, then it won't affect the system's operation. If irqbalance does support it, it'll read whatever the supplied mask is, and then will try and balance interrupts within that mask. It will bail if the mask is invalid, or won't apply to the running system, just like how putting a bogus mask into smp_affinity is ignored. If there's something I'm missing beyond this with the two suggestions you've made (I looked into those two parameters and tried to draw conclusions), please let me know.
My two suggestions are both about your adding node_affinity. Before you can
use this element, you must initialise it firstly. You can refer how
irq_desc::affinity
is used in function alloc_desc_masks().
include/linux/irq.h:
static inline bool alloc_desc_masks(struct irq_desc *desc, int node,
bool boot)
{
gfp_t gfp = GFP_ATOMIC;
if (boot)
gfp = GFP_NOWAIT;
#ifdef CONFIG_CPUMASK_OFFSTACK
if (!alloc_cpumask_var_node(&desc->affinity, gfp, node))
return false;
#ifdef CONFIG_GENERIC_PENDING_IRQ
if (!alloc_cpumask_var_node(&desc->pending_mask, gfp, node)) {
free_cpumask_var(desc->affinity);
return false;
}
#endif
#endif
return true;
}
Thanks,
Yong
Cheers, -PJ Waskiewicz