Eliminate the use of M_TEMP.

This commit is contained in:
Scott Long 2007-05-14 21:48:53 +00:00
parent c918e9f747
commit 0dd50e9b5e
6 changed files with 122 additions and 115 deletions

View File

@ -102,7 +102,8 @@ periphdriver_register(void *data)
int ndrivers;
ndrivers = nperiph_drivers + 2;
newdrivers = malloc(sizeof(*newdrivers) * ndrivers, M_TEMP, M_WAITOK);
newdrivers = malloc(sizeof(*newdrivers) * ndrivers, M_CAMPERIPH,
M_WAITOK);
if (periph_drivers)
bcopy(periph_drivers, newdrivers,
sizeof(*newdrivers) * nperiph_drivers);
@ -111,7 +112,7 @@ periphdriver_register(void *data)
old = periph_drivers;
periph_drivers = newdrivers;
if (old)
free(old, M_TEMP);
free(old, M_CAMPERIPH);
nperiph_drivers++;
}

View File

@ -1533,7 +1533,7 @@ xpt_init(void *dummy)
*/
xsoftc.xpt_config_hook =
(struct intr_config_hook *)malloc(sizeof(struct intr_config_hook),
M_TEMP, M_NOWAIT | M_ZERO);
M_CAMXPT, M_NOWAIT | M_ZERO);
if (xsoftc.xpt_config_hook == NULL) {
printf("xpt_init: Cannot malloc config hook "
"- failing attach\n");
@ -1542,7 +1542,7 @@ xpt_init(void *dummy)
xsoftc.xpt_config_hook->ich_func = xpt_config;
if (config_intrhook_establish(xsoftc.xpt_config_hook) != 0) {
free (xsoftc.xpt_config_hook, M_TEMP);
free (xsoftc.xpt_config_hook, M_CAMXPT);
printf("xpt_init: config_intrhook_establish failed "
"- failing attach\n");
}
@ -5243,7 +5243,7 @@ xpt_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
/* Save some state for use while we probe for devices */
scan_info = (xpt_scan_bus_info *)
malloc(sizeof(xpt_scan_bus_info), M_TEMP, M_NOWAIT);
malloc(sizeof(xpt_scan_bus_info), M_CAMXPT, M_NOWAIT);
scan_info->request_ccb = request_ccb;
scan_info->cpi = &work_ccb->cpi;
@ -5277,7 +5277,7 @@ xpt_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
printf("xpt_scan_bus: xpt_create_path failed"
" with status %#x, bus scan halted\n",
status);
free(scan_info, M_TEMP);
free(scan_info, M_CAMXPT);
request_ccb->ccb_h.status = status;
xpt_free_ccb(work_ccb);
xpt_done(request_ccb);
@ -5285,7 +5285,7 @@ xpt_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
}
work_ccb = xpt_alloc_ccb_nowait();
if (work_ccb == NULL) {
free(scan_info, M_TEMP);
free(scan_info, M_CAMXPT);
xpt_free_path(path);
request_ccb->ccb_h.status = CAM_RESRC_UNAVAIL;
xpt_done(request_ccb);
@ -5398,7 +5398,7 @@ xpt_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
xpt_free_ccb(request_ccb);
xpt_free_ccb((union ccb *)scan_info->cpi);
request_ccb = scan_info->request_ccb;
free(scan_info, M_TEMP);
free(scan_info, M_CAMXPT);
request_ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(request_ccb);
break;
@ -5417,7 +5417,7 @@ xpt_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
xpt_free_ccb(request_ccb);
xpt_free_ccb((union ccb *)scan_info->cpi);
request_ccb = scan_info->request_ccb;
free(scan_info, M_TEMP);
free(scan_info, M_CAMXPT);
request_ccb->ccb_h.status = status;
xpt_done(request_ccb);
break;
@ -5518,17 +5518,17 @@ xpt_scan_lun(struct cam_periph *periph, struct cam_path *path,
}
if (request_ccb == NULL) {
request_ccb = malloc(sizeof(union ccb), M_TEMP, M_NOWAIT);
request_ccb = malloc(sizeof(union ccb), M_CAMXPT, M_NOWAIT);
if (request_ccb == NULL) {
xpt_print(path, "xpt_scan_lun: can't allocate CCB, "
"can't continue\n");
return;
}
new_path = malloc(sizeof(*new_path), M_TEMP, M_NOWAIT);
new_path = malloc(sizeof(*new_path), M_CAMXPT, M_NOWAIT);
if (new_path == NULL) {
xpt_print(path, "xpt_scan_lun: can't allocate path, "
"can't continue\n");
free(request_ccb, M_TEMP);
free(request_ccb, M_CAMXPT);
return;
}
status = xpt_compile_path(new_path, xpt_periph,
@ -5539,8 +5539,8 @@ xpt_scan_lun(struct cam_periph *periph, struct cam_path *path,
if (status != CAM_REQ_CMP) {
xpt_print(path, "xpt_scan_lun: can't compile path, "
"can't continue\n");
free(request_ccb, M_TEMP);
free(new_path, M_TEMP);
free(request_ccb, M_CAMXPT);
free(new_path, M_CAMXPT);
return;
}
xpt_setup_ccb(&request_ccb->ccb_h, new_path, /*priority*/ 1);
@ -5575,8 +5575,8 @@ static void
xptscandone(struct cam_periph *periph, union ccb *done_ccb)
{
xpt_release_path(done_ccb->ccb_h.path);
free(done_ccb->ccb_h.path, M_TEMP);
free(done_ccb, M_TEMP);
free(done_ccb->ccb_h.path, M_CAMXPT);
free(done_ccb, M_CAMXPT);
}
static cam_status
@ -5598,7 +5598,7 @@ proberegister(struct cam_periph *periph, void *arg)
return(CAM_REQ_CMP_ERR);
}
softc = (probe_softc *)malloc(sizeof(*softc), M_TEMP, M_NOWAIT);
softc = (probe_softc *)malloc(sizeof(*softc), M_CAMXPT, M_NOWAIT);
if (softc == NULL) {
printf("proberegister: Unable to probe new device. "
@ -5751,7 +5751,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
if (softc->action == PROBE_INQUIRY_BASIC_DV1
|| softc->action == PROBE_INQUIRY_BASIC_DV2) {
inq_buf = malloc(inquiry_len, M_TEMP, M_NOWAIT);
inq_buf = malloc(inquiry_len, M_CAMXPT, M_NOWAIT);
}
if (inq_buf == NULL) {
xpt_print(periph->path, "malloc failure- skipping Basic"
@ -5785,7 +5785,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
mode_buf_len = sizeof(struct scsi_mode_header_6)
+ sizeof(struct scsi_mode_blk_desc)
+ sizeof(struct scsi_control_page);
mode_buf = malloc(mode_buf_len, M_TEMP, M_NOWAIT);
mode_buf = malloc(mode_buf_len, M_CAMXPT, M_NOWAIT);
if (mode_buf != NULL) {
scsi_mode_sense(csio,
/*retries*/4,
@ -5817,7 +5817,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
if ((device->quirk->quirks & CAM_QUIRK_NOSERIAL) == 0)
serial_buf = (struct scsi_vpd_unit_serial_number *)
malloc(sizeof(*serial_buf), M_TEMP,
malloc(sizeof(*serial_buf), M_CAMXPT,
M_NOWAIT | M_ZERO);
if (serial_buf != NULL) {
@ -6107,7 +6107,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
/*count*/1, /*run_queue*/TRUE);
}
xpt_release_ccb(done_ccb);
free(mode_hdr, M_TEMP);
free(mode_hdr, M_CAMXPT);
softc->action = PROBE_SERIAL_NUM;
xpt_schedule(periph, priority);
return;
@ -6194,7 +6194,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
xpt_async(AC_LOST_DEVICE, path, NULL);
}
if (serial_buf != NULL)
free(serial_buf, M_TEMP);
free(serial_buf, M_CAMXPT);
if (changed != 0) {
/*
@ -6283,12 +6283,12 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
/* give up */
softc->action = PROBE_DV_EXIT;
}
free(nbuf, M_TEMP);
free(nbuf, M_CAMXPT);
xpt_release_ccb(done_ccb);
xpt_schedule(periph, priority);
return;
}
free(nbuf, M_TEMP);
free(nbuf, M_CAMXPT);
if (softc->action == PROBE_INQUIRY_BASIC_DV1) {
softc->action = PROBE_INQUIRY_BASIC_DV2;
xpt_release_ccb(done_ccb);
@ -6327,7 +6327,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
static void
probecleanup(struct cam_periph *periph)
{
free(periph->softc, M_TEMP);
free(periph->softc, M_CAMXPT);
}
static void
@ -6984,7 +6984,7 @@ xpt_finishconfig_task(void *context, int pending)
/* Release our hook so that the boot can continue. */
config_intrhook_disestablish(xsoftc.xpt_config_hook);
free(xsoftc.xpt_config_hook, M_TEMP);
free(xsoftc.xpt_config_hook, M_CAMXPT);
xsoftc.xpt_config_hook = NULL;
}

View File

@ -329,6 +329,8 @@ static struct mtx changerq_mtx;
static STAILQ_HEAD(changerlist, cdchanger) changerq;
static int num_changers;
MALLOC_DEFINE(M_SCSICD, "scsi_cd", "scsi_cd buffers");
static void
cdinit(void)
{
@ -1519,7 +1521,7 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb)
{
rcap = (struct scsi_read_capacity_data *)malloc(sizeof(*rcap),
M_TEMP,
M_SCSICD,
M_NOWAIT);
if (rcap == NULL) {
xpt_print(periph->path,
@ -1778,7 +1780,7 @@ cddone(struct cam_periph *periph, union ccb *done_ccb)
}
}
}
free(rdcap, M_TEMP);
free(rdcap, M_SCSICD);
if (announce_buf[0] != '\0') {
xpt_announce_periph(periph, announce_buf);
if (softc->flags & CD_FLAG_CHANGER)
@ -1906,7 +1908,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -1915,7 +1917,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -1924,7 +1926,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.flags &= ~CD_PA_SOTC;
page->audio.flags |= CD_PA_IMMED;
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
if (error) {
cam_periph_unlock(periph);
break;
@ -2001,7 +2003,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2010,7 +2012,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2019,7 +2021,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.flags &= ~CD_PA_SOTC;
page->audio.flags |= CD_PA_IMMED;
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
if (error) {
cam_periph_unlock(periph);
break;
@ -2042,7 +2044,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2052,7 +2054,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2061,7 +2063,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.flags &= ~CD_PA_SOTC;
page->audio.flags |= CD_PA_IMMED;
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
if (error) {
cam_periph_unlock(periph);
break;
@ -2081,7 +2083,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
u_int32_t len = args->data_len;
data = malloc(sizeof(struct cd_sub_channel_info),
M_TEMP, M_WAITOK);
M_SCSICD, M_WAITOK);
cam_periph_lock(periph);
CAM_DEBUG(periph->path, CAM_DEBUG_SUBTRACE,
@ -2094,7 +2096,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
"cdioreadsubchannel: error, len=%d\n",
len);
error = EINVAL;
free(data, M_TEMP);
free(data, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2106,7 +2108,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
args->data_format, args->track, data, len);
if (error) {
free(data, M_TEMP);
free(data, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2124,7 +2126,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
} else {
bcopy(data, args->data, len);
}
free(data, M_TEMP);
free(data, M_SCSICD);
}
break;
@ -2132,7 +2134,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
{
struct ioc_toc_header *th;
th = malloc(sizeof(struct ioc_toc_header), M_TEMP,
th = malloc(sizeof(struct ioc_toc_header), M_SCSICD,
M_WAITOK);
cam_periph_lock(periph);
@ -2142,7 +2144,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdreadtoc(periph, 0, 0, (u_int8_t *)th,
sizeof (*th), /*sense_flags*/0);
if (error) {
free(th, M_TEMP);
free(th, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2156,7 +2158,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
}
th->len = ntohs(th->len);
bcopy(th, addr, sizeof(*th));
free(th, M_TEMP);
free(th, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2170,8 +2172,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
u_int32_t len, readlen, idx, num;
u_int32_t starting_track = te->starting_track;
data = malloc(sizeof(*data), M_TEMP, M_WAITOK);
lead = malloc(sizeof(*lead), M_TEMP, M_WAITOK);
data = malloc(sizeof(*data), M_SCSICD, M_WAITOK);
lead = malloc(sizeof(*lead), M_SCSICD, M_WAITOK);
cam_periph_lock(periph);
CAM_DEBUG(periph->path, CAM_DEBUG_SUBTRACE,
@ -2184,8 +2186,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = EINVAL;
printf("scsi_cd: error in readtocentries, "
"returning EINVAL\n");
free(data, M_TEMP);
free(lead, M_TEMP);
free(data, M_SCSICD);
free(lead, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2194,8 +2196,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdreadtoc(periph, 0, 0, (u_int8_t *)th,
sizeof (*th), /*sense_flags*/0);
if (error) {
free(data, M_TEMP);
free(lead, M_TEMP);
free(data, M_SCSICD);
free(lead, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2217,8 +2219,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
starting_track > th->ending_track + 1) {
printf("scsi_cd: error in readtocentries, "
"returning EINVAL\n");
free(data, M_TEMP);
free(lead, M_TEMP);
free(data, M_SCSICD);
free(lead, M_SCSICD);
cam_periph_unlock(periph);
error = EINVAL;
break;
@ -2239,8 +2241,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
printf("scsi_cd: error in readtocentries, "
"returning EINVAL\n");
error = EINVAL;
free(data, M_TEMP);
free(lead, M_TEMP);
free(data, M_SCSICD);
free(lead, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2253,8 +2255,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
readlen + sizeof (*th),
/*sense_flags*/0);
if (error) {
free(data, M_TEMP);
free(lead, M_TEMP);
free(data, M_SCSICD);
free(lead, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2270,8 +2272,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
sizeof(*lead),
/*sense_flags*/0);
if (error) {
free(data, M_TEMP);
free(lead, M_TEMP);
free(data, M_SCSICD);
free(lead, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2287,8 +2289,8 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
cam_periph_unlock(periph);
error = copyout(data->entries, te->data, len);
free(data, M_TEMP);
free(lead, M_TEMP);
free(data, M_SCSICD);
free(lead, M_SCSICD);
}
break;
case CDIOREADTOCENTRY:
@ -2299,7 +2301,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
struct ioc_toc_header *th;
u_int32_t track;
data = malloc(sizeof(*data), M_TEMP, M_WAITOK);
data = malloc(sizeof(*data), M_SCSICD, M_WAITOK);
cam_periph_lock(periph);
CAM_DEBUG(periph->path, CAM_DEBUG_SUBTRACE,
@ -2309,7 +2311,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
&& te->address_format != CD_LBA_FORMAT) {
printf("error in readtocentry, "
" returning EINVAL\n");
free(data, M_TEMP);
free(data, M_SCSICD);
error = EINVAL;
cam_periph_unlock(periph);
break;
@ -2319,7 +2321,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdreadtoc(periph, 0, 0, (u_int8_t *)th,
sizeof (*th), /*sense_flags*/0);
if (error) {
free(data, M_TEMP);
free(data, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2341,7 +2343,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
track > th->ending_track + 1) {
printf("error in readtocentry, "
" returning EINVAL\n");
free(data, M_TEMP);
free(data, M_SCSICD);
error = EINVAL;
cam_periph_unlock(periph);
break;
@ -2351,7 +2353,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
(u_int8_t *)data, sizeof(*data),
/*sense_flags*/0);
if (error) {
free(data, M_TEMP);
free(data, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2360,7 +2362,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
data->entry.track = bcd2bin(data->entry.track);
bcopy(&data->entry, &te->entry,
sizeof(struct cd_toc_entry));
free(data, M_TEMP);
free(data, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2371,7 +2373,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2380,7 +2382,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2393,7 +2395,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[2].channels = arg->patch[2];
page->audio.port[3].channels = arg->patch[3];
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2404,7 +2406,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2413,7 +2415,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2425,7 +2427,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[RIGHT_PORT].volume;
arg->vol[2] = page->audio.port[2].volume;
arg->vol[3] = page->audio.port[3].volume;
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2436,7 +2438,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2445,7 +2447,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2461,7 +2463,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[3].volume = arg->vol[3];
error = cdsetmode(periph, &params);
cam_periph_unlock(periph);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
}
break;
case CDIOCSETMONO:
@ -2470,7 +2472,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2479,7 +2481,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2493,7 +2495,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[3].channels = 0;
error = cdsetmode(periph, &params);
cam_periph_unlock(periph);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
}
break;
case CDIOCSETSTEREO:
@ -2502,7 +2504,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2511,7 +2513,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2524,7 +2526,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[2].channels = 0;
page->audio.port[3].channels = 0;
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2534,7 +2536,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2543,7 +2545,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(&params, M_TEMP);
free(&params, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2554,7 +2556,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[2].channels = 0;
page->audio.port[3].channels = 0;
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2564,7 +2566,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2573,7 +2575,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2584,7 +2586,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[2].channels = 0;
page->audio.port[3].channels = 0;
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2594,7 +2596,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
union cd_pages *page;
params.alloc_len = sizeof(union cd_mode_data_6_10);
params.mode_buf = malloc(params.alloc_len, M_TEMP,
params.mode_buf = malloc(params.alloc_len, M_SCSICD,
M_WAITOK | M_ZERO);
cam_periph_lock(periph);
@ -2603,7 +2605,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
error = cdgetmode(periph, &params, AUDIO_PAGE);
if (error) {
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
break;
}
@ -2614,7 +2616,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
page->audio.port[2].channels = 0;
page->audio.port[3].channels = 0;
error = cdsetmode(periph, &params);
free(params.mode_buf, M_TEMP);
free(params.mode_buf, M_SCSICD);
cam_periph_unlock(periph);
}
break;
@ -2920,7 +2922,7 @@ cdsize(struct cam_periph *periph, u_int32_t *size)
/* XXX Should be M_WAITOK */
rcap_buf = malloc(sizeof(struct scsi_read_capacity_data),
M_TEMP, M_NOWAIT);
M_SCSICD, M_NOWAIT);
if (rcap_buf == NULL)
return (ENOMEM);
@ -2950,7 +2952,7 @@ cdsize(struct cam_periph *periph, u_int32_t *size)
if (softc->params.blksize > 2048 && softc->params.blksize <= 2352)
softc->params.blksize = 2048;
free(rcap_buf, M_TEMP);
free(rcap_buf, M_SCSICD);
*size = softc->params.disksize;
return (error);

View File

@ -218,6 +218,8 @@ static struct cdevsw ch_cdevsw = {
.d_name = "ch",
};
MALLOC_DEFINE(M_SCSICH, "scsi_ch", "scsi_ch buffers");
static void
chinit(void)
{
@ -508,7 +510,7 @@ chstart(struct cam_periph *periph, union ccb *start_ccb)
sizeof(struct scsi_mode_blk_desc) +
sizeof(struct page_element_address_assignment);
mode_buffer = malloc(mode_buffer_len, M_TEMP, M_NOWAIT);
mode_buffer = malloc(mode_buffer_len, M_SCSICH, M_NOWAIT);
if (mode_buffer == NULL) {
printf("chstart: couldn't malloc mode sense data\n");
@ -655,7 +657,7 @@ chdone(struct cam_periph *periph, union ccb *done_ccb)
if (announce_buf[0] != '\0')
xpt_announce_periph(periph, announce_buf);
softc->state = CH_STATE_NORMAL;
free(mode_header, M_TEMP);
free(mode_header, M_SCSICH);
/*
* Since our peripheral may be invalidated by an error
* above or an external event, we must release our CCB
@ -1353,7 +1355,7 @@ chgetparams(struct cam_periph *periph)
*/
mode_buffer_len = sizeof(struct scsi_mode_sense_data);
mode_buffer = malloc(mode_buffer_len, M_TEMP, M_NOWAIT);
mode_buffer = malloc(mode_buffer_len, M_SCSICH, M_NOWAIT);
if (mode_buffer == NULL) {
printf("chgetparams: couldn't malloc mode sense data\n");
@ -1411,7 +1413,7 @@ chgetparams(struct cam_periph *periph)
"chgetparams: error getting element "
"address page\n");
xpt_release_ccb(ccb);
free(mode_buffer, M_TEMP);
free(mode_buffer, M_SCSICH);
return(error);
}
}
@ -1474,7 +1476,7 @@ chgetparams(struct cam_periph *periph)
"chgetparams: error getting device "
"capabilities page\n");
xpt_release_ccb(ccb);
free(mode_buffer, M_TEMP);
free(mode_buffer, M_SCSICH);
return(error);
}
}
@ -1493,7 +1495,7 @@ chgetparams(struct cam_periph *periph)
softc->sc_exchangemask[from] = exchanges[from];
}
free(mode_buffer, M_TEMP);
free(mode_buffer, M_SCSICH);
return(error);
}

View File

@ -548,6 +548,8 @@ static struct periph_driver dadriver =
PERIPHDRIVER_DECLARE(da, dadriver);
MALLOC_DEFINE(M_SCSIDA, "scsi_da", "scsi_da buffers");
static int
daopen(struct disk *dp)
{
@ -1329,7 +1331,7 @@ dastart(struct cam_periph *periph, union ccb *start_ccb)
struct scsi_read_capacity_data *rcap;
rcap = (struct scsi_read_capacity_data *)malloc(sizeof(*rcap),
M_TEMP,
M_SCSIDA,
M_NOWAIT);
if (rcap == NULL) {
printf("dastart: Couldn't malloc read_capacity data\n");
@ -1355,7 +1357,7 @@ dastart(struct cam_periph *periph, union ccb *start_ccb)
struct scsi_read_capacity_data_long *rcaplong;
rcaplong = (struct scsi_read_capacity_data_long *)
malloc(sizeof(*rcaplong), M_TEMP, M_NOWAIT);
malloc(sizeof(*rcaplong), M_SCSIDA, M_NOWAIT);
if (rcaplong == NULL) {
printf("dastart: Couldn't malloc read_capacity data\n");
/* da_free_periph??? */
@ -1547,7 +1549,7 @@ dadone(struct cam_periph *periph, union ccb *done_ccb)
*/
if (maxsector == 0xffffffff) {
softc->state = DA_STATE_PROBE2;
free(rdcap, M_TEMP);
free(rdcap, M_SCSIDA);
xpt_release_ccb(done_ccb);
xpt_schedule(periph, /*priority*/5);
return;
@ -1675,7 +1677,7 @@ dadone(struct cam_periph *periph, union ccb *done_ccb)
}
}
}
free(csio->data_ptr, M_TEMP);
free(csio->data_ptr, M_SCSIDA);
if (announce_buf[0] != '\0') {
xpt_announce_periph(periph, announce_buf);
/*
@ -1816,7 +1818,7 @@ dagetcapacity(struct cam_periph *periph)
/* Do a read capacity */
rcap = (struct scsi_read_capacity_data *)malloc(sizeof(*rcaplong),
M_TEMP,
M_SCSIDA,
M_NOWAIT);
if (rcap == NULL)
return (ENOMEM);
@ -1890,7 +1892,7 @@ dagetcapacity(struct cam_periph *periph)
xpt_release_ccb(ccb);
free(rcap, M_TEMP);
free(rcap, M_SCSIDA);
return (error);
}

View File

@ -1953,7 +1953,7 @@ samount(struct cam_periph *periph, int oflags, struct cdev *dev)
* read a full record.
*/
rblim = (struct scsi_read_block_limits_data *)
malloc(8192, M_TEMP, M_WAITOK);
malloc(8192, M_SCSISA, M_WAITOK);
if (rblim == NULL) {
xpt_print(periph->path, "no memory for test read\n");
xpt_release_ccb(ccb);
@ -2273,7 +2273,7 @@ samount(struct cam_periph *periph, int oflags, struct cdev *dev)
}
exit:
if (rblim != NULL)
free(rblim, M_TEMP);
free(rblim, M_SCSISA);
if (error != 0) {
softc->dsreg = MTIO_DSREG_NIL;
@ -2574,7 +2574,7 @@ sagetparams(struct cam_periph *periph, sa_params params_to_get,
mode_buffer_len += sizeof (sa_comp_t);
}
mode_buffer = malloc(mode_buffer_len, M_TEMP, M_WAITOK | M_ZERO);
mode_buffer = malloc(mode_buffer_len, M_SCSISA, M_WAITOK | M_ZERO);
mode_hdr = (struct scsi_mode_header_6 *)mode_buffer;
mode_blk = (struct scsi_mode_blk_desc *)&mode_hdr[1];
@ -2603,7 +2603,7 @@ sagetparams(struct cam_periph *periph, sa_params params_to_get,
goto retry;
}
softc->quirks |= SA_QUIRK_NOCOMP;
free(mode_buffer, M_TEMP);
free(mode_buffer, M_SCSISA);
goto retry;
} else if (status == CAM_SCSI_STATUS_ERROR) {
/* Tell the user about the fatal error. */
@ -2712,7 +2712,7 @@ sagetparams(struct cam_periph *periph, sa_params params_to_get,
sagetparamsexit:
xpt_release_ccb(ccb);
free(mode_buffer, M_TEMP);
free(mode_buffer, M_SCSISA);
return (error);
}
@ -2754,7 +2754,7 @@ sasetparams(struct cam_periph *periph, sa_params params_to_set,
softc = (struct sa_softc *)periph->softc;
ccomp = malloc(sizeof (sa_comp_t), M_TEMP, M_WAITOK);
ccomp = malloc(sizeof (sa_comp_t), M_SCSISA, M_WAITOK);
/*
* Since it doesn't make sense to set the number of blocks, or
@ -2769,7 +2769,7 @@ sasetparams(struct cam_periph *periph, sa_params params_to_set,
&current_calg, ccomp);
if (error != 0) {
free(ccomp, M_TEMP);
free(ccomp, M_SCSISA);
return (error);
}
@ -2777,7 +2777,7 @@ sasetparams(struct cam_periph *periph, sa_params params_to_set,
if (params_to_set & SA_PARAM_COMPRESSION)
mode_buffer_len += sizeof (sa_comp_t);
mode_buffer = malloc(mode_buffer_len, M_TEMP, M_WAITOK | M_ZERO);
mode_buffer = malloc(mode_buffer_len, M_SCSISA, M_WAITOK | M_ZERO);
mode_hdr = (struct scsi_mode_header_6 *)mode_buffer;
mode_blk = (struct scsi_mode_blk_desc *)&mode_hdr[1];
@ -2935,7 +2935,7 @@ sasetparams(struct cam_periph *periph, sa_params params_to_set,
* 'operation not supported'.
*/
if (params_to_set == SA_PARAM_NONE) {
free(mode_buffer, M_TEMP);
free(mode_buffer, M_SCSISA);
xpt_release_ccb(ccb);
return (ENODEV);
}
@ -3020,7 +3020,7 @@ sasetparams(struct cam_periph *periph, sa_params params_to_set,
xpt_release_ccb(ccb);
if (ccomp != NULL)
free(ccomp, M_TEMP);
free(ccomp, M_SCSISA);
if (params_to_set & SA_PARAM_COMPRESSION) {
if (error) {
@ -3039,7 +3039,7 @@ sasetparams(struct cam_periph *periph, sa_params params_to_set,
}
}
free(mode_buffer, M_TEMP);
free(mode_buffer, M_SCSISA);
return (error);
}