Ongoing U320 AIC7902 Seagate ST318453LW issues, SCB timed out

Don Bowman don at sandvine.com
Wed Aug 6 08:29:50 PDT 2003


> From: Justin T. Gibbs [mailto:gibbs at scsiguy.com]
> Sent: August 6, 2003 10:59
> To: Don Bowman; 'freebsd-scsi at freebsd.org'; 'aic7xxx at 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;



More information about the freebsd-scsi mailing list