Re: [REPORT] Adaptec and SMP problems on 2.0.35

Ricardo Galli Granada (gallir@atlas-iap.es)
Fri, 21 Aug 1998 02:44:33 +0200 (MET)


On Thu, 20 Aug 1998, Doug Ledford wrote:

> [ NOTE: a print-EIP patch for 2.0.35 would be helpful here, if someone has
> such as beast, then could they forward me a copy - DL ]

Sorry by my ignorance, do you refer to the print-EIP patch to a program to
print kernel oops from the syslogd's messages? If so, my Linux doesn't
generate any oopds (Anyway I resend a perl program from Thomas Koenig,
find it at the end of the message...).

> [ This is normally a problem with reading the SEEPROM on the aic7xxx
> controller, so if the motherboard controller uses NVRAM to store settings
> instead of a SEEPROM, then we won't be able to read it ]

I just got a new BIOS and config utililities from Intel, the server is now
in production, but when I guess I can change to a better kernel/driver
version, I will try to reconfig everything and I will send another report.

> [ On the Intel DK440LX, which is very similar in make, there are BIOS
> options to disable the controllers under advanced peripheral setup ]

No way in my current BIOS/utilities.

Thanks to everyone that sent comments.

-- A PERL PROGRAM ----

#!/usr/bin/perl
$reading = 0;
$map = "/usr/src/linux/System.map";

while (<>) {
if (($start = index($_,"Oops: ")) >=0 ) {
$block = "";
$reading = 1;
$rstart = $start;
}
if ($reading) {
$block .= substr($_, $rstart);
if (/Code: /) {
$reading = 0;
}
}
}

die "No kernel Oops found, aborting\n" unless $block;

print $block,"\n";
$block =~ s/\n\s+/ /g;

foreach(split("\n",$block)) {
if (/EIP:/) {
($dummy, $dummy, $hstr) = split(':',$_);
$fcn_name = &lookup_fcn($hstr);
print "EIP = $hstr ($fcn_name)\n";
}
elsif(/Call Trace/) {
($dummy, @addr) = split(' ',$_);
foreach $calltrace(@addr) {
$fcn_name = &lookup_fcn($calltrace);
print "Call trace = $calltrace ($fcn_name)\n";
}
}
}

sub lookup_fcn
{
local($straddr) = @_;
local($_,$name,$addr,$dummy,$saddr,$upper,$lower);

$saddr = hex($straddr);
if ($#names < 0) {
open(MAP,$map) || die "Cannot open $map:\n";
while(<MAP>) {
($addr, $dummy, $name) = split(' ');
push(@addrs,hex ($addr));
push(@names,$name);
}
}
$lower = 0;
$upper = $#addrs;
if (($saddr < $addrs[$lower]) || ($saddr > $addrs[$upper])) {
return "unknown";
}
while (1) {
if ($upper - $lower <=1) {
$diff = $saddr - $addrs[$lower];
return sprintf ("%s + 0x%4.4x",$names[$lower],$diff);
}
$middle = ($upper + $lower)/2;
if ($addrs[$middle] > $saddr) {
$upper = $middle;
}
else {
$lower = $middle;
}
}
}

--
Ricardo Galli
Member of ACM - Association for Computing Machinery
University of Balearic Islands
ATLAS Internet Access Provider
mailto:gallir@atlas-iap.es
mailto:rgalli@acm.org
http://www.atlas-iap.es

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.altern.org/andrebalsa/doc/lkml-faq.html