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; } }