I would really really prefer if we can keep these as const*const conversions instead of const, const.
We will see performance losses from doing this operation at runtime. > On Wed, Jul 16, 2014 at 04:54:49AM +0000, Doug Hogan wrote: > > > > + if ((fake_table = mallocarray(3, sizeof(struct est_op), > > It's not necessary to use mallocarray() for well known constants. > Few examples below. > > > --- sys/arch/i386/i386/est.c 12 Jul 2014 18:44:41 -0000 1.43 > > +++ sys/arch/i386/i386/est.c 15 Jul 2014 23:48:23 -0000 > ... > > > > > - if ((fake_table = malloc(sizeof(struct est_op) * 3, M_DEVBUF, > ^^^ > > > diff -u -p -d -r1.31 if_tsec.c > > --- sys/arch/socppc/dev/if_tsec.c 12 Jul 2014 18:44:42 -0000 1.31 > > +++ sys/arch/socppc/dev/if_tsec.c 15 Jul 2014 23:48:25 -0000 > > @@ -909,7 +909,7 @@ tsec_up(struct tsec_softc *sc) > > TSEC_NTXDESC * sizeof(struct tsec_desc), 8); > > sc->sc_txdesc = TSEC_DMA_KVA(sc->sc_txring); > > > > - sc->sc_txbuf = malloc(sizeof(struct tsec_buf) * TSEC_NTXDESC, > > + sc->sc_txbuf = mallocarray(TSEC_NTXDESC, sizeof(struct tsec_buf), > ^^^^^^^^^^^^ > > M_DEVBUF, M_WAITOK); > > for (i = 0; i < TSEC_NTXDESC; i++) { > > txb = &sc->sc_txbuf[i]; > > @@ -935,7 +935,7 @@ tsec_up(struct tsec_softc *sc) > > TSEC_NRXDESC * sizeof(struct tsec_desc), 8); > > sc->sc_rxdesc = TSEC_DMA_KVA(sc->sc_rxring); > > > > - sc->sc_rxbuf = malloc(sizeof(struct tsec_buf) * TSEC_NRXDESC, > > + sc->sc_rxbuf = mallocarray(TSEC_NRXDESC, sizeof(struct tsec_buf), > ^^^^^^^^^^^^ > > M_DEVBUF, M_WAITOK); > > > > for (i = 0; i < TSEC_NRXDESC; i++) { > > Index: sys/arch/sparc/dev/obio.c > > =================================================================== > > RCS file: /cvs/src/sys/arch/sparc/dev/obio.c,v > > retrieving revision 1.22 > > diff -u -p -d -r1.22 obio.c > > --- sys/arch/sparc/dev/obio.c 5 Sep 2010 18:10:10 -0000 1.22 > > +++ sys/arch/sparc/dev/obio.c 15 Jul 2014 23:48:26 -0000 > > @@ -310,7 +310,7 @@ vmesattach(parent, self, args) > > printf("\n"); > > > > if (vmeints == NULL) { > > - vmeints = malloc(256 * sizeof(struct intrhand *), M_TEMP, > > + vmeints = mallocarray(256, sizeof(struct intrhand *), M_TEMP, > ^^^ > > M_NOWAIT | M_ZERO); > > if (vmeints == NULL) > > panic("vmesattach: can't allocate intrhand"); > > @@ -332,7 +332,7 @@ vmelattach(parent, self, args) > > printf("\n"); > > > > if (vmeints == NULL) { > > - vmeints = malloc(256 * sizeof(struct intrhand *), M_TEMP, > > + vmeints = mallocarray(256, sizeof(struct intrhand *), M_TEMP, > ^^^ > > M_NOWAIT | M_ZERO); > > if (vmeints == NULL) > > panic("vmelattach: can't allocate intrhand"); > > Index: sys/arch/sparc/dev/xd.c > > =================================================================== > > RCS file: /cvs/src/sys/arch/sparc/dev/xd.c,v > > retrieving revision 1.62 > > diff -u -p -d -r1.62 xd.c > > --- sys/arch/sparc/dev/xd.c 11 Jul 2014 16:35:40 -0000 1.62 > > +++ sys/arch/sparc/dev/xd.c 15 Jul 2014 23:48:26 -0000 > > @@ -414,7 +414,7 @@ xdcattach(parent, self, aux) > > /* Setup device view of DVMA address */ > > xdc->dvmaiopb = (struct xd_iopb *) ((u_long) xdc->iopbase - DVMA_BASE); > > > > - xdc->reqs = malloc(XDC_MAXIOPB * sizeof(struct xd_iorq), M_DEVBUF, > > + xdc->reqs = mallocarray(XDC_MAXIOPB, sizeof(struct xd_iorq), M_DEVBUF, > ^^^^^^^^^^^ > > M_NOWAIT | M_ZERO); > > if (xdc->reqs == NULL) > > panic("xdc malloc"); > > Index: sys/arch/sparc/dev/xy.c > > =================================================================== > > RCS file: /cvs/src/sys/arch/sparc/dev/xy.c,v > > retrieving revision 1.59 > > diff -u -p -d -r1.59 xy.c > > --- sys/arch/sparc/dev/xy.c 11 Jul 2014 16:35:40 -0000 1.59 > > +++ sys/arch/sparc/dev/xy.c 15 Jul 2014 23:48:26 -0000 > > @@ -364,7 +364,7 @@ xycattach(parent, self, aux) > > xyc->iopbase = tmp; > > xyc->iopbase = dtmp; /* XXX TMP HACK */ > > xyc->dvmaiopb = (struct xy_iopb *) ((u_long)dtmp - DVMA_BASE); > > - xyc->reqs = malloc(XYC_MAXIOPB * sizeof(struct xy_iorq), M_DEVBUF, > > + xyc->reqs = mallocarray(XYC_MAXIOPB, sizeof(struct xy_iorq), M_DEVBUF, > ^^^^^^^^^^^ > > M_NOWAIT | M_ZERO); > > if (xyc->reqs == NULL) > > panic("xyc malloc"); > > > Index: sys/arch/sparc64/dev/vdsk.c > > =================================================================== > > RCS file: /cvs/src/sys/arch/sparc64/dev/vdsk.c,v > > retrieving revision 1.39 > > diff -u -p -d -r1.39 vdsk.c > > --- sys/arch/sparc64/dev/vdsk.c 12 Jul 2014 18:44:43 -0000 1.39 > > +++ sys/arch/sparc64/dev/vdsk.c 15 Jul 2014 23:48:27 -0000 > > @@ -298,7 +298,7 @@ vdsk_attach(struct device *parent, struc > > printf(", can't allocate dring\n"); > > goto free_map; > > } > > - sc->sc_vsd = malloc(32 * sizeof(*sc->sc_vsd), M_DEVBUF, M_NOWAIT); > > + sc->sc_vsd = mallocarray(32, sizeof(*sc->sc_vsd), M_DEVBUF, M_NOWAIT); > ^^^^ > > if (sc->sc_vsd == NULL) { > > printf(", can't allocate software ring\n"); > > goto free_dring; > > Index: sys/arch/sparc64/dev/vnet.c > > =================================================================== > > RCS file: /cvs/src/sys/arch/sparc64/dev/vnet.c,v > > retrieving revision 1.33 > > diff -u -p -d -r1.33 vnet.c > > --- sys/arch/sparc64/dev/vnet.c 12 Jul 2014 18:44:43 -0000 1.33 > > +++ sys/arch/sparc64/dev/vnet.c 15 Jul 2014 23:48:27 -0000 > > @@ -1381,7 +1381,7 @@ vnet_init(struct ifnet *ifp) > > sc->sc_vd = vnet_dring_alloc(sc->sc_dmatag, 128); > > if (sc->sc_vd == NULL) > > return; > > - sc->sc_vsd = malloc(128 * sizeof(*sc->sc_vsd), M_DEVBUF, M_NOWAIT); > > + sc->sc_vsd = mallocarray(128, sizeof(*sc->sc_vsd), M_DEVBUF, M_NOWAIT); > ^^^ > > if (sc->sc_vsd == NULL) > > return; > > > > Index: sys/dev/ic/aac.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/ic/aac.c,v > > retrieving revision 1.64 > > diff -u -p -d -r1.64 aac.c > > --- sys/dev/ic/aac.c 12 Jul 2014 18:48:17 -0000 1.64 > > +++ sys/dev/ic/aac.c 15 Jul 2014 23:48:30 -0000 > > @@ -1548,8 +1548,8 @@ aac_init(struct aac_softc *sc) > > > > /* Allocate some FIBs and associated command structs */ > > TAILQ_INIT(&sc->aac_fibmap_tqh); > > - sc->aac_commands = malloc(AAC_MAX_FIBS * sizeof(struct aac_command), > > - M_DEVBUF, M_WAITOK | M_ZERO); > > + sc->aac_commands = mallocarray(AAC_MAX_FIBS, > ^^^^^^^^^^^^ > > + sizeof(struct aac_command), M_DEVBUF, M_WAITOK | M_ZERO); > > while (sc->total_fibs < AAC_MAX_FIBS) { > > if (aac_alloc_commands(sc) != 0) > > break; > > Index: sys/dev/ic/adw.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/ic/adw.c,v > > retrieving revision 1.50 > > diff -u -p -d -r1.50 adw.c > > --- sys/dev/ic/adw.c 11 Jan 2012 16:22:32 -0000 1.50 > > +++ sys/dev/ic/adw.c 15 Jul 2014 23:48:30 -0000 > > @@ -146,7 +146,7 @@ adw_alloc_carriers(ADW_SOFTC *sc) > > * Allocate the control structure. > > */ > > sc->sc_control->carriers = > > - malloc(sizeof(ADW_CARRIER) * ADW_MAX_CARRIER, M_DEVBUF, > > + mallocarray(ADW_MAX_CARRIER, sizeof(ADW_CARRIER), M_DEVBUF, > ^^^^^^^^^^^^^^^ > > M_NOWAIT); > > if (sc->sc_control->carriers == NULL) > > return (ENOMEM); > > Index: sys/dev/ic/ath.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/ic/ath.c,v > > retrieving revision 1.101 > > diff -u -p -d -r1.101 ath.c > > --- sys/dev/ic/ath.c 12 Jul 2014 18:48:17 -0000 1.101 > > +++ sys/dev/ic/ath.c 15 Jul 2014 23:48:30 -0000 > > @@ -2989,7 +2989,7 @@ ath_getchannels(struct ath_softc *sc, HA > > int i, ix, nchan; > > > > sc->sc_nchan = 0; > > - chans = malloc(IEEE80211_CHAN_MAX * sizeof(HAL_CHANNEL), > > + chans = mallocarray(IEEE80211_CHAN_MAX, sizeof(HAL_CHANNEL), > ^^^^^^^^^^^^^^^^^^^ > > M_TEMP, M_NOWAIT); > > if (chans == NULL) { > > printf("%s: unable to allocate channel table\n", ifp->if_xname); > > > Index: sys/dev/pci/azalia.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/pci/azalia.c,v > > retrieving revision 1.215 > > diff -u -p -d -r1.215 azalia.c > > --- sys/dev/pci/azalia.c 13 Jul 2014 23:10:23 -0000 1.215 > > +++ sys/dev/pci/azalia.c 15 Jul 2014 23:48:32 -0000 > > @@ -1128,7 +1128,7 @@ azalia_init_rirb(azalia_t *az, int resum > > DPRINTF(("%s: RIRB allocation succeeded.\n", __func__)); > > > > /* setup the unsolicited response queue */ > > - az->unsolq = malloc(sizeof(rirb_entry_t) * UNSOLQ_SIZE, > > + az->unsolq = mallocarray(UNSOLQ_SIZE, sizeof(rirb_entry_t), > ^^^^^^^^^^^ > > M_DEVBUF, M_NOWAIT | M_ZERO); > > if (az->unsolq == NULL) { > > DPRINTF(("%s: can't allocate unsolicited response > > queue.\n", > > Index: sys/dev/pci/if_ix.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/pci/if_ix.c,v > > retrieving revision 1.96 > > diff -u -p -d -r1.96 if_ix.c > > --- sys/dev/pci/if_ix.c 13 Jul 2014 23:10:23 -0000 1.96 > > +++ sys/dev/pci/if_ix.c 15 Jul 2014 23:48:33 -0000 > > @@ -229,8 +229,8 @@ ixgbe_attach(struct device *parent, stru > > goto err_out; > > > > /* Allocate multicast array memory. */ > > - sc->mta = malloc(sizeof(uint8_t) * IXGBE_ETH_LENGTH_OF_ADDRESS * > > - MAX_NUM_MULTICAST_ADDRESSES, M_DEVBUF, M_NOWAIT); > > + sc->mta = mallocarray(MAX_NUM_MULTICAST_ADDRESSES, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > + IXGBE_ETH_LENGTH_OF_ADDRESS * sizeof(uint8_t), M_DEVBUF, M_NOWAIT); > > if (sc->mta == NULL) { > > printf(": Can not allocate multicast setup array\n"); > > goto err_late; > > Index: sys/dev/pci/if_san_xilinx.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/pci/if_san_xilinx.c,v > > retrieving revision 1.29 > > diff -u -p -d -r1.29 if_san_xilinx.c > > --- sys/dev/pci/if_san_xilinx.c 12 Jul 2014 18:48:52 -0000 1.29 > > +++ sys/dev/pci/if_san_xilinx.c 15 Jul 2014 23:48:33 -0000 > > @@ -2390,7 +2390,8 @@ aft_alloc_rx_buffers(xilinx_softc_t *sc) > > SIMPLEQ_INIT(&sc->wp_rx_complete_list); > > > > /* allocate receive buffers in one cluster */ > > - buf = malloc(sizeof(*buf) * MAX_RX_BUF, M_DEVBUF, M_NOWAIT | M_ZERO); > > + buf = mallocarray(MAX_RX_BUF, sizeof(*buf), M_DEVBUF, > ^^^^^^^^^^ > > + M_NOWAIT | M_ZERO); > > if (buf == NULL) > > return (1); > > > > Index: sys/dev/sdmmc/sdmmc_scsi.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/sdmmc/sdmmc_scsi.c,v > > retrieving revision 1.31 > > diff -u -p -d -r1.31 sdmmc_scsi.c > > --- sys/dev/sdmmc/sdmmc_scsi.c 12 Jul 2014 18:48:52 -0000 1.31 > > +++ sys/dev/sdmmc/sdmmc_scsi.c 15 Jul 2014 23:48:34 -0000 > > @@ -104,8 +104,8 @@ sdmmc_scsi_attach(struct sdmmc_softc *sc > > > > scbus = malloc(sizeof *scbus, M_DEVBUF, M_WAITOK | M_ZERO); > > > > - scbus->sc_tgt = malloc(sizeof(*scbus->sc_tgt) * > > - (SDMMC_SCSIID_MAX+1), M_DEVBUF, M_WAITOK | M_ZERO); > > + scbus->sc_tgt = mallocarray(SDMMC_SCSIID_MAX + 1, > ^^^^^^^^^^^^^^^^^^^^^ > > + sizeof(*scbus->sc_tgt), M_DEVBUF, M_WAITOK | M_ZERO); > > > > /* > > * Each card that sent us a CID in the identification stage > > @@ -1962,7 +1962,8 @@ uaudio_identify_ac(struct uaudio_softc * > > ibufend = ibuf + aclen; > > dp = (const usb_descriptor_t *)ibuf; > > ndps = 0; > > - iot = malloc(sizeof(struct io_terminal) * 256, M_TEMP, M_NOWAIT | > > M_ZERO); > > + iot = mallocarray(256, sizeof(struct io_terminal), M_TEMP, > ^^^^ > > + M_NOWAIT | M_ZERO); > > if (iot == NULL) { > > printf("%s: no memory\n", __func__); > > return USBD_NOMEM; > > Index: sys/dev/usb/uhci.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/usb/uhci.c,v > > retrieving revision 1.128 > > diff -u -p -d -r1.128 uhci.c > > --- sys/dev/usb/uhci.c 12 Jul 2014 20:13:48 -0000 1.128 > > +++ sys/dev/usb/uhci.c 15 Jul 2014 23:48:37 -0000 > > @@ -2378,9 +2378,8 @@ uhci_setup_isoc(struct usbd_pipe *pipe) > > int i, s; > > > > iso = &upipe->u.iso; > > - iso->stds = malloc(UHCI_VFRAMELIST_COUNT * > > - sizeof (struct uhci_soft_td *), > > - M_USBHC, M_WAITOK); > > + iso->stds = mallocarray(UHCI_VFRAMELIST_COUNT, > ^^^^^^^^^^^^^^^^^^^^^ > > + sizeof(struct uhci_soft_td *), M_USBHC, M_WAITOK); > > > > token = rd ? UHCI_TD_IN (0, endpt, addr, 0) : > > UHCI_TD_OUT(0, endpt, addr, 0); > > Index: sys/dev/usb/usb_subr.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/usb/usb_subr.c,v > > retrieving revision 1.106 > > diff -u -p -d -r1.106 usb_subr.c > > --- sys/dev/usb/usb_subr.c 12 Jul 2014 18:48:53 -0000 1.106 > > +++ sys/dev/usb/usb_subr.c 15 Jul 2014 23:48:37 -0000 > > @@ -875,7 +875,7 @@ usbd_probe_and_attach(struct device *par > > DPRINTF(("usbd_probe_and_attach trying device specific drivers\n")); > > dv = config_found_sm(parent, &uaa, usbd_print, usbd_submatch); > > if (dv) { > > - dev->subdevs = malloc(2 * sizeof dv, M_USB, M_NOWAIT); > > + dev->subdevs = mallocarray(2, sizeof(dv), M_USB, M_NOWAIT); > ^^^^^^^ > > if (dev->subdevs == NULL) { > > err = USBD_NOMEM; > > goto fail; > > @@ -974,7 +974,8 @@ generic: > > dv = config_found_sm(parent, &uaa, usbd_print, usbd_submatch); > > if (dv != NULL) { > > if (dev->ndevs == 0) { > > - dev->subdevs = malloc(2 * sizeof dv, M_USB, M_NOWAIT); > > + dev->subdevs = mallocarray(2, sizeof(dv), M_USB, > ^^^^^^^ > > + M_NOWAIT); > > if (dev->subdevs == NULL) { > > err = USBD_NOMEM; > > goto fail; > > Index: sys/dev/wscons/wsemul_vt100.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/wscons/wsemul_vt100.c,v > > retrieving revision 1.32 > > diff -u -p -d -r1.32 wsemul_vt100.c > > --- sys/dev/wscons/wsemul_vt100.c 12 Jul 2014 18:48:53 -0000 1.32 > > +++ sys/dev/wscons/wsemul_vt100.c 15 Jul 2014 23:48:37 -0000 > > @@ -222,10 +222,10 @@ wsemul_vt100_attach(int console, const s > > edp->dblwid = malloc(edp->nrows, M_DEVBUF, M_NOWAIT | M_ZERO); > > edp->dw = 0; > > edp->dcsarg = malloc(DCS_MAXLEN, M_DEVBUF, M_NOWAIT); > > - edp->isolatin1tab = malloc(128 * sizeof(u_int), M_DEVBUF, M_NOWAIT); > > - edp->decgraphtab = malloc(128 * sizeof(u_int), M_DEVBUF, M_NOWAIT); > > - edp->dectechtab = malloc(128 * sizeof(u_int), M_DEVBUF, M_NOWAIT); > > - edp->nrctab = malloc(128 * sizeof(u_int), M_DEVBUF, M_NOWAIT); > > + edp->isolatin1tab = mallocarray(128, sizeof(u_int), M_DEVBUF, M_NOWAIT); > > + edp->decgraphtab = mallocarray(128, sizeof(u_int), M_DEVBUF, M_NOWAIT); > > + edp->dectechtab = mallocarray(128, sizeof(u_int), M_DEVBUF, M_NOWAIT); > > + edp->nrctab = mallocarray(128, sizeof(u_int), M_DEVBUF, M_NOWAIT); > > dotto > > > vt100_initchartables(edp); > > wsemul_vt100_reset(edp); > > return (edp); > > Index: sys/dev/wscons/wsevent.c > > =================================================================== > > RCS file: /cvs/src/sys/dev/wscons/wsevent.c,v > > retrieving revision 1.9 > > diff -u -p -d -r1.9 wsevent.c > > --- sys/dev/wscons/wsevent.c 12 Jul 2014 18:48:53 -0000 1.9 > > +++ sys/dev/wscons/wsevent.c 15 Jul 2014 23:48:38 -0000 > > @@ -101,7 +101,7 @@ wsevent_init(struct wseventvar *ev) > > return; > > } > > ev->get = ev->put = 0; > > - ev->q = malloc((u_long)WSEVENT_QSIZE * sizeof(struct wscons_event), > > + ev->q = mallocarray((u_long)WSEVENT_QSIZE, sizeof(struct wscons_event), > ^^^^^^^^^^^^^ > > M_DEVBUF, M_WAITOK | M_ZERO); > > } > > > > Index: sys/net80211/ieee80211_input.c > > =================================================================== > > RCS file: /cvs/src/sys/net80211/ieee80211_input.c,v > > retrieving revision 1.126 > > diff -u -p -d -r1.126 ieee80211_input.c > > --- sys/net80211/ieee80211_input.c 12 Jul 2014 18:44:22 -0000 1.126 > > +++ sys/net80211/ieee80211_input.c 15 Jul 2014 23:48:41 -0000 > > @@ -2433,7 +2433,7 @@ ieee80211_recv_addba_req(struct ieee8021 > > ba->ba_winstart = ssn; > > ba->ba_winend = (ba->ba_winstart + ba->ba_winsize - 1) & 0xfff; > > /* allocate and setup our reordering buffer */ > > - ba->ba_buf = malloc(IEEE80211_BA_MAX_WINSZ * sizeof(*ba->ba_buf), > > + ba->ba_buf = mallocarray(IEEE80211_BA_MAX_WINSZ, sizeof(*ba->ba_buf), > ^^^^^^^^^^^^^^^^^^^^^^ > > M_DEVBUF, M_NOWAIT | M_ZERO); > > if (ba->ba_buf == NULL) { > > status = IEEE80211_STATUS_REFUSED; >