Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Aug 2003 11:29:42 -0400 
From:      Don Bowman <don@sandvine.com>
To:        "'Justin T. Gibbs'" <gibbs@scsiguy.com>, Don Bowman <don@sandvine.com>, "'freebsd-scsi@freebsd.org'" <freebsd-scsi@freebsd.org>, "'aic7xxx@freebsd.org'" <aic7xxx@freebsd.org>
Subject:   RE: Ongoing U320 AIC7902 Seagate ST318453LW issues, SCB timed out
Message-ID:  <FE045D4D9F7AED4CBFF1B3B813C853370274216B@mail.sandvine.com>

next in thread | raw e-mail | index | archive | help
> From: Justin T. Gibbs [mailto:gibbs@scsiguy.com]
> Sent: August 6, 2003 10:59
> To: Don Bowman; 'freebsd-scsi@freebsd.org'; 'aic7xxx@freebsd.org'
> Subject: RE: Ongoing U320 AIC7902 Seagate ST318453LW issues, SCB timed
> out
> 
> 
> > I'm continuing to test without the throttle. I'm @ a loss for why
> > it tracks some systems and not others.
> > 
> > There doesn't seem to be a reliable way to drop the number of
> > tags since the system may not always come up. I don't think
> > there's an option in the kernel to do so.
> 
> Just add a call to camcontrol early in the rc process, prior to
> fsck starting up.  camcontrol is on the root filesystem.  You can
> also modify the ahd driver to tell cam that it can only handle 32
> commands per-target.

I offer this patch to make a loader tunable out of the maximum
tags supported.

$ cvs diff -u3 aic79xx_osm.c 
Index: aic79xx_osm.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/aic7xxx/aic79xx_osm.c,v
retrieving revision 1.3.2.3.1000.3
diff -u -3 -r1.3.2.3.1000.3 aic79xx_osm.c
--- aic79xx_osm.c       28 Jul 2003 00:26:42 -0000      1.3.2.3.1000.3
+++ aic79xx_osm.c       6 Aug 2003 15:28:44 -0000
@@ -119,10 +119,17 @@
        struct cam_path *path;
        long s;
        int count;
+       int max_tags = 256; /* Controller can really handle 512 transactions
+                              per device, but CAM is still using a byte
+                              to hold the max tag depth field
+                            */
 
        count = 0;
        sim = NULL;
 
+       sprintf(ahd_info, "hw.ahd%d.max_tags",
device_get_unit(ahd->dev_softc));
+       TUNABLE_INT_FETCH(ahd_info, &max_tags);
+
        ahd_controller_info(ahd, ahd_info);
        printf("%s\n", ahd_info);
        ahd_lock(ahd, &s);
@@ -139,7 +146,7 @@
         */
        sim = cam_sim_alloc(ahd_action, ahd_poll, "ahd", ahd,
                            device_get_unit(ahd->dev_softc),
-                           1, /*XXX*/256, devq);
+                           1, max_tags, devq);
        if (sim == NULL) {
                cam_simq_free(devq);
                goto fail;



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