summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormycroft <mycroft@NetBSD.org>1999-03-22 07:06:09 +0000
committermycroft <mycroft@NetBSD.org>1999-03-22 07:06:09 +0000
commitee5f90d04c44fe85f88771069fe6db0ba522b0db (patch)
treef233d7930c341a50909f808150cdf4812510750e /sys/dev
parent2343b503e6f944596663dfa5494e389c7b5bb610 (diff)
If bus_dmamap_create() fails, free the DMA channel.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/isa/isadma.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/isa/isadma.c b/sys/dev/isa/isadma.c
index 129869fb763..b8bad4cd1e9 100644
--- a/sys/dev/isa/isadma.c
+++ b/sys/dev/isa/isadma.c
@@ -1,4 +1,4 @@
-/* $NetBSD: isadma.c,v 1.41 1999/02/22 02:33:48 mycroft Exp $ */
+/* $NetBSD: isadma.c,v 1.42 1999/03/22 07:06:09 mycroft Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -245,6 +245,7 @@ _isa_dmamap_create(ids, chan, size, flags)
int flags;
{
bus_size_t maxsize;
+ int error;
if (chan < 0 || chan > 7) {
printf("%s: bogus drq %d\n", ids->ids_dev->dv_xname, chan);
@@ -267,8 +268,13 @@ _isa_dmamap_create(ids, chan, size, flags)
ISA_DMA_DRQ_ALLOC(ids, chan);
- return (bus_dmamap_create(ids->ids_dmat, size, 1, size, maxsize,
- flags, &ids->ids_dmamaps[chan]));
+ error = bus_dmamap_create(ids->ids_dmat, size, 1, size, maxsize,
+ flags, &ids->ids_dmamaps[chan]);
+
+ if (error)
+ ISA_DMA_DRQ_FREE(ids, chan);
+
+ return (error);
}
void