Module Name:    src
Committed By:   skrll
Date:           Wed Dec  3 14:18:07 UTC 2014

Modified Files:
        src/sys/arch/mips/adm5120/dev [nick-nhusb]: ahci.c
        src/sys/dev/ic [nick-nhusb]: sl811hs.c
        src/sys/dev/usb [nick-nhusb]: hid.c if_athn_usb.c if_athn_usb.h
            if_kue.c if_otus.c if_otusvar.h if_zyd.c if_zydreg.h u3g.c uaudio.c
            ubsa.c ubsa_common.c ubt.c uchcom.c ucycom.c udsir.c uep.c ugen.c
            uhid.c uhidev.c uhmodem.c uhub.c umct.c uplcom.c urio.c usb.c usb.h
            usb_subr.c usbdi.c usbdi_util.c usbdi_util.h uscanner.c ustir.c
            utoppy.c uvscom.c uyurex.c xhci.c

Log Message:
Replace malloc(9) with kmem(9)


To generate a diff of this commit:
cvs rdiff -u -r1.12.6.7 -r1.12.6.8 src/sys/arch/mips/adm5120/dev/ahci.c
cvs rdiff -u -r1.47.6.6 -r1.47.6.7 src/sys/dev/ic/sl811hs.c
cvs rdiff -u -r1.35.16.1 -r1.35.16.2 src/sys/dev/usb/hid.c
cvs rdiff -u -r1.6.8.1 -r1.6.8.2 src/sys/dev/usb/if_athn_usb.c
cvs rdiff -u -r1.2 -r1.2.16.1 src/sys/dev/usb/if_athn_usb.h
cvs rdiff -u -r1.81.4.1 -r1.81.4.2 src/sys/dev/usb/if_kue.c
cvs rdiff -u -r1.25.6.1 -r1.25.6.2 src/sys/dev/usb/if_otus.c
cvs rdiff -u -r1.7.12.1 -r1.7.12.2 src/sys/dev/usb/if_otusvar.h
cvs rdiff -u -r1.36.14.1 -r1.36.14.2 src/sys/dev/usb/if_zyd.c
cvs rdiff -u -r1.7 -r1.7.16.1 src/sys/dev/usb/if_zydreg.h
cvs rdiff -u -r1.31.2.3 -r1.31.2.4 src/sys/dev/usb/u3g.c
cvs rdiff -u -r1.140.2.3 -r1.140.2.4 src/sys/dev/usb/uaudio.c
cvs rdiff -u -r1.30 -r1.30.16.1 src/sys/dev/usb/ubsa.c
cvs rdiff -u -r1.9.14.1 -r1.9.14.2 src/sys/dev/usb/ubsa_common.c
cvs rdiff -u -r1.51.4.1 -r1.51.4.2 src/sys/dev/usb/ubt.c
cvs rdiff -u -r1.13 -r1.13.6.1 src/sys/dev/usb/uchcom.c
cvs rdiff -u -r1.41.2.1 -r1.41.2.2 src/sys/dev/usb/ucycom.c
cvs rdiff -u -r1.1.14.2 -r1.1.14.3 src/sys/dev/usb/udsir.c
cvs rdiff -u -r1.19.6.1 -r1.19.6.2 src/sys/dev/usb/uep.c
cvs rdiff -u -r1.126.2.3 -r1.126.2.4 src/sys/dev/usb/ugen.c
cvs rdiff -u -r1.92.4.2 -r1.92.4.3 src/sys/dev/usb/uhid.c
cvs rdiff -u -r1.61.4.2 -r1.61.4.3 src/sys/dev/usb/uhidev.c
cvs rdiff -u -r1.13.24.2 -r1.13.24.3 src/sys/dev/usb/uhmodem.c
cvs rdiff -u -r1.126.2.2 -r1.126.2.3 src/sys/dev/usb/uhub.c
cvs rdiff -u -r1.32.24.2 -r1.32.24.3 src/sys/dev/usb/umct.c
cvs rdiff -u -r1.74.4.2 -r1.74.4.3 src/sys/dev/usb/uplcom.c
cvs rdiff -u -r1.42.4.3 -r1.42.4.4 src/sys/dev/usb/urio.c
cvs rdiff -u -r1.156.2.2 -r1.156.2.3 src/sys/dev/usb/usb.c
cvs rdiff -u -r1.111.2.3 -r1.111.2.4 src/sys/dev/usb/usb.h
cvs rdiff -u -r1.198.2.3 -r1.198.2.4 src/sys/dev/usb/usb_subr.c
cvs rdiff -u -r1.162.2.6 -r1.162.2.7 src/sys/dev/usb/usbdi.c
cvs rdiff -u -r1.63.2.3 -r1.63.2.4 src/sys/dev/usb/usbdi_util.c
cvs rdiff -u -r1.45.6.2 -r1.45.6.3 src/sys/dev/usb/usbdi_util.h
cvs rdiff -u -r1.75.4.3 -r1.75.4.4 src/sys/dev/usb/uscanner.c
cvs rdiff -u -r1.33.10.3 -r1.33.10.4 src/sys/dev/usb/ustir.c
cvs rdiff -u -r1.24.4.2 -r1.24.4.3 src/sys/dev/usb/utoppy.c
cvs rdiff -u -r1.28 -r1.28.16.1 src/sys/dev/usb/uvscom.c
cvs rdiff -u -r1.9 -r1.9.14.1 src/sys/dev/usb/uyurex.c
cvs rdiff -u -r1.28.2.7 -r1.28.2.8 src/sys/dev/usb/xhci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/adm5120/dev/ahci.c
diff -u src/sys/arch/mips/adm5120/dev/ahci.c:1.12.6.7 src/sys/arch/mips/adm5120/dev/ahci.c:1.12.6.8
--- src/sys/arch/mips/adm5120/dev/ahci.c:1.12.6.7	Wed Dec  3 13:19:38 2014
+++ src/sys/arch/mips/adm5120/dev/ahci.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ahci.c,v 1.12.6.7 2014/12/03 13:19:38 skrll Exp $	*/
+/*	$NetBSD: ahci.c,v 1.12.6.8 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
@@ -64,14 +64,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ahci.c,v 1.12.6.7 2014/12/03 13:19:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ahci.c,v 1.12.6.8 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
 #include <sys/device.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 
 #include <sys/bus.h>
 #include <machine/cpu.h>
@@ -483,7 +483,7 @@ ahci_allocx(struct usbd_bus *bus)
 		}
 #endif
 	} else {
-		xfer = malloc(sizeof(*xfer), M_USB, M_NOWAIT);
+		xfer = kmem_alloc(sizeof(*xfer), KM_SLEEP);
 	}
 
 	if (xfer) {
@@ -1235,7 +1235,7 @@ ahci_device_intr_start(usbd_xfer_handle 
 
 	DPRINTF(D_TRACE, ("INTRstart "));
 
-	sx = malloc(sizeof(*sx), M_USB, M_NOWAIT);
+	sx = kmem_intr_alloc(sizeof(*sx), KM_NOSLEEP);
 	if (sx == NULL)
 		goto reterr;
 	memset(sx, 0, sizeof(*sx));
@@ -1302,7 +1302,7 @@ ahci_device_intr_abort(usbd_xfer_handle 
 	sx = xfer->ux_hcpriv;
 	if (sx) {
 		callout_stop(&sx->sx_callout_t);
-		free(sx, M_USB);
+		kmem_intr_free(sx, sizeof(*sx));
 		xfer->ux_hcpriv = NULL;
 	} else {
 		printf("%s: sx == NULL!\n", __func__);

Index: src/sys/dev/ic/sl811hs.c
diff -u src/sys/dev/ic/sl811hs.c:1.47.6.6 src/sys/dev/ic/sl811hs.c:1.47.6.7
--- src/sys/dev/ic/sl811hs.c:1.47.6.6	Wed Dec  3 13:19:38 2014
+++ src/sys/dev/ic/sl811hs.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sl811hs.c,v 1.47.6.6 2014/12/03 13:19:38 skrll Exp $	*/
+/*	$NetBSD: sl811hs.c,v 1.47.6.7 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Not (c) 2007 Matthew Orgass
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sl811hs.c,v 1.47.6.6 2014/12/03 13:19:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sl811hs.c,v 1.47.6.7 2014/12/03 14:18:07 skrll Exp $");
 
 #include "opt_slhci.h"
 
@@ -78,7 +78,7 @@ __KERNEL_RCSID(0, "$NetBSD: sl811hs.c,v 
 #include <sys/kernel.h>
 #include <sys/proc.h>
 #include <sys/device.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/queue.h>
 #include <sys/gcq.h>
 #include <sys/intr.h>
@@ -761,7 +761,7 @@ slhci_allocx(struct usbd_bus *bus)
 {
 	struct usbd_xfer *xfer;
 
-	xfer = malloc(sizeof(*xfer), M_USB, M_NOWAIT|M_ZERO);
+	xfer = kmem_zalloc(sizeof(*xfer), KM_SLEEP);
 
 	DLOG(D_MEM, "allocx %p", xfer, 0,0,0);
 
@@ -796,7 +796,7 @@ slhci_freex(struct usbd_bus *bus, struct
 	xfer->ux_state = XFER_FREE;
 #endif
 
-	free(xfer, M_USB);
+	kmem_free(xfer, sizeof(*xfer));
 }
 
 static void

Index: src/sys/dev/usb/hid.c
diff -u src/sys/dev/usb/hid.c:1.35.16.1 src/sys/dev/usb/hid.c:1.35.16.2
--- src/sys/dev/usb/hid.c:1.35.16.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/hid.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: hid.c,v 1.35.16.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: hid.c,v 1.35.16.2 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/hid.c,v 1.11 1999/11/17 22:33:39 n_hibma Exp $ */
 
 /*
@@ -32,12 +32,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hid.c,v 1.35.16.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hid.c,v 1.35.16.2 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 
 #include <dev/usb/usb.h>
 #include <dev/usb/usbhid.h>
@@ -91,7 +91,9 @@ hid_start_parse(const void *d, int len, 
 {
 	struct hid_data *s;
 
-	s = malloc(sizeof *s, M_TEMP, M_WAITOK|M_ZERO);
+	s = kmem_zalloc(sizeof(*s), KM_SLEEP);
+	if (s == NULL)
+		return s;
 	s->start = s->p = d;
 	s->end = (const char *)d + len;
 	s->kind = kind;
@@ -104,10 +106,10 @@ hid_end_parse(struct hid_data *s)
 
 	while (s->cur.next != NULL) {
 		struct hid_item *hi = s->cur.next->next;
-		free(s->cur.next, M_TEMP);
+		kmem_free(s->cur.next, sizeof(*s->cur.next));
 		s->cur.next = hi;
 	}
-	free(s, M_TEMP);
+	kmem_free(s, sizeof(*s));
 }
 
 int
@@ -289,7 +291,7 @@ hid_get_item(struct hid_data *s, struct 
 				c->loc.count = dval;
 				break;
 			case 10: /* Push */
-				hi = malloc(sizeof *hi, M_TEMP, M_WAITOK);
+				hi = kmem_alloc(sizeof(*hi), KM_SLEEP);
 				*hi = *c;
 				c->next = hi;
 				break;
