Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Jun 2012 09:42:57 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r237186 - stable/9/sys/dev/sym
Message-ID:  <201206170942.q5H9gv5N097570@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Sun Jun 17 09:42:56 2012
New Revision: 237186
URL: http://svn.freebsd.org/changeset/base/237186

Log:
  MFC: r237101
  
  Fix a braino in r236469 (MFC'ed to stable/9 in r236468); the number of
  DMA tags required for handling MAXPHYS should be based on PAGE_SIZE rather
  than SYM_CONF_DMA_BOUNDARY.
  While at it, reuse the SYM_CONF_MAX_SG macro for specifying the maximum
  number of DMA tags so sym(4) itself doesn't size memory beyond what's
  required for handling MAXPHYS.
  
  PR:		168928

Modified:
  stable/9/sys/dev/sym/sym_conf.h
  stable/9/sys/dev/sym/sym_hipd.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/amd64/include/xen/   (props changed)
  stable/9/sys/boot/   (props changed)
  stable/9/sys/boot/i386/efi/   (props changed)
  stable/9/sys/boot/ia64/efi/   (props changed)
  stable/9/sys/boot/ia64/ski/   (props changed)
  stable/9/sys/boot/powerpc/boot1.chrp/   (props changed)
  stable/9/sys/boot/powerpc/ofw/   (props changed)
  stable/9/sys/cddl/contrib/opensolaris/   (props changed)
  stable/9/sys/conf/   (props changed)
  stable/9/sys/contrib/dev/acpica/   (props changed)
  stable/9/sys/contrib/octeon-sdk/   (props changed)
  stable/9/sys/contrib/pf/   (props changed)
  stable/9/sys/contrib/x86emu/   (props changed)
  stable/9/sys/dev/   (props changed)
  stable/9/sys/dev/e1000/   (props changed)
  stable/9/sys/dev/ixgbe/   (props changed)
  stable/9/sys/fs/   (props changed)
  stable/9/sys/fs/ntfs/   (props changed)
  stable/9/sys/modules/   (props changed)

Modified: stable/9/sys/dev/sym/sym_conf.h
==============================================================================
--- stable/9/sys/dev/sym/sym_conf.h	Sun Jun 17 07:14:58 2012	(r237185)
+++ stable/9/sys/dev/sym/sym_conf.h	Sun Jun 17 09:42:56 2012	(r237186)
@@ -90,11 +90,12 @@
 #define SYM_CONF_DMA_BOUNDARY	(1UL << 24)
 
 /*
- *  Max number of scatter/gather entries for en IO.
+ *  Max number of scatter/gather entries for an I/O.
  *  Each entry costs 8 bytes in the internal CCB data structure.
- *  For now 65 should suffice given the BSD O/Ses capabilities.
+ *  We use at most 33 segments but also no more than required for handling
+ *  MAXPHYS.
  */
-#define SYM_CONF_MAX_SG		(33)
+#define	SYM_CONF_MAX_SG		(MIN(33, (MAXPHYS / PAGE_SIZE) + 1))
 
 /*
  *  Max number of targets.

Modified: stable/9/sys/dev/sym/sym_hipd.c
==============================================================================
--- stable/9/sys/dev/sym/sym_hipd.c	Sun Jun 17 07:14:58 2012	(r237185)
+++ stable/9/sys/dev/sym/sym_hipd.c	Sun Jun 17 09:42:56 2012	(r237186)
@@ -1609,7 +1609,6 @@ struct sym_hcb {
 	u_int	features;	/* Chip features map		*/
 	u_char	myaddr;		/* SCSI id of the adapter	*/
 	u_char	maxburst;	/* log base 2 of dwords burst	*/
-	u_char	maxsegcnt;	/* Max DMA S/G segments		*/
 	u_char	maxwide;	/* Maximum transfer width	*/
 	u_char	minsync;	/* Min sync period factor (ST)	*/
 	u_char	maxsync;	/* Max sync period factor (ST)	*/
@@ -8135,7 +8134,7 @@ static void sym_action2(struct cam_sim *
 			cpi->xport_specific.spi.ppr_options =
 			    SID_SPI_CLOCK_DT_ST;
 		}
-		cpi->maxio = np->maxsegcnt * SYM_CONF_DMA_BOUNDARY;
+		cpi->maxio = SYM_CONF_MAX_SG * PAGE_SIZE;
 		sym_xpt_done2(np, ccb, CAM_REQ_CMP);
 		break;
 	case XPT_ABORT:
@@ -8536,11 +8535,9 @@ sym_pci_attach(device_t dev)
 	/*
 	 *  Allocate a tag for the DMA of user data.
 	 */
-	np->maxsegcnt = MIN(SYM_CONF_MAX_SG,
-	    (MAXPHYS / SYM_CONF_DMA_BOUNDARY) + 1);
 	if (bus_dma_tag_create(np->bus_dmat, 1, SYM_CONF_DMA_BOUNDARY,
 	    BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
-	    BUS_SPACE_MAXSIZE, np->maxsegcnt, SYM_CONF_DMA_BOUNDARY,
+	    BUS_SPACE_MAXSIZE, SYM_CONF_MAX_SG, SYM_CONF_DMA_BOUNDARY,
 	    BUS_DMA_ALLOCNOW, busdma_lock_mutex, &np->mtx, &np->data_dmat)) {
 		device_printf(dev, "failed to create DMA tag.\n");
 		goto attach_failed;



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