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>