@@ -298,7 +300,7 @@ hid_get_item(struct hid_data *s, struct 
 				oldpos = c->loc.pos;
 				*c = *hi;
 				c->loc.pos = oldpos;
-				free(hi, M_TEMP);
+				kmem_free(hi, sizeof(*hi));
 				break;
 			default:
 				printf("Global bTag=%d\n", bTag);

Index: src/sys/dev/usb/if_athn_usb.c
diff -u src/sys/dev/usb/if_athn_usb.c:1.6.8.1 src/sys/dev/usb/if_athn_usb.c:1.6.8.2
--- src/sys/dev/usb/if_athn_usb.c:1.6.8.1	Tue Dec  2 09:00:33 2014
+++ src/sys/dev/usb/if_athn_usb.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_athn_usb.c,v 1.6.8.1 2014/12/02 09:00:33 skrll Exp $	*/
+/*	$NetBSD: if_athn_usb.c,v 1.6.8.2 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$OpenBSD: if_athn_usb.c,v 1.12 2013/01/14 09:50:31 jsing Exp $	*/
 
 /*-
@@ -22,7 +22,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_athn_usb.c,v 1.6.8.1 2014/12/02 09:00:33 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_athn_usb.c,v 1.6.8.2 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef	_KERNEL_OPT
 #include "opt_inet.h"
@@ -39,6 +39,7 @@ __KERNEL_RCSID(0, "$NetBSD: if_athn_usb.
 #include <sys/socket.h>
 #include <sys/sockio.h>
 #include <sys/systm.h>
+#include <sys/kmem.h>
 
 #include <sys/bus.h>
 #include <sys/endian.h>
@@ -481,7 +482,7 @@ Static int
 athn_usb_open_pipes(struct athn_usb_softc *usc)
 {
 	usb_endpoint_descriptor_t *ed;
-	int isize, error;
+	int error;
 
 	DPRINTFN(DBG_FN, usc, "\n");
 
@@ -507,21 +508,22 @@ athn_usb_open_pipes(struct athn_usb_soft
 		    "could not retrieve Rx intr pipe descriptor\n");
 		goto fail;
 	}
-	isize = UGETW(ed->wMaxPacketSize);
-	if (isize == 0) {
+	usc->usc_ibufsize = UGETW(ed->wMaxPacketSize);
+	if (usc->usc_ibufsize == 0) {
 		aprint_error_dev(usc->usc_dev,
 		    "invalid Rx intr pipe descriptor\n");
 		goto fail;
 	}
-	usc->usc_ibuf = malloc(isize, M_USBDEV, M_NOWAIT);
+	usc->usc_ibuf = kmem_alloc(usc->usc_ibufsize, KM_SLEEP);
 	if (usc->usc_ibuf == NULL) {
 		aprint_error_dev(usc->usc_dev,
 		    "could not allocate Rx intr buffer\n");
 		goto fail;
 	}
+
 	error = usbd_open_pipe_intr(usc->usc_iface, AR_PIPE_RX_INTR,
-	    USBD_SHORT_XFER_OK, &usc->usc_rx_intr_pipe, usc, usc->usc_ibuf, isize,
-	    athn_usb_intr, USBD_DEFAULT_INTERVAL);
+	    USBD_SHORT_XFER_OK, &usc->usc_rx_intr_pipe, usc, usc->usc_ibuf,
+	    usc->usc_ibufsize, athn_usb_intr, USBD_DEFAULT_INTERVAL);
 	if (error != 0) {
 		aprint_error_dev(usc->usc_dev,
 		    "could not open Rx intr pipe\n");
@@ -566,7 +568,7 @@ athn_usb_close_pipes(struct athn_usb_sof
 	athn_usb_kill_pipe(&usc->usc_rx_intr_pipe);
 	ibuf = atomic_swap_ptr(&usc->usc_ibuf, NULL);
 	if (ibuf != NULL)
-		free(ibuf, M_USBDEV);
+		kmem_free(ibuf, usc->usc_ibufsize);
 }
 
 Static int

Index: src/sys/dev/usb/if_athn_usb.h
diff -u src/sys/dev/usb/if_athn_usb.h:1.2 src/sys/dev/usb/if_athn_usb.h:1.2.16.1
--- src/sys/dev/usb/if_athn_usb.h:1.2	Sat Mar 30 14:14:31 2013
+++ src/sys/dev/usb/if_athn_usb.h	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_athn_usb.h,v 1.2 2013/03/30 14:14:31 christos Exp $	*/
+/*	$NetBSD: if_athn_usb.h,v 1.2.16.1 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$OpenBSD: if_athn_usb.h,v 1.3 2012/11/10 14:35:06 mikeb Exp $	*/
 
 /*-
@@ -463,6 +463,7 @@ struct athn_usb_softc {
 	usbd_pipe_handle		usc_rx_intr_pipe;
 	usbd_pipe_handle		usc_tx_intr_pipe;
 	uint8_t 			*usc_ibuf;
+	size_t				usc_ibufsize;
 
 	struct ar_wmi_cmd_reg_write	usc_wbuf[AR_MAX_WRITE_COUNT];
 	int				usc_wcount;

Index: src/sys/dev/usb/if_kue.c
diff -u src/sys/dev/usb/if_kue.c:1.81.4.1 src/sys/dev/usb/if_kue.c:1.81.4.2
--- src/sys/dev/usb/if_kue.c:1.81.4.1	Tue Dec  2 09:00:33 2014
+++ src/sys/dev/usb/if_kue.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_kue.c,v 1.81.4.1 2014/12/02 09:00:33 skrll Exp $	*/
+/*	$NetBSD: if_kue.c,v 1.81.4.2 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.81.4.1 2014/12/02 09:00:33 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.81.4.2 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -81,7 +81,7 @@ __KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1
 #include <sys/systm.h>
 #include <sys/sockio.h>
 #include <sys/mbuf.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/kernel.h>
 #include <sys/socket.h>
 #include <sys/device.h>
@@ -475,8 +475,8 @@ kue_attach(device_t parent, device_t sel
 		return;
 	}
 
-	sc->kue_mcfilters = malloc(KUE_MCFILTCNT(sc) * ETHER_ADDR_LEN,
-	    M_USBDEV, M_NOWAIT);
+	sc->kue_mcfilters = kmem_alloc(KUE_MCFILTCNT(sc) * ETHER_ADDR_LEN,
+	    KM_SLEEP);
 	if (sc->kue_mcfilters == NULL) {
 		aprint_error_dev(self,
 		    "no memory for multicast filter buffer\n");
@@ -528,7 +528,8 @@ kue_detach(device_t self, int flags)
 	s = splusb();		/* XXX why? */
 
 	if (sc->kue_mcfilters != NULL) {
-		free(sc->kue_mcfilters, M_USBDEV);
+		kmem_free(sc->kue_mcfilters,
+		    KUE_MCFILTCNT(sc) * ETHER_ADDR_LEN);
 		sc->kue_mcfilters = NULL;
 	}
 

Index: src/sys/dev/usb/if_otus.c
diff -u src/sys/dev/usb/if_otus.c:1.25.6.1 src/sys/dev/usb/if_otus.c:1.25.6.2
--- src/sys/dev/usb/if_otus.c:1.25.6.1	Tue Dec  2 09:00:33 2014
+++ src/sys/dev/usb/if_otus.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_otus.c,v 1.25.6.1 2014/12/02 09:00:33 skrll Exp $	*/
+/*	$NetBSD: if_otus.c,v 1.25.6.2 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$OpenBSD: if_otus.c,v 1.18 2010/08/27 17:08:00 jsg Exp $	*/
 
 /*-
@@ -23,12 +23,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_otus.c,v 1.25.6.1 2014/12/02 09:00:33 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_otus.c,v 1.25.6.2 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
 #include <sys/mbuf.h>
 #include <sys/kernel.h>
+#include <sys/kmem.h>
 #include <sys/kthread.h>
 #include <sys/systm.h>
 #include <sys/callout.h>
@@ -973,7 +974,7 @@ Static int
 otus_open_pipes(struct otus_softc *sc)
 {
 	usb_endpoint_descriptor_t *ed;
-	int i, isize, error;
+	int i, error;
 
 	DPRINTFN(DBG_FN, sc, "\n");
 
@@ -990,21 +991,21 @@ otus_open_pipes(struct otus_softc *sc)
 		    "could not retrieve Rx intr pipe descriptor\n");
 		goto fail;
 	}
-	isize = UGETW(ed->wMaxPacketSize);
-	if (isize == 0) {
+	sc->sc_ibuf_size = UGETW(ed->wMaxPacketSize);
+	if (sc->sc_ibuf_size == 0) {
 		aprint_error_dev(sc->sc_dev,
 		    "invalid Rx intr pipe descriptor\n");
 		goto fail;
 	}
-	sc->sc_ibuf = malloc(isize, M_USBDEV, M_NOWAIT);
+	sc->sc_ibuf = kmem_alloc(sc->sc_ibuf_size, KM_SLEEP);
 	if (sc->sc_ibuf == NULL) {
 		aprint_error_dev(sc->sc_dev,
 		    "could not allocate Rx intr buffer\n");
 		goto fail;
 	}
 	error = usbd_open_pipe_intr(sc->sc_iface, AR_EPT_INTR_RX_NO,
-	    USBD_SHORT_XFER_OK, &sc->sc_cmd_rx_pipe, sc, sc->sc_ibuf, isize,
-	    otus_intr, USBD_DEFAULT_INTERVAL);
+	    USBD_SHORT_XFER_OK, &sc->sc_cmd_rx_pipe, sc, sc->sc_ibuf,
+	    sc->sc_ibuf_size, otus_intr, USBD_DEFAULT_INTERVAL);
 	if (error != 0) {
 		aprint_error_dev(sc->sc_dev, "could not open Rx intr pipe\n");
 		goto fail;
@@ -1077,7 +1078,7 @@ otus_close_pipes(struct otus_softc *sc)
 		usbd_close_pipe(sc->sc_cmd_rx_pipe);
 	}
 	if (sc->sc_ibuf != NULL)
-		free(sc->sc_ibuf, M_USBDEV);
+		kmem_free(sc->sc_ibuf, sc->sc_ibuf_size);
 	if (sc->sc_data_tx_pipe != NULL)
 		usbd_close_pipe(sc->sc_data_tx_pipe);
 	if (sc->sc_cmd_tx_pipe != NULL)

Index: src/sys/dev/usb/if_otusvar.h
diff -u src/sys/dev/usb/if_otusvar.h:1.7.12.1 src/sys/dev/usb/if_otusvar.h:1.7.12.2
--- src/sys/dev/usb/if_otusvar.h:1.7.12.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/if_otusvar.h	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_otusvar.h,v 1.7.12.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: if_otusvar.h,v 1.7.12.2 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$OpenBSD: if_otusreg.h,v 1.6 2009/04/06 18:17:01 damien Exp $	*/
 
 /*-
@@ -182,6 +182,7 @@ struct otus_softc {
 	usbd_pipe_handle		sc_cmd_tx_pipe;
 	usbd_pipe_handle		sc_cmd_rx_pipe;
 	uint8_t 			*sc_ibuf;
+	size_t				sc_ibuf_size;
 
 	int				sc_if_flags;
 	int				sc_tx_timer;

Index: src/sys/dev/usb/if_zyd.c
diff -u src/sys/dev/usb/if_zyd.c:1.36.14.1 src/sys/dev/usb/if_zyd.c:1.36.14.2
--- src/sys/dev/usb/if_zyd.c:1.36.14.1	Tue Dec  2 09:00:33 2014
+++ src/sys/dev/usb/if_zyd.c	Wed Dec  3 14:18:07 2014
@@ -1,5 +1,5 @@
 /*	$OpenBSD: if_zyd.c,v 1.52 2007/02/11 00:08:04 jsg Exp $	*/
-/*	$NetBSD: if_zyd.c,v 1.36.14.1 2014/12/02 09:00:33 skrll Exp $	*/
+/*	$NetBSD: if_zyd.c,v 1.36.14.2 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2006 by Damien Bergamini <[email protected]>
@@ -23,13 +23,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_zyd.c,v 1.36.14.1 2014/12/02 09:00:33 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_zyd.c,v 1.36.14.2 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
 #include <sys/proc.h>
 #include <sys/mbuf.h>
 #include <sys/kernel.h>
+#include <sys/kmem.h>
 #include <sys/socket.h>
 #include <sys/systm.h>
 #include <sys/malloc.h>
@@ -493,7 +494,6 @@ Static int
 zyd_open_pipes(struct zyd_softc *sc)
 {
 	usb_endpoint_descriptor_t *edesc;
-	int isize;
 	usbd_status error;
 
 	/* interrupt in */
@@ -501,16 +501,16 @@ zyd_open_pipes(struct zyd_softc *sc)
 	if (edesc == NULL)
 		return EINVAL;
 
-	isize = UGETW(edesc->wMaxPacketSize);
-	if (isize == 0)	/* should not happen */
+	sc->ibuf_size = UGETW(edesc->wMaxPacketSize);
+	if (sc->ibuf_size == 0)	/* should not happen */
 		return EINVAL;
 
-	sc->ibuf = malloc(isize, M_USBDEV, M_NOWAIT);
+	sc->ibuf = kmem_alloc(sc->ibuf_size, KM_SLEEP);
 	if (sc->ibuf == NULL)
 		return ENOMEM;
 
 	error = usbd_open_pipe_intr(sc->sc_iface, 0x83, USBD_SHORT_XFER_OK,
-	    &sc->zyd_ep[ZYD_ENDPT_IIN], sc, sc->ibuf, isize, zyd_intr,
+	    &sc->zyd_ep[ZYD_ENDPT_IIN], sc, sc->ibuf, sc->ibuf_size, zyd_intr,
 	    USBD_DEFAULT_INTERVAL);
 	if (error != 0) {
 		printf("%s: open rx intr pipe failed: %s\n",
@@ -564,7 +564,7 @@ zyd_close_pipes(struct zyd_softc *sc)
 		}
 	}
 	if (sc->ibuf != NULL) {
-		free(sc->ibuf, M_USBDEV);
+		kmem_free(sc->ibuf, sc->ibuf_size);
 		sc->ibuf = NULL;
 	}
 }

Index: src/sys/dev/usb/if_zydreg.h
diff -u src/sys/dev/usb/if_zydreg.h:1.7 src/sys/dev/usb/if_zydreg.h:1.7.16.1
--- src/sys/dev/usb/if_zydreg.h:1.7	Fri Aug 24 09:01:23 2012
+++ src/sys/dev/usb/if_zydreg.h	Wed Dec  3 14:18:07 2014
@@ -1,5 +1,5 @@
 /*	$OpenBSD: if_zydreg.h,v 1.19 2006/11/30 19:28:07 damien Exp $	*/
-/*	$NetBSD: if_zydreg.h,v 1.7 2012/08/24 09:01:23 msaitoh Exp $	*/
+/*	$NetBSD: if_zydreg.h,v 1.7.16.1 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2006 by Damien Bergamini <[email protected]>
@@ -1219,6 +1219,7 @@ struct zyd_softc {
 #define ZYD_ENDPT_CNT	4
 	usbd_pipe_handle		zyd_ep[ZYD_ENDPT_CNT];
 	uint8_t 			*ibuf;
+	size_t				ibuf_size;
 
 	struct zyd_rx_data		rx_data[ZYD_RX_LIST_CNT];
 	struct zyd_tx_data		tx_data[ZYD_TX_LIST_CNT];

Index: src/sys/dev/usb/u3g.c
diff -u src/sys/dev/usb/u3g.c:1.31.2.3 src/sys/dev/usb/u3g.c:1.31.2.4
--- src/sys/dev/usb/u3g.c:1.31.2.3	Wed Dec  3 12:52:07 2014
+++ src/sys/dev/usb/u3g.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: u3g.c,v 1.31.2.3 2014/12/03 12:52:07 skrll Exp $	*/
+/*	$NetBSD: u3g.c,v 1.31.2.4 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -50,12 +50,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: u3g.c,v 1.31.2.3 2014/12/03 12:52:07 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: u3g.c,v 1.31.2.4 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/bus.h>
 #include <sys/conf.h>
 #include <sys/tty.h>
@@ -129,6 +129,7 @@ struct u3g_softc {
 
 	usbd_pipe_handle	sc_intr_pipe;	/* Interrupt pipe */
 	u_char			*sc_intr_buff;	/* Interrupt buffer */
