Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Mar 2000 23:09:03 +0100 (CET)
From:      mw@kpnqwest.ch
To:        Mike Smith <msmith@freebsd.org>
Subject:   Re: AMI MegaRAID lockup? not accepting commands.
Message-ID:  <200003232209.WAA22966@mail.kpnqwest.ch>
In-Reply-To: <200003232150.NAA02123@mass.cdrom.com> from Mike Smith at "Mar 23, 2000 01:50:28 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> Can you try instead the changes that I just committed to -current?  I 
> think that the problem shows up when the controller is heavily loaded; 
> your patch will keep the load on the controller down, which may mask the 
> 'real' bug.

I tried your approach (that was what I described with "fiddling with DELAY").
I even went even further to clear that loop, but it didn't help. This is 
what I currently still have in there from these experiments:

/* from linux: The "volatile" is due to gcc bugs */
#define barrier() __asm__ __volatile__("": : :"memory")

for (i = 10000, done = 0, worked = 0; (i > 0) && !done; i--) {
        s = splbio();

        /* is the mailbox free? */
        if (sc->amr_mailbox->mb_busy == 0) {
            debug("got mailbox");
            sc->amr_mailbox64->mb64_segment = 0;
            bcopy(&ac->ac_mailbox, sc->amr_mailbox, AMR_MBOX_CMDSIZE);
            sc->amr_submit_command(sc);
            done = 1;
            sc->amr_workcount++;
            TAILQ_INSERT_TAIL(&sc->amr_work, ac, ac_link);

            /* not free, try to clean up while we wait */
        } else {
            debug("busy flag %x\n", sc->amr_mailbox->mb_busy);
            /* don't do this in here for now, it involves talking to the
             * controller to see whether there's work done, and since we
             * just saw that the controller is somewhat busy, that's perhaps
             * not such a good idea? */
            /* worked += amr_done(sc); */
        }
        splx(s);

        DELAY(100);
        barrier();
    }

    /* check here for work to be done */
    s = splbio();
    worked += amr_done(sc);
    splx(s);


This did *NOT* stop the controller from crashing. Ignore the comment above,
I'll take this amr_done call back up, but I just wanted to REALLY be sure
this loop wasn't the cause for the crash.

Markus
-- 
KPNQwest Switzerland Ltd
P.O. Box 9470, Zweierstrasse 35, CH-8036 Zuerich
Tel: +41-1-298-6030, Fax: +41-1-291-4642
Markus Wild, Manager Engineering, e-mail: markus.wild@kpnqwest.ch



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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