Pass the correct dma tag to the load buffer function. Passing t only
authorpatrick <patrick@openbsd.org>
Thu, 1 Jun 2017 21:19:07 +0000 (21:19 +0000)
committerpatrick <patrick@openbsd.org>
Thu, 1 Jun 2017 21:19:07 +0000 (21:19 +0000)
passes the tag where the pointer to the simplebus_dmamap_load_buffer()
wrapper is stored in.  We want to call the load buffer function that
was passed from our parent device, so we have to pass the parent's tag.
Otherwise we end up in a recursive and neverending loop.

This only occurs when a simplebus attaches to a simplebus, which we
apparently didn't have so far.

sys/arch/arm64/dev/simplebus.c

index fccf11b..af2e1ff 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: simplebus.c,v 1.7 2017/04/27 10:23:19 kettenis Exp $ */
+/* $OpenBSD: simplebus.c,v 1.8 2017/06/01 21:19:07 patrick Exp $ */
 /*
  * Copyright (c) 2016 Patrick Wildt <patrick@blueri.se>
  *
@@ -291,8 +291,8 @@ simplebus_dmamap_load_buffer(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
        int firstseg = *segp;
        int error;
 
-       error = sc->sc_dmat->_dmamap_load_buffer(t, map, buf, buflen, p,
-           flags, lastaddrp, segp, first);
+       error = sc->sc_dmat->_dmamap_load_buffer(sc->sc_dmat, map, buf, buflen,
+           p, flags, lastaddrp, segp, first);
        if (error)
                return error;