+	size_t			sc_intr_size;	/* buffer size */
 };
 
 /*
@@ -816,7 +817,8 @@ u3g_attach(device_t parent, device_t sel
 	 * the tty(4) device is open or not.
 	 */
 	if (intr_address != -1) {
-		sc->sc_intr_buff = malloc(intr_size, M_USBDEV, M_WAITOK);
+		sc->sc_intr_size = intr_size;
+		sc->sc_intr_buff = kmem_alloc(intr_size, KM_SLEEP);
 		error = usbd_open_pipe_intr(iface, intr_address,
 		    USBD_SHORT_XFER_OK, &sc->sc_intr_pipe, sc, sc->sc_intr_buff,
 		    intr_size, u3g_intr, 100);
@@ -860,7 +862,7 @@ u3g_detach(device_t self, int flags)
 		sc->sc_intr_pipe = NULL;
 	}
 	if (sc->sc_intr_buff != NULL) {
-		free(sc->sc_intr_buff, M_USBDEV);
+		kmem_free(sc->sc_intr_buff, sc->sc_intr_size);
 		sc->sc_intr_buff = NULL;
 	}
 

Index: src/sys/dev/usb/uaudio.c
diff -u src/sys/dev/usb/uaudio.c:1.140.2.3 src/sys/dev/usb/uaudio.c:1.140.2.4
--- src/sys/dev/usb/uaudio.c:1.140.2.3	Wed Dec  3 12:52:07 2014
+++ src/sys/dev/usb/uaudio.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uaudio.c,v 1.140.2.3 2014/12/03 12:52:07 skrll Exp $	*/
+/*	$NetBSD: uaudio.c,v 1.140.2.4 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1999, 2012 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uaudio.c,v 1.140.2.3 2014/12/03 12:52:07 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uaudio.c,v 1.140.2.4 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -543,7 +543,8 @@ uaudio_detach(device_t self, int flags)
 			   sc->sc_dev);
 
 	if (sc->sc_formats != NULL)
-		free(sc->sc_formats, M_USBDEV);
+		kmem_free(sc->sc_formats,
+		    sizeof(struct audio_format) * sc->sc_nformats);
 	auconv_delete_encodings(sc->sc_encodings);
 
 	mutex_destroy(&sc->sc_lock);
@@ -598,7 +599,7 @@ uaudio_mixer_add_ctl(struct uaudio_softc
 		DPRINTF("adding %s\n", mc->ctlname);
 	}
 	len = sizeof(*mc) * (sc->sc_nctls + 1);
-	nmc = malloc(len, M_USBDEV, M_NOWAIT);
+	nmc = kmem_alloc(len, KM_SLEEP);
 	if (nmc == NULL) {
 		aprint_error("uaudio_mixer_add_ctl: no memory\n");
 		return;
@@ -606,7 +607,7 @@ uaudio_mixer_add_ctl(struct uaudio_softc
 	/* Copy old data, if there was any */
 	if (sc->sc_nctls != 0) {
 		memcpy(nmc, sc->sc_ctls, sizeof(*mc) * (sc->sc_nctls));
-		free(sc->sc_ctls, M_USBDEV);
+		kmem_free(sc->sc_ctls, sizeof(*mc) * sc->sc_nctls);
 	}
 	sc->sc_ctls = nmc;
 
