svn commit: r244575 - head/sys/arm/arm
Olivier Houchard
cognet at FreeBSD.org
Sat Dec 22 01:04:29 UTC 2012
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 at 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
More information about the svn-src-all
mailing list