Yet another driver that probably wouldn't like big mem. ok?
.... Ken
Index: dev/ata/ata.c
===================================================================
RCS file: /cvs/src/sys/dev/ata/ata.c,v
retrieving revision 1.30
diff -u -p -r1.30 ata.c
--- dev/ata/ata.c 23 Jul 2010 07:47:12 -0000 1.30
+++ dev/ata/ata.c 2 Apr 2011 16:23:15 -0000
@@ -32,6 +32,7 @@
#include <sys/malloc.h>
#include <sys/device.h>
#include <sys/syslog.h>
+#include <sys/pool.h>
#include <machine/bus.h>
@@ -85,7 +86,7 @@ ata_get_params(struct ata_drive_datas *d
return CMD_ERR;
}
- tb = malloc(ATAPARAMS_SIZE, M_DEVBUF, M_NOWAIT | M_ZERO); /* XXX dma
reachable */
+ tb = dma_alloc(ATAPARAMS_SIZE, PR_NOWAIT | PR_ZERO);
if (tb == NULL)
return CMD_AGAIN;
wdc_c.flags = AT_READ | flags;
@@ -95,7 +96,7 @@ ata_get_params(struct ata_drive_datas *d
if ((ret = wdc_exec_command(drvp, &wdc_c)) != WDC_COMPLETE) {
WDCDEBUG_PRINT(("%s: wdc_exec_command failed: %d\n",
__func__, ret), DEBUG_PROBE);
- free(tb, M_DEVBUF);
+ dma_free(tb, ATAPARAMS_SIZE);
return CMD_AGAIN;
}
@@ -103,7 +104,7 @@ ata_get_params(struct ata_drive_datas *d
WDCDEBUG_PRINT(("%s: IDENTIFY failed: 0x%x\n", __func__,
wdc_c.flags), DEBUG_PROBE);
- free(tb, M_DEVBUF);
+ dma_free(tb, ATAPARAMS_SIZE);
return CMD_ERR;
} else {
#if BYTE_ORDER == BIG_ENDIAN
@@ -150,7 +151,7 @@ ata_get_params(struct ata_drive_datas *d
*p = swap16(*p);
}
- free(tb, M_DEVBUF);
+ dma_free(tb, ATAPARAMS_SIZE);
return CMD_OK;
}
}