@@ -1531,7 +1532,7 @@ uaudio_add_alt(struct uaudio_softc *sc, 
 	struct as_info *nai;
 
 	len = sizeof(*ai) * (sc->sc_nalts + 1);
-	nai = malloc(len, M_USBDEV, M_NOWAIT);
+	nai = kmem_alloc(len, KM_SLEEP);
 	if (nai == NULL) {
 		aprint_error("uaudio_add_alt: no memory\n");
 		return;
@@ -1539,7 +1540,8 @@ uaudio_add_alt(struct uaudio_softc *sc, 
 	/* Copy old data, if there was any */
 	if (sc->sc_nalts != 0) {
 		memcpy(nai, sc->sc_alts, sizeof(*ai) * (sc->sc_nalts));
-		free(sc->sc_alts, M_USBDEV);
+		kmem_free(sc->sc_alts,
+		    sizeof(struct audio_format) * sc->sc_nalts);
 	}
 	sc->sc_alts = nai;
 	DPRINTFN(2,"adding alt=%d, enc=%d\n",
@@ -1820,8 +1822,8 @@ uaudio_identify_as(struct uaudio_softc *
 	}
 
 	/* build audio_format array */
-	sc->sc_formats = malloc(sizeof(struct audio_format) * sc->sc_nalts,
-				M_USBDEV, M_NOWAIT);
+	sc->sc_formats = kmem_alloc(sizeof(struct audio_format) * sc->sc_nalts,
+	    KM_SLEEP);
 	if (sc->sc_formats == NULL)
 		return USBD_NOMEM;
 	sc->sc_nformats = sc->sc_nalts;
@@ -1860,7 +1862,8 @@ uaudio_identify_as(struct uaudio_softc *
 
 	if (0 != auconv_create_encodings(sc->sc_formats, sc->sc_nformats,
 					 &sc->sc_encodings)) {
-		free(sc->sc_formats, M_DEVBUF);
+		kmem_free(sc->sc_formats,
+		    sizeof(struct audio_format) * sc->sc_nformats);
 		sc->sc_formats = NULL;
 		return ENOMEM;
 	}

Index: src/sys/dev/usb/ubsa.c
diff -u src/sys/dev/usb/ubsa.c:1.30 src/sys/dev/usb/ubsa.c:1.30.16.1
--- src/sys/dev/usb/ubsa.c:1.30	Fri Feb 24 06:48:24 2012
+++ src/sys/dev/usb/ubsa.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ubsa.c,v 1.30 2012/02/24 06:48:24 mrg Exp $	*/
+/*	$NetBSD: ubsa.c,v 1.30.16.1 2014/12/03 14:18:07 skrll Exp $	*/
 /*-
  * Copyright (c) 2002, Alexander Kabaev <kan.FreeBSD.org>.
  * All rights reserved.
@@ -54,12 +54,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ubsa.c,v 1.30 2012/02/24 06:48:24 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ubsa.c,v 1.30.16.1 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/ioccom.h>
 #include <sys/fcntl.h>
 #include <sys/conf.h>
@@ -326,7 +326,7 @@ ubsa_detach(device_t self, int flags)
 	if (sc->sc_intr_pipe != NULL) {
 		usbd_abort_pipe(sc->sc_intr_pipe);
 		usbd_close_pipe(sc->sc_intr_pipe);
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 

Index: src/sys/dev/usb/ubsa_common.c
diff -u src/sys/dev/usb/ubsa_common.c:1.9.14.1 src/sys/dev/usb/ubsa_common.c:1.9.14.2
--- src/sys/dev/usb/ubsa_common.c:1.9.14.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/ubsa_common.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ubsa_common.c,v 1.9.14.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: ubsa_common.c,v 1.9.14.2 2014/12/03 14:18:07 skrll Exp $	*/
 /*-
  * Copyright (c) 2002, Alexander Kabaev <kan.FreeBSD.org>.
  * All rights reserved.
@@ -54,12 +54,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ubsa_common.c,v 1.9.14.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ubsa_common.c,v 1.9.14.2 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/ioccom.h>
 #include <sys/fcntl.h>
 #include <sys/conf.h>
@@ -345,7 +345,7 @@ ubsa_open(void *addr, int portno)
 		return (ENXIO);
 
 	if (sc->sc_intr_number != -1 && sc->sc_intr_pipe == NULL) {
-		sc->sc_intr_buf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK);
+		sc->sc_intr_buf = kmem_alloc(sc->sc_isize, KM_SLEEP);
 		/* XXX only iface# = 0 has intr line */
 		/* XXX E220 specific? need to check */
 		err = usbd_open_pipe_intr(sc->sc_iface[0],
@@ -390,7 +390,7 @@ ubsa_close(void *addr, int portno)
 			printf("%s: close interrupt pipe failed: %s\n",
 			    device_xname(sc->sc_dev),
 			    usbd_errstr(err));
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 }

Index: src/sys/dev/usb/ubt.c
diff -u src/sys/dev/usb/ubt.c:1.51.4.1 src/sys/dev/usb/ubt.c:1.51.4.2
--- src/sys/dev/usb/ubt.c:1.51.4.1	Tue Dec  2 09:00:34 2014
+++ src/sys/dev/usb/ubt.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ubt.c,v 1.51.4.1 2014/12/02 09:00:34 skrll Exp $	*/
+/*	$NetBSD: ubt.c,v 1.51.4.2 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -67,13 +67,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ubt.c,v 1.51.4.1 2014/12/02 09:00:34 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ubt.c,v 1.51.4.2 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
 #include <sys/ioctl.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/mbuf.h>
 #include <sys/proc.h>
 #include <sys/sysctl.h>
@@ -769,7 +769,7 @@ ubt_abortdealloc(struct ubt_softc *sc)
 
 	/* Free event buffer */
 	if (sc->sc_evt_buf != NULL) {
-		free(sc->sc_evt_buf, M_USBDEV);
+		kmem_free(sc->sc_evt_buf, UBT_BUFSIZ_EVENT);
 		sc->sc_evt_buf = NULL;
 	}
 
@@ -843,7 +843,7 @@ ubt_enable(device_t self)
 	s = splusb();
 
 	/* Events */
-	sc->sc_evt_buf = malloc(UBT_BUFSIZ_EVENT, M_USBDEV, M_NOWAIT);
+	sc->sc_evt_buf = kmem_alloc(UBT_BUFSIZ_EVENT, KM_SLEEP);
 	if (sc->sc_evt_buf == NULL) {
 		error = ENOMEM;
 		goto bad;

Index: src/sys/dev/usb/uchcom.c
diff -u src/sys/dev/usb/uchcom.c:1.13 src/sys/dev/usb/uchcom.c:1.13.6.1
--- src/sys/dev/usb/uchcom.c:1.13	Sat Mar 15 19:20:27 2014
+++ src/sys/dev/usb/uchcom.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uchcom.c,v 1.13 2014/03/15 19:20:27 martin Exp $	*/
+/*	$NetBSD: uchcom.c,v 1.13.6.1 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uchcom.c,v 1.13 2014/03/15 19:20:27 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uchcom.c,v 1.13.6.1 2014/12/03 14:18:07 skrll Exp $");
 
 /*
  * driver for WinChipHead CH341/340, the worst USB-serial chip in the world.
@@ -39,7 +39,7 @@ __KERNEL_RCSID(0, "$NetBSD: uchcom.c,v 1
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/ioctl.h>
 #include <sys/conf.h>
 #include <sys/tty.h>
@@ -872,7 +872,7 @@ setup_intr_pipe(struct uchcom_softc *sc)
 	usbd_status err;
 
 	if (sc->sc_intr_endpoint != -1 && sc->sc_intr_pipe == NULL) {
-		sc->sc_intr_buf = malloc(sc->sc_intr_size, M_USBDEV, M_WAITOK);
+		sc->sc_intr_buf = kmem_alloc(sc->sc_intr_size, KM_SLEEP);
 		err = usbd_open_pipe_intr(sc->sc_iface,
 					  sc->sc_intr_endpoint,
 					  USBD_SHORT_XFER_OK,
@@ -909,7 +909,7 @@ close_intr_pipe(struct uchcom_softc *sc)
 			aprint_error_dev(sc->sc_dev,
 			    "close interrupt pipe failed: %s\n",
 			    usbd_errstr(err));
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_intr_size);
 		sc->sc_intr_pipe = NULL;
 	}
 }

Index: src/sys/dev/usb/ucycom.c
diff -u src/sys/dev/usb/ucycom.c:1.41.2.1 src/sys/dev/usb/ucycom.c:1.41.2.2
--- src/sys/dev/usb/ucycom.c:1.41.2.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/ucycom.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ucycom.c,v 1.41.2.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: ucycom.c,v 1.41.2.2 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -38,13 +38,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ucycom.c,v 1.41.2.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ucycom.c,v 1.41.2.2 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/conf.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/sysctl.h>
 #include <sys/tty.h>
@@ -380,7 +380,7 @@ ucycomopen(dev_t dev, int flag, int mode
 		ttsetwater(tp);
 
 		/* Allocate an output report buffer */
-		sc->sc_obuf = malloc(sc->sc_olen, M_USBDEV, M_WAITOK);
+		sc->sc_obuf = kmem_alloc(sc->sc_olen, KM_SLEEP);
 
 		DPRINTF(("ucycomopen: sc->sc_obuf=%p\n", sc->sc_obuf));
 
@@ -1127,6 +1127,6 @@ ucycom_cleanup(struct ucycom_softc *sc)
 	DPRINTF(("ucycom_cleanup: closing uhidev\n"));
 
 	if (sc->sc_obuf !=NULL)
-		free (sc->sc_obuf, M_USBDEV);
+		kmem_free(sc->sc_obuf, sc->sc_olen);
 	uhidev_close(&sc->sc_hdev);
 }

Index: src/sys/dev/usb/udsir.c
diff -u src/sys/dev/usb/udsir.c:1.1.14.2 src/sys/dev/usb/udsir.c:1.1.14.3
--- src/sys/dev/usb/udsir.c:1.1.14.2	Tue Dec  2 09:00:34 2014
+++ src/sys/dev/usb/udsir.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: udsir.c,v 1.1.14.2 2014/12/02 09:00:34 skrll Exp $	*/
+/*	$NetBSD: udsir.c,v 1.1.14.3 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,14 +30,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udsir.c,v 1.1.14.2 2014/12/02 09:00:34 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udsir.c,v 1.1.14.3 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
 #include <sys/errno.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/conf.h>
 #include <sys/file.h>
 #include <sys/poll.h>
@@ -349,7 +349,7 @@ udsir_open(void *h, int flag, int mode, 
 		error = ENOMEM;
 		goto bad5;
 	}
-	sc->sc_ur_buf = malloc(IRDA_MAX_FRAME_SIZE, M_USBDEV, M_NOWAIT);
+	sc->sc_ur_buf = kmem_alloc(IRDA_MAX_FRAME_SIZE, KM_SLEEP);
 	if (sc->sc_ur_buf == NULL) {
 		error = ENOMEM;
 		goto bad5;
@@ -436,7 +436,7 @@ udsir_close(void *h, int flag, int mode,
 		sc->sc_wr_buf = NULL;
 	}
 	if (sc->sc_ur_buf != NULL) {
-		free(sc->sc_ur_buf, M_USBDEV);
+		kmem_free(sc->sc_ur_buf, IRDA_MAX_FRAME_SIZE);
 		sc->sc_ur_buf = NULL;
 	}
 

Index: src/sys/dev/usb/uep.c
diff -u src/sys/dev/usb/uep.c:1.19.6.1 src/sys/dev/usb/uep.c:1.19.6.2
--- src/sys/dev/usb/uep.c:1.19.6.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/uep.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uep.c,v 1.19.6.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: uep.c,v 1.19.6.2 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -33,12 +33,12 @@
  *  eGalax USB touchpanel controller driver.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uep.c,v 1.19.6.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uep.c,v 1.19.6.2 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/ioctl.h>
 #include <sys/vnode.h>
@@ -285,12 +285,12 @@ uep_enable(void *v)
 	if (sc->sc_isize == 0)
 		return 0;
 
-	sc->sc_ibuf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK);
+	sc->sc_ibuf = kmem_alloc(sc->sc_isize, KM_SLEEP);
 	err = usbd_open_pipe_intr(sc->sc_iface, sc->sc_intr_number,
 		USBD_SHORT_XFER_OK, &sc->sc_intr_pipe, sc, sc->sc_ibuf,
 		sc->sc_isize, uep_intr, USBD_DEFAULT_INTERVAL);
 	if (err) {
-		free(sc->sc_ibuf, M_USBDEV);
+		kmem_free(sc->sc_ibuf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 		return EIO;
 	}
@@ -318,7 +318,7 @@ uep_disable(void *v)
 	}
 
 	if (sc->sc_ibuf != NULL) {
-		free(sc->sc_ibuf, M_USBDEV);
+		kmem_free(sc->sc_ibuf, sc->sc_isize);
 		sc->sc_ibuf = NULL;
 	}
 

Index: src/sys/dev/usb/ugen.c
diff -u src/sys/dev/usb/ugen.c:1.126.2.3 src/sys/dev/usb/ugen.c:1.126.2.4
--- src/sys/dev/usb/ugen.c:1.126.2.3	Tue Dec  2 09:00:34 2014
+++ src/sys/dev/usb/ugen.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ugen.c,v 1.126.2.3 2014/12/02 09:00:34 skrll Exp $	*/
+/*	$NetBSD: ugen.c,v 1.126.2.4 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.126.2.3 2014/12/02 09:00:34 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.126.2.4 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -47,7 +47,7 @@ __KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.1
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/ioctl.h>
 #include <sys/conf.h>
@@ -409,11 +409,11 @@ ugenopen(dev_t dev, int flag, int mode, 
 			isize = UGETW(edesc->wMaxPacketSize);
 			if (isize == 0)	/* shouldn't happen */
 				return (EINVAL);
-			sce->ibuf = malloc(isize, M_USBDEV, M_WAITOK);
+			sce->ibuf = kmem_alloc(isize, KM_SLEEP);
 			DPRINTFN(5, ("ugenopen: intr endpt=%d,isize=%d\n",
 				     endpt, isize));
 			if (clalloc(&sce->q, UGEN_IBSIZE, 0) == -1) {
-				free(sce->ibuf, M_USBDEV);
+				kmem_free(sce->ibuf, isize);
 				sce->ibuf = NULL;
 				return (ENOMEM);
 			}
@@ -424,7 +424,7 @@ ugenopen(dev_t dev, int flag, int mode, 
 				  USBD_DEFAULT_INTERVAL);
 			if (err) {
 				clfree(&sce->q);
-				free(sce->ibuf, M_USBDEV);
+				kmem_free(sce->ibuf, isize);
 				sce->ibuf = NULL;
 				return (EIO);
 			}
@@ -448,8 +448,8 @@ ugenopen(dev_t dev, int flag, int mode, 
 			isize = UGETW(edesc->wMaxPacketSize);
 			if (isize == 0)	/* shouldn't happen */
 				return (EINVAL);
-			sce->ibuf = malloc(isize * UGEN_NISOFRAMES,
-				M_USBDEV, M_WAITOK);
+			sce->ibuf = kmem_alloc(isize * UGEN_NISOFRAMES,
+				KM_SLEEP);
 			sce->cur = sce->fill = sce->ibuf;
 			sce->limit = sce->ibuf + isize * UGEN_NISOFRAMES;
 			DPRINTFN(5, ("ugenopen: isoc endpt=%d, isize=%d\n",
@@ -457,7 +457,7 @@ ugenopen(dev_t dev, int flag, int mode, 
 			err = usbd_open_pipe(sce->iface,
 				  edesc->bEndpointAddress, 0, &sce->pipeh);
 			if (err) {
-				free(sce->ibuf, M_USBDEV);
+				kmem_free(sce->ibuf, isize * UGEN_NISOFRAMES);
 				sce->ibuf = NULL;
 				return (EIO);
 			}
@@ -490,7 +490,7 @@ ugenopen(dev_t dev, int flag, int mode, 
 				usbd_free_xfer(sce->isoreqs[i].xfer);
 			usbd_close_pipe(sce->pipeh);
 			sce->pipeh = NULL;
-			free(sce->ibuf, M_USBDEV);
+			kmem_free(sce->ibuf, isize * UGEN_NISOFRAMES);
 			sce->ibuf = NULL;
 			return (ENOMEM);
 		case UE_CONTROL:
@@ -544,26 +544,31 @@ ugenclose(dev_t dev, int flag, int mode,
 		usbd_close_pipe(sce->pipeh);
 		sce->pipeh = NULL;
 
+		int isize = UGETW(sce->edesc->wMaxPacketSize);
+		int msize = 0;
+
 		switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
 		case UE_INTERRUPT:
 			ndflush(&sce->q, sce->q.c_cc);
 			clfree(&sce->q);
+			msize = isize;
 			break;
 		case UE_ISOCHRONOUS:
 			for (i = 0; i < UGEN_NISOREQS; ++i)
 				usbd_free_xfer(sce->isoreqs[i].xfer);
+			msize = isize * UGEN_NISOFRAMES;
 			break;
 		case UE_BULK:
-			if (sce->state & (UGEN_BULK_RA | UGEN_BULK_WB))
-				/* ibuf freed below */
+			if (sce->state & (UGEN_BULK_RA | UGEN_BULK_WB)) {
 				usbd_free_xfer(sce->ra_wb_xfer);
+				msize = sce->ra_wb_bufsize;
+			}
 			break;
 		default:
 			break;
 		}
-
 		if (sce->ibuf != NULL) {
-			free(sce->ibuf, M_USBDEV);
+			kmem_free(sce->ibuf, msize);
 			sce->ibuf = NULL;
 		}
 	}
@@ -1381,7 +1386,7 @@ ugen_get_cdesc(struct ugen_softc *sc, in
 		len = UGETW(tdesc->wTotalLength);
 		if (lenp)
 			*lenp = len;
-		cdesc = malloc(len, M_TEMP, M_WAITOK);
+		cdesc = kmem_alloc(len, KM_SLEEP);
 		memcpy(cdesc, tdesc, len);
 		DPRINTFN(5,("ugen_get_cdesc: current, len=%d\n", len));
 	} else {
@@ -1392,10 +1397,10 @@ ugen_get_cdesc(struct ugen_softc *sc, in
 		DPRINTFN(5,("ugen_get_cdesc: index=%d, len=%d\n", index, len));
 		if (lenp)
 			*lenp = len;
-		cdesc = malloc(len, M_TEMP, M_WAITOK);
+		cdesc = kmem_alloc(len, KM_SLEEP);
 		err = usbd_get_config_desc_full(sc->sc_udev, index, cdesc, len);
 		if (err) {
-			free(cdesc, M_TEMP);
+			kmem_free(cdesc, len);
 			return (0);
 		}
 	}
@@ -1430,6 +1435,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 	struct usb_alt_interface *ai;
 	struct usb_string_desc *si;
 	uint8_t conf, alt;
+	int cdesclen;
 
 	DPRINTFN(5, ("ugenioctl: cmd=%08lx\n", cmd));
 	if (sc->sc_dying)
@@ -1492,8 +1498,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 				usbd_free_xfer(sce->ra_wb_xfer);
 				return (ENOMEM);
 			}
-			sce->ibuf = malloc(sce->ra_wb_bufsize,
-					   M_USBDEV, M_WAITOK);
+			sce->ibuf = kmem_alloc(sce->ra_wb_bufsize, KM_SLEEP);
 			sce->fill = sce->cur = sce->ibuf;
 			sce->limit = sce->ibuf + sce->ra_wb_bufsize;
 			sce->ra_wb_used = 0;
@@ -1508,7 +1513,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 			err = usbd_transfer(sce->ra_wb_xfer);
 			if (err != USBD_IN_PROGRESS) {
 				sce->state &= ~UGEN_BULK_RA;
-				free(sce->ibuf, M_USBDEV);
+				kmem_free(sce->ibuf, sce->ra_wb_bufsize);
 				sce->ibuf = NULL;
 				usbd_free_xfer(sce->ra_wb_xfer);
 				return (EIO);
@@ -1526,7 +1531,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 			 * should keep it around and drain the buffer
 			 * instead.
 			 */
-			free(sce->ibuf, M_USBDEV);
+			kmem_free(sce->ibuf, sce->ra_wb_bufsize);
 			sce->ibuf = NULL;
 		}
 		return (0);
@@ -1561,8 +1566,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 				usbd_free_xfer(sce->ra_wb_xfer);
 				return (ENOMEM);
 			}
-			sce->ibuf = malloc(sce->ra_wb_bufsize,
-					   M_USBDEV, M_WAITOK);
+			sce->ibuf = kmem_alloc(sce->ra_wb_bufsize, KM_SLEEP);
 			sce->fill = sce->cur = sce->ibuf;
 			sce->limit = sce->ibuf + sce->ra_wb_bufsize;
 			sce->ra_wb_used = 0;
@@ -1580,7 +1584,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 			 */
 			usbd_abort_pipe(sce->pipeh);
 			usbd_free_xfer(sce->ra_wb_xfer);
-			free(sce->ibuf, M_USBDEV);
+			kmem_free(sce->ibuf, sce->ra_wb_bufsize);
 			sce->ibuf = NULL;
 		}
 		return (0);
@@ -1670,17 +1674,17 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 		break;
 	case USB_GET_NO_ALT:
 		ai = (struct usb_alt_interface *)addr;
-		cdesc = ugen_get_cdesc(sc, ai->uai_config_index, 0);
+		cdesc = ugen_get_cdesc(sc, ai->uai_config_index, &cdesclen);
 		if (cdesc == NULL)
 			return (EINVAL);
 		idesc = usbd_find_idesc(cdesc, ai->uai_interface_index, 0);
 		if (idesc == NULL) {
-			free(cdesc, M_TEMP);
+			kmem_free(cdesc, cdesclen);
 			return (EINVAL);
 		}
 		ai->uai_alt_no = usbd_get_no_alts(cdesc,
 		    idesc->bInterfaceNumber);
-		free(cdesc, M_TEMP);
+		kmem_free(cdesc, cdesclen);
 		break;
 	case USB_GET_DEVICE_DESC:
 		*(usb_device_descriptor_t *)addr =
@@ -1688,15 +1692,15 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 		break;
 	case USB_GET_CONFIG_DESC:
 		cd = (struct usb_config_desc *)addr;
-		cdesc = ugen_get_cdesc(sc, cd->ucd_config_index, 0);
+		cdesc = ugen_get_cdesc(sc, cd->ucd_config_index, &cdesclen);
 		if (cdesc == NULL)
 			return (EINVAL);
 		cd->ucd_desc = *cdesc;
-		free(cdesc, M_TEMP);
+		kmem_free(cdesc, cdesclen);
 		break;
 	case USB_GET_INTERFACE_DESC:
 		id = (struct usb_interface_desc *)addr;
-		cdesc = ugen_get_cdesc(sc, id->uid_config_index, 0);
+		cdesc = ugen_get_cdesc(sc, id->uid_config_index, &cdesclen);
 		if (cdesc == NULL)
 			return (EINVAL);
 		if (id->uid_config_index == USB_CURRENT_CONFIG_INDEX &&
@@ -1706,15 +1710,15 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 			alt = id->uid_alt_index;
 		idesc = usbd_find_idesc(cdesc, id->uid_interface_index, alt);
 		if (idesc == NULL) {
-			free(cdesc, M_TEMP);
+			kmem_free(cdesc, cdesclen);
 			return (EINVAL);
 		}
 		id->uid_desc = *idesc;
-		free(cdesc, M_TEMP);
+		kmem_free(cdesc, cdesclen);
 		break;
 	case USB_GET_ENDPOINT_DESC:
 		ed = (struct usb_endpoint_desc *)addr;
-		cdesc = ugen_get_cdesc(sc, ed->ued_config_index, 0);
+		cdesc = ugen_get_cdesc(sc, ed->ued_config_index, &cdesclen);
 		if (cdesc == NULL)
 			return (EINVAL);
 		if (ed->ued_config_index == USB_CURRENT_CONFIG_INDEX &&
@@ -1725,11 +1729,11 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 		edesc = usbd_find_edesc(cdesc, ed->ued_interface_index,
 					alt, ed->ued_endpoint_index);
 		if (edesc == NULL) {
-			free(cdesc, M_TEMP);
+			kmem_free(cdesc, cdesclen);
 			return (EINVAL);
 		}
 		ed->ued_desc = *edesc;
-		free(cdesc, M_TEMP);
+		kmem_free(cdesc, cdesclen);
 		break;
 	case USB_GET_FULL_DESC:
 	{
@@ -1739,9 +1743,10 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 		struct usb_full_desc *fd = (struct usb_full_desc *)addr;
 		int error;
 
-		cdesc = ugen_get_cdesc(sc, fd->ufd_config_index, &len);
+		cdesc = ugen_get_cdesc(sc, fd->ufd_config_index, &cdesclen);
 		if (cdesc == NULL)
 			return (EINVAL);
+		len = cdesclen;
 		if (len > fd->ufd_size)
 			len = fd->ufd_size;
 		iov.iov_base = (void *)fd->ufd_data;
@@ -1753,7 +1758,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 		uio.uio_rw = UIO_READ;
 		uio.uio_vmspace = l->l_proc->p_vmspace;
 		error = uiomove((void *)cdesc, len, &uio);
-		free(cdesc, M_TEMP);
+		kmem_free(cdesc, cdesclen);
 		return (error);
 	}
 	case USB_GET_STRING_DESC: {
@@ -1799,7 +1804,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 				ur->ucr_request.bmRequestType & UT_READ ?
 				UIO_READ : UIO_WRITE;
 			uio.uio_vmspace = l->l_proc->p_vmspace;
-			ptr = malloc(len, M_TEMP, M_WAITOK);
+			ptr = kmem_alloc(len, KM_SLEEP);
 			if (uio.uio_rw == UIO_WRITE) {
 				error = uiomove(ptr, len, &uio);
 				if (error)
@@ -1815,14 +1820,15 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 		}
 		if (len != 0) {
 			if (uio.uio_rw == UIO_READ) {
-				error = uiomove(ptr, len, &uio);
+				size_t alen = min(len, ur->ucr_actlen);
+				error = uiomove(ptr, alen, &uio);
 				if (error)
 					goto ret;
 			}
 		}
 	ret:
 		if (ptr)
-			free(ptr, M_TEMP);
+			kmem_free(ptr, len);
 		return (error);
 	}
 	case USB_GET_DEVICEINFO:

Index: src/sys/dev/usb/uhid.c
diff -u src/sys/dev/usb/uhid.c:1.92.4.2 src/sys/dev/usb/uhid.c:1.92.4.3
--- src/sys/dev/usb/uhid.c:1.92.4.2	Sun Nov 30 13:14:11 2014
+++ src/sys/dev/usb/uhid.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhid.c,v 1.92.4.2 2014/11/30 13:14:11 skrll Exp $	*/
+/*	$NetBSD: uhid.c,v 1.92.4.3 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004, 2008, 2012 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.92.4.2 2014/11/30 13:14:11 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.92.4.3 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -44,7 +44,7 @@ __KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.9
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/signalvar.h>
 #include <sys/device.h>
 #include <sys/ioctl.h>
@@ -330,7 +330,7 @@ uhidopen(dev_t dev, int flag, int mode, 
 		mutex_exit(&sc->sc_access_lock);
 		return (ENOMEM);
 	}
-	sc->sc_obuf = malloc(sc->sc_osize, M_USBDEV, M_WAITOK);
+	sc->sc_obuf = kmem_alloc(sc->sc_osize, KM_SLEEP);
 	sc->sc_state &= ~UHID_IMMED;
 
 	mutex_enter(proc_lock);
@@ -350,7 +350,7 @@ uhidclose(dev_t dev, int flag, int mode,
 	DPRINTF(("uhidclose: sc=%p\n", sc));
 
 	clfree(&sc->sc_q);
-	free(sc->sc_obuf, M_USBDEV);
+	kmem_free(sc->sc_obuf, sc->sc_osize);
 
 	mutex_enter(proc_lock);
 	sc->sc_async = NULL;

Index: src/sys/dev/usb/uhidev.c
diff -u src/sys/dev/usb/uhidev.c:1.61.4.2 src/sys/dev/usb/uhidev.c:1.61.4.3
--- src/sys/dev/usb/uhidev.c:1.61.4.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/uhidev.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhidev.c,v 1.61.4.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: uhidev.c,v 1.61.4.3 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001, 2012 The NetBSD Foundation, Inc.
@@ -35,12 +35,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhidev.c,v 1.61.4.2 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhidev.c,v 1.61.4.3 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/signalvar.h>
 #include <sys/device.h>
 #include <sys/ioctl.h>
@@ -226,7 +226,7 @@ uhidev_attach(device_t parent, device_t 
 	}
 
 	if (descptr) {
-		desc = malloc(size, M_USBDEV, M_NOWAIT);
+		desc = kmem_alloc(size, KM_SLEEP);
 		if (desc == NULL)
 			err = USBD_NOMEM;
 		else {
@@ -235,8 +235,7 @@ uhidev_attach(device_t parent, device_t 
 		}
 	} else {
 		desc = NULL;
-		err = usbd_read_report_desc(uaa->iface, &desc, &size,
-		    M_USBDEV);
+		err = usbd_read_report_desc(uaa->iface, &desc, &size);
 	}
 	if (err) {
 		aprint_error_dev(self, "no report descriptor\n");
@@ -301,13 +300,13 @@ uhidev_attach(device_t parent, device_t 
 	if (nrepid > 0)
 		aprint_normal_dev(self, "%d report ids\n", nrepid);
 	nrepid++;
-	repsizes = malloc(nrepid * sizeof(*repsizes), M_TEMP, M_NOWAIT);
+	repsizes = kmem_alloc(nrepid * sizeof(*repsizes), KM_SLEEP);
 	if (repsizes == NULL)
 		goto nomem;
-	sc->sc_subdevs = malloc(nrepid * sizeof(device_t),
-				M_USBDEV, M_NOWAIT | M_ZERO);
+	sc->sc_subdevs = kmem_zalloc(nrepid * sizeof(device_t),
+	    KM_SLEEP);
 	if (sc->sc_subdevs == NULL) {
-		free(repsizes, M_TEMP);
+		kmem_free(repsizes, nrepid * sizeof(*repsizes));
 nomem:
 		aprint_error_dev(self, "no memory\n");
 		return;
@@ -350,7 +349,8 @@ nomem:
 				DPRINTF(("uhidev_match: repid=%d dev=%p\n",
 					 repid, dev));
 				if (csc->sc_intr == NULL) {
-					free(repsizes, M_TEMP);
+					kmem_free(repsizes,
+					    nrepid * sizeof(*repsizes));
 					aprint_error_dev(self,
 					    "sc_intr == NULL\n");
 					return;
@@ -363,7 +363,7 @@ nomem:
 			}
 		}
 	}
-	free(repsizes, M_TEMP);
+	kmem_free(repsizes, nrepid * sizeof(*repsizes));
 
 	return;
 }
@@ -438,7 +438,7 @@ uhidev_detach(device_t self, int flags)
 		usbd_abort_pipe(sc->sc_ipipe);
 
 	if (sc->sc_repdesc != NULL)
-		free(sc->sc_repdesc, M_USBDEV);
+		kmem_free(sc->sc_repdesc, sc->sc_repdesc_size);
 
 	rv = 0;
 	for (i = 0; i < sc->sc_nrepid; i++) {
@@ -555,7 +555,7 @@ uhidev_open(struct uhidev *scd)
 	if (sc->sc_isize == 0)
 		return (0);
 
-	sc->sc_ibuf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK);
+	sc->sc_ibuf = kmem_alloc(sc->sc_isize, KM_SLEEP);
 
 	/* Set up input interrupt pipe. */
 	DPRINTF(("uhidev_open: isize=%d, ep=0x%02x\n", sc->sc_isize,
@@ -606,7 +606,7 @@ out2:
 	usbd_close_pipe(sc->sc_ipipe);
 out1:
 	DPRINTF(("uhidev_open: failed in someway"));
-	free(sc->sc_ibuf, M_USBDEV);
+	kmem_free(sc->sc_ibuf, sc->sc_isize);
 	mutex_enter(&sc->sc_lock);
 	scd->sc_state &= ~UHIDEV_OPEN;
 	sc->sc_refcnt = 0;
@@ -656,7 +656,7 @@ uhidev_close(struct uhidev *scd)
 	}
 
 	if (sc->sc_ibuf != NULL) {
-		free(sc->sc_ibuf, M_USBDEV);
+		kmem_free(sc->sc_ibuf, sc->sc_isize);
 		sc->sc_ibuf = NULL;
 	}
 }
@@ -671,14 +671,14 @@ uhidev_set_report(struct uhidev *scd, in
 		return usbd_set_report(scd->sc_parent->sc_iface, type,
 				       scd->sc_report_id, data, len);
 
-	buf = malloc(len + 1, M_TEMP, M_WAITOK);
+	buf = kmem_alloc(len + 1, KM_SLEEP);
 	buf[0] = scd->sc_report_id;
 	memcpy(buf+1, data, len);
 
 	retstat = usbd_set_report(scd->sc_parent->sc_iface, type,
 				  scd->sc_report_id, buf, len + 1);
 
-	free(buf, M_TEMP);
+	kmem_free(buf, len + 1);
 
 	return retstat;
 }

Index: src/sys/dev/usb/uhmodem.c
diff -u src/sys/dev/usb/uhmodem.c:1.13.24.2 src/sys/dev/usb/uhmodem.c:1.13.24.3
--- src/sys/dev/usb/uhmodem.c:1.13.24.2	Sun Nov 30 13:14:11 2014
+++ src/sys/dev/usb/uhmodem.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhmodem.c,v 1.13.24.2 2014/11/30 13:14:11 skrll Exp $	*/
+/*	$NetBSD: uhmodem.c,v 1.13.24.3 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2008 Yojiro UO <[email protected]>.
@@ -71,12 +71,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhmodem.c,v 1.13.24.2 2014/11/30 13:14:11 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhmodem.c,v 1.13.24.3 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/ioccom.h>
 #include <sys/fcntl.h>
 #include <sys/conf.h>
@@ -406,7 +406,7 @@ uhmodem_detach(device_t self, int flags)
 	if (sc->sc_ubsa.sc_intr_pipe != NULL) {
 		usbd_abort_pipe(sc->sc_ubsa.sc_intr_pipe);
 		usbd_close_pipe(sc->sc_ubsa.sc_intr_pipe);
-		free(sc->sc_ubsa.sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_ubsa.sc_intr_buf, sc->sc_ubsa.sc_isize);
 		sc->sc_ubsa.sc_intr_pipe = NULL;
 	}
 
@@ -470,7 +470,7 @@ uhmodem_open(void *addr, int portno)
 	}
 #endif
 	if (sc->sc_intr_number != -1 && sc->sc_intr_pipe == NULL) {
-		sc->sc_intr_buf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK);
+		sc->sc_intr_buf = kmem_alloc(sc->sc_isize, KM_SLEEP);
 		/* XXX only iface# = 0 has intr line */
 		/* XXX E220 specific? need to check */
 		err = usbd_open_pipe_intr(sc->sc_iface[0],

Index: src/sys/dev/usb/uhub.c
diff -u src/sys/dev/usb/uhub.c:1.126.2.2 src/sys/dev/usb/uhub.c:1.126.2.3
--- src/sys/dev/usb/uhub.c:1.126.2.2	Wed Dec  3 12:52:07 2014
+++ src/sys/dev/usb/uhub.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhub.c,v 1.126.2.2 2014/12/03 12:52:07 skrll Exp $	*/
+/*	$NetBSD: uhub.c,v 1.126.2.3 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/uhub.c,v 1.18 1999/11/17 22:33:43 n_hibma Exp $	*/
 
 /*
@@ -36,12 +36,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhub.c,v 1.126.2.2 2014/12/03 12:52:07 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhub.c,v 1.126.2.3 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/proc.h>
 
@@ -212,8 +212,8 @@ uhub_attach(device_t parent, device_t se
 		goto bad;
 	}
 
-	hub = malloc(sizeof(*hub) + (nports-1) * sizeof(struct usbd_port),
-		     M_USBDEV, M_NOWAIT);
+	hub = kmem_alloc(sizeof(*hub) + (nports-1) * sizeof(struct usbd_port),
+	    KM_SLEEP);
 	if (hub == NULL)
 		return;
 	dev->ud_hub = hub;
@@ -245,10 +245,10 @@ uhub_attach(device_t parent, device_t se
 	}
 
 	sc->sc_statuslen = (nports + 1 + 7) / 8;
-	sc->sc_statusbuf = malloc(sc->sc_statuslen, M_USBDEV, M_NOWAIT);
+	sc->sc_statusbuf = kmem_alloc(sc->sc_statuslen, KM_SLEEP);
 	if (!sc->sc_statusbuf)
 		goto bad;
-	sc->sc_status = malloc(sc->sc_statuslen, M_USBDEV, M_NOWAIT);
+	sc->sc_status = kmem_alloc(sc->sc_statuslen, KM_SLEEP);
 	if (!sc->sc_status)
 		goto bad;
 	if (device_is_a(device_parent(device_parent(sc->sc_dev)), "ehci"))
@@ -299,8 +299,8 @@ uhub_attach(device_t parent, device_t se
 
 #if 0
 	if (UHUB_IS_HIGH_SPEED(sc) && nports > 0) {
-		tts = malloc((UHUB_IS_SINGLE_TT(sc) ? 1 : nports) *
-			     sizeof (struct usbd_tt), M_USBDEV, M_NOWAIT);
+		tts = kmem_alloc((UHUB_IS_SINGLE_TT(sc) ? 1 : nports) *
+			     sizeof (struct usbd_tt), KM_SLEEP);
 		if (!tts)
 			goto bad;
 	}
@@ -356,11 +356,12 @@ uhub_attach(device_t parent, device_t se
 
  bad:
 	if (sc->sc_status)
-		free(sc->sc_status, M_USBDEV);
+		kmem_free(sc->sc_statusbuf, sc->sc_statuslen);
 	if (sc->sc_statusbuf)
-		free(sc->sc_statusbuf, M_USBDEV);
+		kmem_free(sc->sc_statusbuf, sc->sc_statuslen);
 	if (hub)
-		free(hub, M_USBDEV);
+		kmem_free(hub,
+		    sizeof(*hub) + (nports-1) * sizeof(struct usbd_port));
 	dev->ud_hub = NULL;
 	return;
 }
@@ -625,14 +626,17 @@ uhub_detach(device_t self, int flags)
 
 #if 0
 	if (hub->ports[0].tt)
-		free(hub->ports[0].tt, M_USBDEV);
+		kmem_free(hub->ports[0].tt,
+		    (UHUB_IS_SINGLE_TT(sc) ? 1 : nports) *
+		    sizeof (struct usbd_tt));
 #endif
-	free(hub, M_USBDEV);
+	kmem_free(hub,
+	    sizeof(*hub) + (nports-1) * sizeof(struct usbd_port));
 	sc->sc_hub->ud_hub = NULL;
 	if (sc->sc_status)
-		free(sc->sc_status, M_USBDEV);
+		kmem_free(sc->sc_statusbuf, sc->sc_statuslen);
 	if (sc->sc_statusbuf)
-		free(sc->sc_statusbuf, M_USBDEV);
+		kmem_free(sc->sc_statusbuf, sc->sc_statuslen);
 
 	/* XXXSMP usb */
 	KERNEL_UNLOCK_ONE(curlwp);
@@ -684,7 +688,8 @@ uhub_childdet(device_t self, device_t ch
 			}
 		}
 		if (dev->ud_nifaces_claimed == 0) {
-			free(dev->ud_subdevs, M_USB);
+			kmem_free(dev->ud_subdevs,
+			    dev->ud_subdevlen * sizeof(device_t));
 			dev->ud_subdevs = NULL;
 			dev->ud_subdevlen = 0;
 		}

Index: src/sys/dev/usb/umct.c
diff -u src/sys/dev/usb/umct.c:1.32.24.2 src/sys/dev/usb/umct.c:1.32.24.3
--- src/sys/dev/usb/umct.c:1.32.24.2	Sun Nov 30 13:14:11 2014
+++ src/sys/dev/usb/umct.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: umct.c,v 1.32.24.2 2014/11/30 13:14:11 skrll Exp $	*/
+/*	$NetBSD: umct.c,v 1.32.24.3 2014/12/03 14:18:07 skrll Exp $	*/
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umct.c,v 1.32.24.2 2014/11/30 13:14:11 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umct.c,v 1.32.24.3 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -328,7 +328,7 @@ umct_detach(device_t self, int flags)
 	if (sc->sc_intr_pipe != NULL) {
 		usbd_abort_pipe(sc->sc_intr_pipe);
 		usbd_close_pipe(sc->sc_intr_pipe);
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 
@@ -552,7 +552,7 @@ umct_open(void *addr, int portno)
 
 	if (sc->sc_intr_number != -1 && sc->sc_intr_pipe == NULL) {
 		sc->sc_status = 0; /* clear status bit */
-		sc->sc_intr_buf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK);
+		sc->sc_intr_buf = kmem_alloc(sc->sc_isize, KM_SLEEP);
 		err = usbd_open_pipe_intr(sc->sc_iface, sc->sc_intr_number,
 			USBD_SHORT_XFER_OK, &sc->sc_intr_pipe, sc,
 			sc->sc_intr_buf, sc->sc_isize,
@@ -587,7 +587,7 @@ umct_close(void *addr, int portno)
 		if (err)
 			printf("%s: close interrupt pipe failed: %s\n",
 				device_xname(sc->sc_dev), usbd_errstr(err));
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 }

Index: src/sys/dev/usb/uplcom.c
diff -u src/sys/dev/usb/uplcom.c:1.74.4.2 src/sys/dev/usb/uplcom.c:1.74.4.3
--- src/sys/dev/usb/uplcom.c:1.74.4.2	Sun Nov 30 13:14:11 2014
+++ src/sys/dev/usb/uplcom.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uplcom.c,v 1.74.4.2 2014/11/30 13:14:11 skrll Exp $	*/
+/*	$NetBSD: uplcom.c,v 1.74.4.3 2014/12/03 14:18:07 skrll Exp $	*/
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -34,12 +34,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uplcom.c,v 1.74.4.2 2014/11/30 13:14:11 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uplcom.c,v 1.74.4.3 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/ioctl.h>
 #include <sys/conf.h>
 #include <sys/tty.h>
@@ -441,7 +441,7 @@ uplcom_detach(device_t self, int flags)
 	if (sc->sc_intr_pipe != NULL) {
 		usbd_abort_pipe(sc->sc_intr_pipe);
 		usbd_close_pipe(sc->sc_intr_pipe);
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 
@@ -780,7 +780,7 @@ uplcom_open(void *addr, int portno)
 		uplcom_vendor_control_write(sc->sc_udev, 2, 0x24);
 
 	if (sc->sc_intr_number != -1 && sc->sc_intr_pipe == NULL) {
-		sc->sc_intr_buf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK);
+		sc->sc_intr_buf = kmem_alloc(sc->sc_isize, KM_SLEEP);
 		err = usbd_open_pipe_intr(sc->sc_intr_iface, sc->sc_intr_number,
 			USBD_SHORT_XFER_OK, &sc->sc_intr_pipe, sc,
 			sc->sc_intr_buf, sc->sc_isize,
@@ -818,7 +818,7 @@ uplcom_close(void *addr, int portno)
 		if (err)
 			printf("%s: close interrupt pipe failed: %s\n",
 				device_xname(sc->sc_dev), usbd_errstr(err));
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 }

Index: src/sys/dev/usb/urio.c
diff -u src/sys/dev/usb/urio.c:1.42.4.3 src/sys/dev/usb/urio.c:1.42.4.4
--- src/sys/dev/usb/urio.c:1.42.4.3	Tue Dec  2 09:00:34 2014
+++ src/sys/dev/usb/urio.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: urio.c,v 1.42.4.3 2014/12/02 09:00:34 skrll Exp $	*/
+/*	$NetBSD: urio.c,v 1.42.4.4 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -36,12 +36,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: urio.c,v 1.42.4.3 2014/12/02 09:00:34 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: urio.c,v 1.42.4.4 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/ioctl.h>
 #include <sys/conf.h>
@@ -511,7 +511,7 @@ urioioctl(dev_t dev, u_long cmd, void *a
 		uio.uio_rw = req.bmRequestType & UT_READ ?
 			     UIO_READ : UIO_WRITE;
 		uio.uio_vmspace = l->l_proc->p_vmspace;
-		ptr = malloc(len, M_TEMP, M_WAITOK);
+		ptr = kmem_alloc(len, KM_SLEEP);
 		if (uio.uio_rw == UIO_WRITE) {
 			error = uiomove(ptr, len, &uio);
 			if (error)
@@ -536,6 +536,6 @@ urioioctl(dev_t dev, u_long cmd, void *a
 
 ret:
 	if (ptr != NULL)
-		free(ptr, M_TEMP);
+		kmem_free(ptr, len);
 	return (error);
 }

Index: src/sys/dev/usb/usb.c
diff -u src/sys/dev/usb/usb.c:1.156.2.2 src/sys/dev/usb/usb.c:1.156.2.3
--- src/sys/dev/usb/usb.c:1.156.2.2	Wed Dec  3 12:52:07 2014
+++ src/sys/dev/usb/usb.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb.c,v 1.156.2.2 2014/12/03 12:52:07 skrll Exp $	*/
+/*	$NetBSD: usb.c,v 1.156.2.3 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2002, 2008, 2012 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.156.2.2 2014/12/03 12:52:07 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.156.2.3 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -47,7 +47,7 @@ __KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.15
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/kthread.h>
 #include <sys/proc.h>
@@ -573,8 +573,7 @@ usbread(dev_t dev, struct uio *uio, int 
 	switch (uio->uio_resid) {
 #ifdef COMPAT_30
 	case sizeof(struct usb_event_old):
-		ueo = malloc(sizeof(struct usb_event_old), M_USBDEV,
-			     M_WAITOK|M_ZERO);
+		ueo = kmem_zalloc(sizeof(struct usb_event_old), KM_SLEEP);
 		useold = 1;
 		/* FALLTHRU */
 #endif
@@ -636,7 +635,7 @@ usbread(dev_t dev, struct uio *uio, int 
 	usb_free_event(ue);
 #ifdef COMPAT_30
 	if (useold)
-		free(ueo, M_USBDEV);
+		kmem_free(ueo, sizeof(struct usb_event_old));
 #endif
 
 	return (error);
@@ -728,7 +727,7 @@ usbioctl(dev_t devt, u_long cmd, void *d
 				ur->ucr_request.bmRequestType & UT_READ ?
 				UIO_READ : UIO_WRITE;
 			uio.uio_vmspace = l->l_proc->p_vmspace;
-			ptr = malloc(len, M_TEMP, M_WAITOK);
+			ptr = kmem_alloc(len, KM_SLEEP);
 			if (uio.uio_rw == UIO_WRITE) {
 				error = uiomove(ptr, len, &uio);
 				if (error)
@@ -752,8 +751,10 @@ usbioctl(dev_t devt, u_long cmd, void *d
 			}
 		}
 	ret:
-		if (ptr)
-			free(ptr, M_TEMP);
+		if (ptr) {
+			len = UGETW(ur->ucr_request.wLength);
+			kmem_free(ptr, len);
+		}
 		return (error);
 	}
 
@@ -964,13 +965,13 @@ Static struct usb_event *
 usb_alloc_event(void)
 {
 	/* Yes, this is right; we allocate enough so that we can use it later */
-	return malloc(sizeof(struct usb_event_q), M_USBDEV, M_WAITOK|M_ZERO);
+	return kmem_zalloc(sizeof(struct usb_event_q), KM_SLEEP);
 }
 
 Static void
 usb_free_event(struct usb_event *uep)
 {
-	free(uep, M_USBDEV);
+	kmem_free(uep, sizeof(struct usb_event_q));
 }
 
 Static void

Index: src/sys/dev/usb/usb.h
diff -u src/sys/dev/usb/usb.h:1.111.2.3 src/sys/dev/usb/usb.h:1.111.2.4
--- src/sys/dev/usb/usb.h:1.111.2.3	Wed Dec  3 13:30:51 2014
+++ src/sys/dev/usb/usb.h	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb.h,v 1.111.2.3 2014/12/03 13:30:51 skrll Exp $	*/
+/*	$NetBSD: usb.h,v 1.111.2.4 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usb.h,v 1.14 1999/11/17 22:33:46 n_hibma Exp $	*/
 
 /*
@@ -41,10 +41,6 @@
 #include <sys/ioctl.h>
 
 #if defined(_KERNEL)
-#include <sys/mallocvar.h>
-
-MALLOC_DECLARE(M_USB);
-MALLOC_DECLARE(M_USBDEV);
 
 #include <sys/device.h>
 

Index: src/sys/dev/usb/usb_subr.c
diff -u src/sys/dev/usb/usb_subr.c:1.198.2.3 src/sys/dev/usb/usb_subr.c:1.198.2.4
--- src/sys/dev/usb/usb_subr.c:1.198.2.3	Wed Dec  3 13:30:51 2014
+++ src/sys/dev/usb/usb_subr.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_subr.c,v 1.198.2.3 2014/12/03 13:30:51 skrll Exp $	*/
+/*	$NetBSD: usb_subr.c,v 1.198.2.4 2014/12/03 14:18:07 skrll Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.198.2.3 2014/12/03 13:30:51 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.198.2.4 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -43,7 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/select.h>
 #include <sys/proc.h>
@@ -71,9 +71,6 @@ extern int usbdebug;
 #define DPRINTFN(n,x)
 #endif
 
-MALLOC_DEFINE(M_USB, "USB", "USB misc. memory");
-MALLOC_DEFINE(M_USBDEV, "USB device", "USB device driver");
-
 Static usbd_status usbd_set_config(usbd_device_handle, int);
 Static void usbd_devinfo(usbd_device_handle, int, char *, size_t);
 Static void usbd_devinfo_vp(usbd_device_handle, char *, size_t, char *, size_t,
@@ -212,7 +209,7 @@ usbd_devinfo(usbd_device_handle dev, int
 	int bcdDevice, bcdUSB;
 	char *ep;
 
-	vendor = malloc(USB_MAX_ENCODED_STRING_LEN * 2, M_USB, M_NOWAIT);
+	vendor = kmem_alloc(USB_MAX_ENCODED_STRING_LEN * 2, KM_SLEEP);
 	if (vendor == NULL) {
 		*cp = '\0';
 		return;
@@ -235,7 +232,7 @@ usbd_devinfo(usbd_device_handle dev, int
 	cp += usbd_printBCD(cp, ep - cp, bcdDevice);
 	cp += snprintf(cp, ep - cp, ", addr %d", dev->ud_addr);
 	*cp = 0;
-	free(vendor, M_USB);
+	kmem_free(vendor, USB_MAX_ENCODED_STRING_LEN * 2);
 }
 
 char *
@@ -243,7 +240,7 @@ usbd_devinfo_alloc(usbd_device_handle de
 {
 	char *devinfop;
 
-	devinfop = malloc(DEVINFOSIZE, M_TEMP, M_WAITOK);
+	devinfop = kmem_alloc(DEVINFOSIZE, KM_SLEEP);
 	usbd_devinfo(dev, showclass, devinfop, DEVINFOSIZE);
 	return devinfop;
 }
@@ -251,7 +248,7 @@ usbd_devinfo_alloc(usbd_device_handle de
 void
 usbd_devinfo_free(char *devinfop)
 {
-	free(devinfop, M_TEMP);
+	kmem_free(devinfop, DEVINFOSIZE);
 }
 
 /* Delay for a certain number of ms */
@@ -414,8 +411,8 @@ usbd_fill_iface_data(usbd_device_handle 
 	nendpt = ifc->ui_idesc->bNumEndpoints;
 	DPRINTFN(4,("usbd_fill_iface_data: found idesc nendpt=%d\n", nendpt));
 	if (nendpt != 0) {
-		ifc->ui_endpoints = malloc(nendpt * sizeof(struct usbd_endpoint),
-					M_USB, M_NOWAIT);
+		ifc->ui_endpoints = kmem_alloc(nendpt * sizeof(struct usbd_endpoint),
+				KM_SLEEP);
 		if (ifc->ui_endpoints == NULL)
 			return (USBD_NOMEM);
 	} else
@@ -477,7 +474,7 @@ usbd_fill_iface_data(usbd_device_handle 
 
  bad:
 	if (ifc->ui_endpoints != NULL) {
-		free(ifc->ui_endpoints, M_USB);
+		kmem_free(ifc->ui_endpoints, nendpt * sizeof(struct usbd_endpoint));
 		ifc->ui_endpoints = NULL;
 	}
 	return (USBD_INVAL);
@@ -487,8 +484,11 @@ void
 usbd_free_iface_data(usbd_device_handle dev, int ifcno)
 {
 	usbd_interface_handle ifc = &dev->ud_ifaces[ifcno];
-	if (ifc->ui_endpoints)
-		free(ifc->ui_endpoints, M_USB);
+	if (ifc->ui_endpoints) {
+		int nendpt = ifc->ui_idesc->bNumEndpoints;
+		size_t sz = nendpt * sizeof(struct usbd_endpoint);
+		kmem_free(ifc->ui_endpoints, sz);
+	}
 }
 
 Static usbd_status
@@ -549,8 +549,8 @@ usbd_set_config_index(usbd_device_handle
 		nifc = dev->ud_cdesc->bNumInterface;
 		for (ifcidx = 0; ifcidx < nifc; ifcidx++)
 			usbd_free_iface_data(dev, ifcidx);
-		free(dev->ud_ifaces, M_USB);
-		free(dev->ud_cdesc, M_USB);
+		kmem_free(dev->ud_ifaces, nifc * sizeof(struct usbd_interface));
+		kmem_free(dev->ud_cdesc, UGETW(dev->ud_cdesc->wTotalLength));
 		dev->ud_ifaces = NULL;
 		dev->ud_cdesc = NULL;
 		dev->ud_config = USB_UNCONFIG_NO;
@@ -574,7 +574,7 @@ usbd_set_config_index(usbd_device_handle
 		return (err);
 	}
 	len = UGETW(cd.wTotalLength);
-	cdp = malloc(len, M_USB, M_NOWAIT);
+	cdp = kmem_alloc(len, KM_SLEEP);
 	if (cdp == NULL)
 		return (USBD_NOMEM);
 
@@ -666,8 +666,8 @@ usbd_set_config_index(usbd_device_handle
 
 	/* Allocate and fill interface data. */
 	nifc = cdp->bNumInterface;
-	dev->ud_ifaces = malloc(nifc * sizeof(struct usbd_interface),
-			     M_USB, M_NOWAIT);
+	dev->ud_ifaces = kmem_alloc(nifc * sizeof(struct usbd_interface),
+			     KM_SLEEP);
 	if (dev->ud_ifaces == NULL) {
 		err = USBD_NOMEM;
 		goto bad;
@@ -687,7 +687,7 @@ usbd_set_config_index(usbd_device_handle
 	return (USBD_NORMAL_COMPLETION);
 
  bad:
-	free(cdp, M_USB);
+	kmem_free(cdp, len);
 	return (err);
 }
 
@@ -707,7 +707,7 @@ usbd_setup_pipe_flags(usbd_device_handle
 	usbd_pipe_handle p;
 	usbd_status err;
 
-	p = malloc(dev->ud_bus->ub_pipesize, M_USB, M_NOWAIT);
+	p = kmem_alloc(dev->ud_bus->ub_pipesize, KM_SLEEP);
 	DPRINTFN(1,("usbd_setup_pipe: dev=%p iface=%p ep=%p pipe=%p\n",
 		    dev, iface, ep, p));
 	if (p == NULL)
@@ -729,7 +729,7 @@ usbd_setup_pipe_flags(usbd_device_handle
 		DPRINTFN(-1,("usbd_setup_pipe: endpoint=0x%x failed, error="
 			 "%s\n",
 			 ep->ue_edesc->bEndpointAddress, usbd_errstr(err)));
-		free(p, M_USB);
+		kmem_intr_free(p, dev->ud_bus->ub_pipesize);
 		return (err);
 	}
 	usb_init_task(&p->up_async_task, usbd_clear_endpoint_stall_task, p,
@@ -748,7 +748,7 @@ usbd_kill_pipe(usbd_pipe_handle pipe)
 	usbd_unlock_pipe(pipe);
 	usb_rem_task(pipe->up_dev, &pipe->up_async_task);
 	pipe->up_endpoint->ue_refcnt--;
-	free(pipe, M_USB);
+	kmem_free(pipe, pipe->up_dev->ud_bus->ub_pipesize);
 }
 
 int
@@ -781,7 +781,7 @@ usbd_attach_roothub(device_t parent, usb
 
 	dv = config_found_ia(parent, "usbroothubif", &uaa, 0);
 	if (dv) {
-		dev->ud_subdevs = malloc(sizeof dv, M_USB, M_NOWAIT);
+		dev->ud_subdevs = kmem_alloc(sizeof(dv), KM_SLEEP);
 		if (dev->ud_subdevs == NULL)
 			return (USBD_NOMEM);
 		dev->ud_subdevs[0] = dv;
@@ -820,7 +820,7 @@ usbd_attachwholedevice(device_t parent, 
 	dv = config_found_sm_loc(parent, "usbdevif", dlocs, &uaa, usbd_print,
 				 config_stdsubmatch);
 	if (dv) {
-		dev->ud_subdevs = malloc(sizeof dv, M_USB, M_NOWAIT);
+		dev->ud_subdevs = kmem_alloc(sizeof(dv), KM_SLEEP);
 		if (dev->ud_subdevs == NULL)
 			return (USBD_NOMEM);
 		dev->ud_subdevs[0] = dv;
@@ -843,7 +843,7 @@ usbd_attachinterfaces(device_t parent, u
 	device_t dv;
 
 	nifaces = dev->ud_cdesc->bNumInterface;
-	ifaces = malloc(nifaces * sizeof(*ifaces), M_USB, M_NOWAIT|M_ZERO);
+	ifaces = kmem_zalloc(nifaces * sizeof(*ifaces), KM_SLEEP);
 	if (!ifaces)
 		return (USBD_NOMEM);
 	for (i = 0; i < nifaces; i++)
@@ -896,7 +896,7 @@ usbd_attachinterfaces(device_t parent, u
 		}
 	}
 
-	free(ifaces, M_USB);
+	kmem_free(ifaces, nifaces * sizeof(*ifaces));
 	return (USBD_NORMAL_COMPLETION);
 }
 
@@ -933,8 +933,8 @@ usbd_probe_and_attach(device_t parent, u
 			return (err);
 		}
 		nifaces = dev->ud_cdesc->bNumInterface;
-		dev->ud_subdevs = malloc(nifaces * sizeof(device_t), M_USB,
-				      M_NOWAIT|M_ZERO);
+		dev->ud_subdevs = kmem_zalloc(nifaces * sizeof(device_t), 
+		    KM_SLEEP);
 		if (dev->ud_subdevs == NULL)
 			return (USBD_NOMEM);
 		dev->ud_subdevlen = nifaces;
@@ -942,7 +942,8 @@ usbd_probe_and_attach(device_t parent, u
 		err = usbd_attachinterfaces(parent, dev, port, NULL);
 
 		if (!dev->ud_nifaces_claimed) {
-			free(dev->ud_subdevs, M_USB);
+			kmem_free(dev->ud_subdevs,
+			    dev->ud_subdevlen * sizeof(device_t));
 			dev->ud_subdevs = 0;
 			dev->ud_subdevlen = 0;
 		}
@@ -1075,7 +1076,7 @@ usbd_new_device(device_t parent, usbd_bu
 		return (USBD_NO_ADDR);
 	}
 
-	dev = malloc(sizeof *dev, M_USB, M_NOWAIT|M_ZERO);
+	dev = kmem_zalloc(sizeof(*dev), KM_SLEEP);
 	if (dev == NULL)
 		return (USBD_NOMEM);
 
@@ -1293,7 +1294,7 @@ usbd_remove_device(usbd_device_handle de
 	up->up_dev = NULL;
 	dev->ud_bus->ub_devices[dev->ud_addr] = NULL;
 
-	free(dev, M_USB);
+	kmem_free(dev, sizeof(*dev));
 }
 
 int
@@ -1307,10 +1308,10 @@ usbd_print(void *aux, const char *pnp)
 		char *devinfo;
 		if (!uaa->usegeneric)
 			return (QUIET);
-		devinfo = malloc(USB_DEVINFO, M_TEMP, M_WAITOK);
+		devinfo = kmem_alloc(USB_DEVINFO, KM_SLEEP);
 		usbd_devinfo(uaa->device, 1, devinfo, USB_DEVINFO);
 		aprint_normal("%s, %s", devinfo, pnp);
-		free(devinfo, M_TEMP);
+		kmem_free(devinfo, USB_DEVINFO);
 	}
 	aprint_normal(" port %d", uaa->port);
 #if 0
@@ -1506,15 +1507,17 @@ usb_free_device(usbd_device_handle dev)
 		nifc = dev->ud_cdesc->bNumInterface;
 		for (ifcidx = 0; ifcidx < nifc; ifcidx++)
 			usbd_free_iface_data(dev, ifcidx);
-		free(dev->ud_ifaces, M_USB);
+		kmem_free(dev->ud_ifaces, 
+		    nifc * sizeof(struct usbd_interface));
 	}
 	if (dev->ud_cdesc != NULL)
-		free(dev->ud_cdesc, M_USB);
+		kmem_free(dev->ud_cdesc, UGETW(dev->ud_cdesc->wTotalLength));
 	if (dev->ud_subdevlen > 0) {
-		free(dev->ud_subdevs, M_USB);
+		kmem_free(dev->ud_subdevs,
+		    dev->ud_subdevlen * sizeof(device_t));
 		dev->ud_subdevlen = 0;
 	}
-	free(dev, M_USB);
+	kmem_free(dev, sizeof(*dev));
 }
 
 /*

Index: src/sys/dev/usb/usbdi.c
diff -u src/sys/dev/usb/usbdi.c:1.162.2.6 src/sys/dev/usb/usbdi.c:1.162.2.7
--- src/sys/dev/usb/usbdi.c:1.162.2.6	Wed Dec  3 12:52:07 2014
+++ src/sys/dev/usb/usbdi.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi.c,v 1.162.2.6 2014/12/03 12:52:07 skrll Exp $	*/
+/*	$NetBSD: usbdi.c,v 1.162.2.7 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.162.2.6 2014/12/03 12:52:07 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.162.2.7 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -270,7 +270,7 @@ usbd_close_pipe(usbd_pipe_handle pipe)
 	usbd_unlock_pipe(pipe);
 	if (pipe->up_intrxfer != NULL)
 		usbd_free_xfer(pipe->up_intrxfer);
-	free(pipe, M_USB);
+	kmem_free(pipe, pipe->up_dev->ud_bus->ub_pipesize);
 	return (USBD_NORMAL_COMPLETION);
 }
 
@@ -775,8 +775,10 @@ usbd_set_interface(usbd_interface_handle
 		return (err);
 
 	/* new setting works, we can free old endpoints */
-	if (endpoints != NULL)
-		free(endpoints, M_USB);
+	if (endpoints != NULL) {
+        	int nendpt = iface->ui_idesc->bNumEndpoints;
+		kmem_free(endpoints, nendpt * sizeof(struct usbd_endpoint));
+	}
 
 #ifdef DIAGNOSTIC
 	if (iface->ui_idesc == NULL) {

Index: src/sys/dev/usb/usbdi_util.c
diff -u src/sys/dev/usb/usbdi_util.c:1.63.2.3 src/sys/dev/usb/usbdi_util.c:1.63.2.4
--- src/sys/dev/usb/usbdi_util.c:1.63.2.3	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/usbdi_util.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi_util.c,v 1.63.2.3 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: usbdi_util.c,v 1.63.2.4 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.63.2.3 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.63.2.4 2014/12/03 14:18:07 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -40,7 +40,7 @@ __KERNEL_RCSID(0, "$NetBSD: usbdi_util.c
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/proc.h>
 #include <sys/device.h>
 #include <sys/bus.h>
@@ -357,8 +357,7 @@ usbd_get_hid_descriptor(usbd_interface_h
 }
 
 usbd_status
-usbd_read_report_desc(usbd_interface_handle ifc, void **descp, int *sizep,
-		       struct malloc_type * mem)
+usbd_read_report_desc(usbd_interface_handle ifc, void **descp, int *sizep)
 {
 	usb_interface_descriptor_t *id;
 	usb_hid_descriptor_t *hid;
@@ -373,13 +372,13 @@ usbd_read_report_desc(usbd_interface_han
 	if (hid == NULL)
 		return (USBD_IOERROR);
 	*sizep = UGETW(hid->descrs[0].wDescriptorLength);
-	*descp = malloc(*sizep, mem, M_NOWAIT);
+	*descp = kmem_alloc(*sizep, KM_SLEEP);
 	if (*descp == NULL)
 		return (USBD_NOMEM);
 	err = usbd_get_report_descriptor(dev, id->bInterfaceNumber,
 					 *sizep, *descp);
 	if (err) {
-		free(*descp, mem);
+		kmem_free(*descp, *sizep);
 		*descp = NULL;
 		return (err);
 	}

Index: src/sys/dev/usb/usbdi_util.h
diff -u src/sys/dev/usb/usbdi_util.h:1.45.6.2 src/sys/dev/usb/usbdi_util.h:1.45.6.3
--- src/sys/dev/usb/usbdi_util.h:1.45.6.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/usbdi_util.h	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi_util.h,v 1.45.6.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: usbdi_util.h,v 1.45.6.3 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@ usbd_status	usbd_get_report(usbd_interfa
 				void *data, int len);
 usbd_status	usbd_set_idle(usbd_interface_handle iface, int duration,int id);
 usbd_status	usbd_read_report_desc(usbd_interface_handle ifc, void **descp,
-				      int *sizep, struct malloc_type *mem);
+				      int *sizep);
 usbd_status	usbd_get_config(usbd_device_handle dev, uint8_t *conf);
 usbd_status	usbd_get_string_desc(usbd_device_handle dev, int sindex,
 				     int langid,usb_string_descriptor_t *sdesc,

Index: src/sys/dev/usb/uscanner.c
diff -u src/sys/dev/usb/uscanner.c:1.75.4.3 src/sys/dev/usb/uscanner.c:1.75.4.4
--- src/sys/dev/usb/uscanner.c:1.75.4.3	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/uscanner.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uscanner.c,v 1.75.4.3 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: uscanner.c,v 1.75.4.4 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -32,12 +32,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uscanner.c,v 1.75.4.3 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uscanner.c,v 1.75.4.4 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/file.h>
 #include <sys/select.h>
@@ -384,8 +384,8 @@ uscanneropen(dev_t dev, int flag, int mo
 
 	sc->sc_state |= USCANNER_OPEN;
 
-	sc->sc_bulkin_buffer = malloc(USCANNER_BUFFERSIZE, M_USBDEV, M_WAITOK);
-	sc->sc_bulkout_buffer = malloc(USCANNER_BUFFERSIZE, M_USBDEV, M_WAITOK);
+	sc->sc_bulkin_buffer = kmem_alloc(USCANNER_BUFFERSIZE, KM_SLEEP);
+	sc->sc_bulkout_buffer = kmem_alloc(USCANNER_BUFFERSIZE, KM_SLEEP);
 	/* No need to check buffers for NULL since we have WAITOK */
 
 	sc->sc_bulkin_bufferlen = USCANNER_BUFFERSIZE;
@@ -476,11 +476,11 @@ uscanner_do_close(struct uscanner_softc 
 	}
 
 	if (sc->sc_bulkin_buffer) {
-		free(sc->sc_bulkin_buffer, M_USBDEV);
+		kmem_free(sc->sc_bulkin_buffer, sc->sc_bulkin_bufferlen);
 		sc->sc_bulkin_buffer = NULL;
 	}
 	if (sc->sc_bulkout_buffer) {
-		free(sc->sc_bulkout_buffer, M_USBDEV);
+		kmem_free(sc->sc_bulkout_buffer, sc->sc_bulkin_bufferlen);
 		sc->sc_bulkout_buffer = NULL;
 	}
 

Index: src/sys/dev/usb/ustir.c
diff -u src/sys/dev/usb/ustir.c:1.33.10.3 src/sys/dev/usb/ustir.c:1.33.10.4
--- src/sys/dev/usb/ustir.c:1.33.10.3	Tue Dec  2 09:00:34 2014
+++ src/sys/dev/usb/ustir.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ustir.c,v 1.33.10.3 2014/12/02 09:00:34 skrll Exp $	*/
+/*	$NetBSD: ustir.c,v 1.33.10.4 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,13 +30,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ustir.c,v 1.33.10.3 2014/12/02 09:00:34 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ustir.c,v 1.33.10.4 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/device.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/conf.h>
 #include <sys/file.h>
 #include <sys/poll.h>
@@ -717,7 +717,7 @@ ustir_open(void *h, int flag, int mode,
 		error = ENOMEM;
 		goto bad5;
 	}
-	sc->sc_ur_buf = malloc(IRDA_MAX_FRAME_SIZE, M_USBDEV, M_NOWAIT);
+	sc->sc_ur_buf = kmem_alloc(IRDA_MAX_FRAME_SIZE, KM_SLEEP);
 	if (sc->sc_ur_buf == NULL) {
 		error = ENOMEM;
 		goto bad5;
@@ -806,7 +806,7 @@ ustir_close(void *h, int flag, int mode,
 		sc->sc_wr_buf = NULL;
 	}
 	if (sc->sc_ur_buf != NULL) {
-		free(sc->sc_ur_buf, M_USBDEV);
+		kmem_free(sc->sc_ur_buf, IRDA_MAX_FRAME_SIZE);
 		sc->sc_ur_buf = NULL;
 	}
 

Index: src/sys/dev/usb/utoppy.c
diff -u src/sys/dev/usb/utoppy.c:1.24.4.2 src/sys/dev/usb/utoppy.c:1.24.4.3
--- src/sys/dev/usb/utoppy.c:1.24.4.2	Tue Dec  2 09:00:34 2014
+++ src/sys/dev/usb/utoppy.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: utoppy.c,v 1.24.4.2 2014/12/02 09:00:34 skrll Exp $	*/
+/*	$NetBSD: utoppy.c,v 1.24.4.3 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: utoppy.c,v 1.24.4.2 2014/12/02 09:00:34 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: utoppy.c,v 1.24.4.3 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1368,15 +1368,15 @@ utoppyopen(dev_t dev, int flag, int mode
 		goto done;
 	}
 
-	sc->sc_out_data = malloc(UTOPPY_BSIZE + 1, M_DEVBUF, M_WAITOK);
+	sc->sc_out_data = kmem_alloc(UTOPPY_BSIZE + 1, KM_SLEEP);
 	if (sc->sc_out_data == NULL) {
 		error = ENOMEM;
 		goto error;
 	}
 
-	sc->sc_in_data = malloc(UTOPPY_BSIZE + 1, M_DEVBUF, M_WAITOK);
+	sc->sc_in_data = kmem_alloc(UTOPPY_BSIZE + 1, KM_SLEEP);
 	if (sc->sc_in_data == NULL) {
-		free(sc->sc_out_data, M_DEVBUF);
+		kmem_free(sc->sc_out_data, UTOPPY_BSIZE + 1);
 		sc->sc_out_data = NULL;
 		error = ENOMEM;
 		goto error;
@@ -1450,12 +1450,12 @@ utoppyclose(dev_t dev, int flag, int mod
 	}
 
 	if (sc->sc_out_data) {
-		free(sc->sc_out_data, M_DEVBUF);
+		kmem_free(sc->sc_out_data, UTOPPY_BSIZE + 1);
 		sc->sc_out_data = NULL;
 	}
 
 	if (sc->sc_in_data) {
-		free(sc->sc_in_data, M_DEVBUF);
+		kmem_free(sc->sc_in_data, UTOPPY_BSIZE + 1);
 		sc->sc_in_data = NULL;
 	}
 

Index: src/sys/dev/usb/uvscom.c
diff -u src/sys/dev/usb/uvscom.c:1.28 src/sys/dev/usb/uvscom.c:1.28.16.1
--- src/sys/dev/usb/uvscom.c:1.28	Fri Feb 24 06:48:28 2012
+++ src/sys/dev/usb/uvscom.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvscom.c,v 1.28 2012/02/24 06:48:28 mrg Exp $	*/
+/*	$NetBSD: uvscom.c,v 1.28.16.1 2014/12/03 14:18:07 skrll Exp $	*/
 /*-
  * Copyright (c) 2001-2002, Shunsuke Akiyama <[email protected]>.
  * All rights reserved.
@@ -35,12 +35,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvscom.c,v 1.28 2012/02/24 06:48:28 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvscom.c,v 1.28.16.1 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/fcntl.h>
 #include <sys/conf.h>
 #include <sys/tty.h>
@@ -388,7 +388,7 @@ uvscom_detach(device_t self, int flags)
 	if (sc->sc_intr_pipe != NULL) {
 		usbd_abort_pipe(sc->sc_intr_pipe);
 		usbd_close_pipe(sc->sc_intr_pipe);
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 
@@ -733,7 +733,7 @@ uvscom_open(void *addr, int portno)
 			return (EIO);
 		}
 
-		sc->sc_intr_buf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK);
+		sc->sc_intr_buf = kmem_alloc(sc->sc_isize, KM_SLEEP);
 		err = usbd_open_pipe_intr(sc->sc_iface,
 					  sc->sc_intr_number,
 					  USBD_SHORT_XFER_OK,
@@ -802,7 +802,7 @@ uvscom_close(void *addr, int portno)
 			aprint_error_dev(sc->sc_dev,
 			    "lose interrupt pipe failed: %s\n",
 			    usbd_errstr(err));
-		free(sc->sc_intr_buf, M_USBDEV);
+		kmem_free(sc->sc_intr_buf, sc->sc_isize);
 		sc->sc_intr_pipe = NULL;
 	}
 }

Index: src/sys/dev/usb/uyurex.c
diff -u src/sys/dev/usb/uyurex.c:1.9 src/sys/dev/usb/uyurex.c:1.9.14.1
--- src/sys/dev/usb/uyurex.c:1.9	Sat Jan  5 23:34:21 2013
+++ src/sys/dev/usb/uyurex.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uyurex.c,v 1.9 2013/01/05 23:34:21 christos Exp $ */
+/*	$NetBSD: uyurex.c,v 1.9.14.1 2014/12/03 14:18:07 skrll Exp $ */
 /*	$OpenBSD: uyurex.c,v 1.3 2010/03/04 03:47:22 deraadt Exp $ */
 
 /*
@@ -22,13 +22,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uyurex.c,v 1.9 2013/01/05 23:34:21 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uyurex.c,v 1.9.14.1 2014/12/03 14:18:07 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/device.h>
 #include <sys/conf.h>
 #include <sys/envsys.h>
@@ -155,7 +155,7 @@ uyurex_attach(device_t parent, device_t 
 		aprint_error_dev(self, "uyurex_open: uhidev_open %d\n", err);
 		return;
 	}
-	sc->sc_ibuf = malloc(sc->sc_ilen, M_USBDEV, M_WAITOK);
+	sc->sc_ibuf = kmem_alloc(sc->sc_ilen, KM_SLEEP);
 
 	usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->sc_udev,
 	    sc->sc_hdev.sc_dev);
@@ -211,7 +211,7 @@ uyurex_detach(device_t self, int flags)
 	sysmon_envsys_unregister(sc->sc_sme);
 
 	if (sc->sc_ibuf != NULL) {
-		free(sc->sc_ibuf, M_USBDEV);
+		kmem_free(sc->sc_ibuf, sc->sc_ilen);
 		sc->sc_ibuf = NULL;
 	}
 

Index: src/sys/dev/usb/xhci.c
diff -u src/sys/dev/usb/xhci.c:1.28.2.7 src/sys/dev/usb/xhci.c:1.28.2.8
--- src/sys/dev/usb/xhci.c:1.28.2.7	Wed Dec  3 13:19:38 2014
+++ src/sys/dev/usb/xhci.c	Wed Dec  3 14:18:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: xhci.c,v 1.28.2.7 2014/12/03 13:19:38 skrll Exp $	*/
+/*	$NetBSD: xhci.c,v 1.28.2.8 2014/12/03 14:18:07 skrll Exp $	*/
 
 /*
  * Copyright (c) 2013 Jonathan A. Kollasch
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.28.2.7 2014/12/03 13:19:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.28.2.8 2014/12/03 14:18:07 skrll Exp $");
 
 #include "opt_usb.h"
 
@@ -1438,7 +1438,7 @@ xhci_new_device(device_t parent, usbd_bu
 	DPRINTFN(4, "port=%d depth=%d speed=%d upport %d",
 		 port, depth, speed, up->up_portno);
 
-	dev = malloc(sizeof *dev, M_USB, M_NOWAIT|M_ZERO);
+	dev = kmem_zalloc(sizeof(*dev), KM_SLEEP);
 	if (dev == NULL)
 		return USBD_NOMEM;
 

Reply via email to