Messages in this thread Patch in this message | | | Date | Mon, 9 Mar 1998 11:03:03 +0100 (MET) | From | Gabriel Paubert <> | Subject | Re: Boot Problem with 2.1.89 |
| |
On Sun, 8 Mar 1998, Don Fisher wrote:
> I have ASUS P55T2P4D two processor mother board with a > Adaptec 1542B SCSI controller. The only devices on the SCSI > controller are the two tape drives that show below. When > the system boots it halts leaving the following display > (copied from my Camcorder so it may not be exact :-() > > vendor: Exabyte Model: EXB-8505BSQANXR1 Rev: 0781 > Type: Sequential-Access ANSI SCSI > revision: > Vendor: Segate Model: DAT 01106-XXX Rev: 703b > Type: Sequential-Access ANSI SCSI > revision: > scsi detected total. > Unable to handle kernel paging request an virtual address > 33344544
In human readable form , it is "DE43". Let me guess, you are using gcc-2.8 or egcs and the de4x5 network driver ? (Last one confirmed after looking at the config). So this is the known problem with gcc-2.8/egcs and string.h. Since de4x5 has been updated in the 2.1.88->2.1.89 patch, it's becoming quite clear (after all it is this driver which started the whole thread).
I have an ad-hoc patch (attached) which worked with the driver in November. It cures the code generation in _this_ case, but it might not patch cleanly now. It's an ad-hoc hack, but declaring the signatures array as static simply makes the problem disappear (and also make the code shorter by avoiding an array initialization in function entry code).
Gabriel.
--- linux-2.0.30/drivers/net/de4x5.c.virgin Sun Oct 5 18:39:18 1997 +++ linux-2.0.30/drivers/net/de4x5.c Sun Oct 5 18:54:38 1997 @@ -3026,10 +3026,11 @@ /* ** Look for a particular board name in the EISA configuration space */ +static c_char * const signatures[] = DE4X5_SIGNATURE; + static int EISA_signature(char *name, s32 eisa_id) { - c_char *signatures[] = DE4X5_SIGNATURE; char ManCode[DE4X5_STRLEN]; union { s32 ID; @@ -3064,8 +3065,7 @@ static int PCI_signature(char *name, struct bus_type *lp) { - c_char *de4x5_signatures[] = DE4X5_SIGNATURE; - int i, status = 0, siglen = sizeof(de4x5_signatures)/sizeof(c_char *); + int i, status = 0, siglen = sizeof(signatures)/sizeof(c_char *); if (lp->chipset == DC21040) { strcpy(name, "DE434/5"); @@ -3079,7 +3079,7 @@ } name[8] = '\0'; for (i=0; i<siglen; i++) { - if (strstr(name,de4x5_signatures[i])!=NULL) break; + if (strstr(name,signatures[i])!=NULL) break; } if (i == siglen) { if (dec_only) {
| |