summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2011-05-06 15:57:04 -0700
committerStephen Hemminger <shemminger@vyatta.com>2011-05-06 15:57:04 -0700
commitbdba1ac96e48e5d3b4cfa0b31ebafa1f8255787f (patch)
tree8c5674fdeb49e7af052eea50783cb193747e8239 /scripts
parent29848f4c36e96fb9965485a81086fb10cf72d3ae (diff)
downloadvyatta-cfg-quagga-bdba1ac96e48e5d3b4cfa0b31ebafa1f8255787f.tar.gz
vyatta-cfg-quagga-bdba1ac96e48e5d3b4cfa0b31ebafa1f8255787f.zip
Support netxen NIC irq naming convention
Bug 7062 The irq's on Netxen NIC are named: eth0[0] eth0[1] eth0[2] ... This confuses the auto IRQ affinity script.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/system/irq-affinity.pl29
1 files changed, 18 insertions, 11 deletions
diff --git a/scripts/system/irq-affinity.pl b/scripts/system/irq-affinity.pl
index a1c0793c..ff98d590 100755
--- a/scripts/system/irq-affinity.pl
+++ b/scripts/system/irq-affinity.pl
@@ -146,15 +146,9 @@ sub next_cpu {
return $cpu;
}
-# First cpu to assign for the queues
-sub first_cpu {
- my ($ifname, $numq) = @_;
-
- # For multi-queue nic's always starts with 0
- # This is less than ideal when there are more core's available
- # than number of queues (probably should barber pole);
- # but the Intel IXGBE needs CPU 0 <-> queue 0 because of flow director
- return 0 if ($numq > 1);
+# Get cpu to assign for the queues for single queue nic
+sub choose_cpu {
+ my $ifname = shift;
# For single-queue nic choose IRQ based on name
# Ideally should make decision on least loaded CPU
@@ -175,7 +169,13 @@ sub assign_multiqueue {
my $ifname = shift;
my $irqmap = shift;
my $numq = $#_;
- my $cpu = first_cpu($ifname, $numq);
+
+ # For multi-queue nic's always starts with 0
+ # This is less than ideal when there are more core's available
+ # than number of queues (probably should barber pole);
+ # but the Intel IXGBE needs CPU 0 <-> queue 0
+ # because of flow director bug.
+ my $cpu = 0;
foreach my $name (sort @_) {
my $irq = $irqmap->{$name};
@@ -200,7 +200,7 @@ sub assign_multiqueue {
# number into a CPU number.
sub assign_single {
my ( $ifname, $irq ) = @_;
- my $cpu = first_cpu($ifname, 1);
+ my $cpu = choose_cpu($ifname);
syslog( LOG_INFO, "%s: assign irq %d to cpu %d", $ifname, $irq, $cpu );
@@ -294,6 +294,13 @@ sub affinity_auto {
return;
}
+ # Netxen thought up yet another convention
+ @mirq = grep { /^$ifname\[/ } @irqnames;
+ if ( $#mirq > 0 ) {
+ assign_multiqueue( $ifname, $irqmap, @mirq );
+ return;
+ }
+
syslog(LOG_ERR, "%s: Unknown multiqueue irq naming: %s\n", $ifname,
join(' ', @irqnames));
}