Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Mar 2004 13:58:38 +0100 (CET)
From:      Peter Olsson <pol@leissner.se>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        freebsd-current@freebsd.org
Subject:    Re: 5.2.1-RELEASE boot-hang with Cyclades pci card Cyclom-16YeP/RJ45
Message-ID:  <20040325135434.B52637@pol.leissner.se>
In-Reply-To: <20040325220231.G36592@gamplex.bde.org>
References:  <20040315211204.U1455@pol.leissner.se> <20040316.090601.94400079.imp@bsdimp.com> <20040324153456.Y75255@pol.leissner.se> <20040325220231.G36592@gamplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 25 Mar 2004, Bruce Evans wrote:

> On Wed, 24 Mar 2004, Peter Olsson wrote:
>
> > I have tried this now. I have a different server, a different cyclades
> > PCI card and a different port card (with 8 ports). Same boot hang problem
> > after adding the cy driver and COMPAT_ISA. Booting without acpi didn't
> > help. After a while I got this in the hung boot, if it is interesting:
> > spin lock (null) held by 0 for > 5 seconds
> > panic: spin lock held too long
> > cpuid = 0;
> > Uptime: 1s
> > Shutting down ACPI
> > Automatic reboot in 15 seconds
> >
> > Then I commented out these two lines in my kernel file:
> > options SMP
> > device apic
> > With the new kernel the server boots ok with the cyclades card
> > connected, and I get contact with the router on port 1 in the port card.
> > I didn't have to boot without acpi, just commenting out SMP and apic
> > made it work.
>
> Yikes.  I think I see the problem.  The lock is only initialized in
> the isa probe.  This is harmless in the !SMP case, since the lock is
> not used then, but it is harmful in the SMP case if there is a pci cy
> card, at least if there is isn't also an isa cy card to get the isa
> probe called.  The bug has only been there since rev.1.135 of cy.c,
> so it was in 5.2 but not 5.1.
>
> Untested quick fix:

This fix solves the boot hang problem with SMP and apic in the kernel.

Thanks!

> %%%
> Index: cy.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/i386/isa/cy.c,v
> retrieving revision 1.140
> diff -u -2 -r1.140 cy.c
> --- cy.c	21 Feb 2004 21:10:50 -0000	1.140
> +++ cy.c	25 Mar 2004 11:18:51 -0000
> @@ -429,10 +441,4 @@
>  	cy_addr	iobase;
>
> -	while (sio_inited != 2)
> -		if (atomic_cmpset_int(&sio_inited, 0, 1)) {
> -			mtx_init(&sio_lock, driver_name, NULL, MTX_SPIN);
> -			atomic_store_rel_int(&sio_inited, 2);
> -		}
> -
>  	iobase = (cy_addr)dev->id_maddr;
>
> %%%
>
> > We can live without SMP and apic if they are only in the kernel for
> > multiple CPU support. By the way, does Hyper Threading in the CPU
> > require SMP/apic?
>
> It needs SMP, but neither SMP nor Hyper Threading shouldn't need apic
> in theory (they used to).
>
> Bruce
>

-- 
Peter Olsson             pol@leissner.se
CCIE #8963               +46 520 500511
Leissner Data AB         +46 701 809511



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040325135434.B52637>