Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Dec 2012 01:04:29 +0000 (UTC)
From:      Olivier Houchard <cognet@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r244575 - head/sys/arm/arm
Message-ID:  <201212220104.qBM14Tnc075611@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cognet
Date: Sat Dec 22 01:04:29 2012
New Revision: 244575
URL: http://svnweb.freebsd.org/changeset/base/244575

Log:
  The manpage states that bus_dmamap_create(9) returns ENOMEM if it can't
  allocate a map or mapping resources.  That seems to imply that any memory
  allocations it does must use M_NOWAIT and check for NULL.
  
  Submitted by:	Ian Lepore <freebsd@damnhippie.dyndns.org>

Modified:
  head/sys/arm/arm/busdma_machdep.c

Modified: head/sys/arm/arm/busdma_machdep.c
==============================================================================
--- head/sys/arm/arm/busdma_machdep.c	Sat Dec 22 01:03:23 2012	(r244574)
+++ head/sys/arm/arm/busdma_machdep.c	Sat Dec 22 01:04:29 2012	(r244575)
@@ -567,16 +567,24 @@ bus_dmamap_create(bus_dma_tag_t dmat, in
 	bus_dmamap_t map;
 	int error = 0;
 
-	map = uma_zalloc_arg(dmamap_zone, dmat, M_WAITOK);
+	map = uma_zalloc_arg(dmamap_zone, dmat, M_NOWAIT);
 	*mapp = map;
+	if (map == NULL)
+		return (ENOMEM);
 
 	/*
 	 * If the tag's segments haven't been allocated yet we need to do it
 	 * now, because we can't sleep for resources at map load time.
 	 */
-	if (dmat->segments == NULL)
+	if (dmat->segments == NULL) {
 		dmat->segments = malloc(dmat->nsegments * 
-		    sizeof(*dmat->segments), M_DEVBUF, M_WAITOK);
+		    sizeof(*dmat->segments), M_DEVBUF, M_NOWAIT);
+		if (dmat->segments == NULL) {
+			uma_zfree(dmamap_zone, map);
+			*mapp = NULL;
+			return (ENOMEM);
+		}
+	}
 
 	/*
 	 * Bouncing might be required if the driver asks for an active



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