Index: dev/dmover/dmover_io.c =================================================================== RCS file: /cvsroot/src/sys/dev/dmover/dmover_io.c,v retrieving revision 1.45 diff -u -p -u -r1.45 dmover_io.c --- dev/dmover/dmover_io.c 30 Nov 2017 20:25:55 -0000 1.45 +++ dev/dmover/dmover_io.c 10 Feb 2019 17:04:45 -0000 @@ -180,9 +180,7 @@ dmio_state_get(void) { struct dmio_state *ds; - ds = pool_get(&dmio_state_pool, PR_WAITOK); - - memset(ds, 0, sizeof(*ds)); + ds = pool_get(&dmio_state_pool, PR_WAITOK | PR_ZERO); getnanotime(&ds->ds_btime); ds->ds_atime = ds->ds_mtime = ds->ds_btime; Index: dev/ic/ncr53c9x.c =================================================================== RCS file: /cvsroot/src/sys/dev/ic/ncr53c9x.c,v retrieving revision 1.150 diff -u -p -u -r1.150 ncr53c9x.c --- dev/ic/ncr53c9x.c 3 Feb 2019 03:19:27 -0000 1.150 +++ dev/ic/ncr53c9x.c 10 Feb 2019 17:04:45 -0000 @@ -843,12 +843,8 @@ ncr53c9x_get_ecb(struct ncr53c9x_softc * int s; s = splbio(); - ecb = pool_get(&ecb_pool, PR_NOWAIT); + ecb = pool_get(&ecb_pool, PR_NOWAIT | PR_ZERO); splx(s); - if (ecb) { - memset(ecb, 0, sizeof(*ecb)); - ecb->flags |= ECB_ALLOC; - } return ecb; } Index: dev/ic/wd33c93.c =================================================================== RCS file: /cvsroot/src/sys/dev/ic/wd33c93.c,v retrieving revision 1.27 diff -u -p -u -r1.27 wd33c93.c --- dev/ic/wd33c93.c 8 Feb 2018 09:05:19 -0000 1.27 +++ dev/ic/wd33c93.c 10 Feb 2019 17:04:45 -0000 @@ -570,7 +570,7 @@ wd33c93_scsi_request(struct scsipi_chann panic("wd33c93_scsicmd: busy"); s = splbio(); - acb = (struct wd33c93_acb *)pool_get(&wd33c93_pool, PR_NOWAIT); + acb = pool_get(&wd33c93_pool, PR_NOWAIT); splx(s); if (acb == NULL) { Index: dev/raidframe/rf_alloclist.c =================================================================== RCS file: /cvsroot/src/sys/dev/raidframe/rf_alloclist.c,v retrieving revision 1.27 diff -u -p -u -r1.27 rf_alloclist.c --- dev/raidframe/rf_alloclist.c 9 Feb 2019 03:33:59 -0000 1.27 +++ dev/raidframe/rf_alloclist.c 10 Feb 2019 17:04:45 -0000 @@ -122,9 +122,5 @@ rf_FreeAllocList(RF_AllocListElem_t *l) RF_AllocListElem_t * rf_real_MakeAllocList(void) { - RF_AllocListElem_t *p; - - p = pool_get(&rf_pools.alloclist, PR_WAITOK); - memset(p, 0, sizeof(*p)); - return (p); + return pool_get(&rf_pools.alloclist, PR_WAITOK | PR_ZERO); } Index: dev/raidframe/rf_callback.c =================================================================== RCS file: /cvsroot/src/sys/dev/raidframe/rf_callback.c,v retrieving revision 1.22 diff -u -p -u -r1.22 rf_callback.c --- dev/raidframe/rf_callback.c 15 Mar 2009 17:17:23 -0000 1.22 +++ dev/raidframe/rf_callback.c 10 Feb 2019 17:04:45 -0000 @@ -71,10 +71,7 @@ rf_ConfigureCallback(RF_ShutdownList_t * RF_CallbackDesc_t * rf_AllocCallbackDesc(void) { - RF_CallbackDesc_t *p; - - p = pool_get(&rf_pools.callback, PR_WAITOK); - return (p); + return pool_get(&rf_pools.callback, PR_WAITOK); } void Index: dev/raidframe/rf_dagutils.c =================================================================== RCS file: /cvsroot/src/sys/dev/raidframe/rf_dagutils.c,v retrieving revision 1.55 diff -u -p -u -r1.55 rf_dagutils.c --- dev/raidframe/rf_dagutils.c 9 Feb 2019 03:34:00 -0000 1.55 +++ dev/raidframe/rf_dagutils.c 10 Feb 2019 17:04:45 -0000 @@ -254,11 +254,7 @@ rf_ConfigureDAGs(RF_ShutdownList_t **lis RF_DagHeader_t * rf_AllocDAGHeader(void) { - RF_DagHeader_t *dh; - - dh = pool_get(&rf_pools.dagh, PR_WAITOK); - memset(dh, 0, sizeof(*dh)); - return (dh); + return pool_get(&rf_pools.dagh, PR_WAITOK | PR_ZERO); } void @@ -270,11 +266,7 @@ rf_FreeDAGHeader(RF_DagHeader_t * dh) RF_DagNode_t * rf_AllocDAGNode(void) { - RF_DagNode_t *node; - - node = pool_get(&rf_pools.dagnode, PR_WAITOK); - memset(node, 0, sizeof(*node)); - return (node); + return pool_get(&rf_pools.dagnode, PR_WAITOK | PR_ZERO); } void @@ -292,12 +284,7 @@ rf_FreeDAGNode(RF_DagNode_t *node) RF_DagList_t * rf_AllocDAGList(void) { - RF_DagList_t *dagList; - - dagList = pool_get(&rf_pools.daglist, PR_WAITOK); - memset(dagList, 0, sizeof(*dagList)); - - return (dagList); + return pool_get(&rf_pools.daglist, PR_WAITOK | PR_ZERO); } void @@ -309,11 +296,7 @@ rf_FreeDAGList(RF_DagList_t *dagList) void * rf_AllocDAGPCache(void) { - void *p; - p = pool_get(&rf_pools.dagpcache, PR_WAITOK); - memset(p, 0, RF_DAGPCACHE_SIZE); - - return (p); + return pool_get(&rf_pools.dagpcache, PR_WAITOK | PR_ZERO); } void @@ -325,12 +308,7 @@ rf_FreeDAGPCache(void *p) RF_FuncList_t * rf_AllocFuncList(void) { - RF_FuncList_t *funcList; - - funcList = pool_get(&rf_pools.funclist, PR_WAITOK); - memset(funcList, 0, sizeof(*funcList)); - - return (funcList); + return pool_get(&rf_pools.funclist, PR_WAITOK | PR_ZERO); } void Index: dev/raidframe/rf_diskqueue.c =================================================================== RCS file: /cvsroot/src/sys/dev/raidframe/rf_diskqueue.c,v retrieving revision 1.54 diff -u -p -u -r1.54 rf_diskqueue.c --- dev/raidframe/rf_diskqueue.c 9 Feb 2019 03:34:00 -0000 1.54 +++ dev/raidframe/rf_diskqueue.c 10 Feb 2019 17:04:45 -0000 @@ -367,11 +367,10 @@ rf_CreateDiskQueueData(RF_IoType_t typ, { RF_DiskQueueData_t *p; - p = pool_get(&rf_pools.dqd, waitflag); + p = pool_get(&rf_pools.dqd, waitflag | PR_ZERO); if (p == NULL) return (NULL); - memset(p, 0, sizeof(*p)); if (waitflag == PR_WAITOK) { p->bp = getiobuf(NULL, true); } else { Index: dev/raidframe/rf_map.c =================================================================== RCS file: /cvsroot/src/sys/dev/raidframe/rf_map.c,v retrieving revision 1.48 diff -u -p -u -r1.48 rf_map.c --- dev/raidframe/rf_map.c 9 Feb 2019 03:34:00 -0000 1.48 +++ dev/raidframe/rf_map.c 10 Feb 2019 17:04:45 -0000 @@ -376,12 +376,7 @@ rf_ConfigureMapModule(RF_ShutdownList_t RF_AccessStripeMapHeader_t * rf_AllocAccessStripeMapHeader(void) { - RF_AccessStripeMapHeader_t *p; - - p = pool_get(&rf_pools.asm_hdr, PR_WAITOK); - memset(p, 0, sizeof(*p)); - - return (p); + return pool_get(&rf_pools.asm_hdr, PR_WAITOK | PR_ZERO); } void @@ -394,12 +389,7 @@ rf_FreeAccessStripeMapHeader(RF_AccessSt RF_VoidFunctionPointerListElem_t * rf_AllocVFPListElem(void) { - RF_VoidFunctionPointerListElem_t *p; - - p = pool_get(&rf_pools.vfple, PR_WAITOK); - memset(p, 0, sizeof(*p)); - - return (p); + return pool_get(&rf_pools.vfple, PR_WAITOK | PR_ZERO); } void @@ -413,12 +403,7 @@ rf_FreeVFPListElem(RF_VoidFunctionPointe RF_VoidPointerListElem_t * rf_AllocVPListElem(void) { - RF_VoidPointerListElem_t *p; - - p = pool_get(&rf_pools.vple, PR_WAITOK); - memset(p, 0, sizeof(*p)); - - return (p); + return pool_get(&rf_pools.vple, PR_WAITOK | PR_ZERO); } void @@ -431,12 +416,7 @@ rf_FreeVPListElem(RF_VoidPointerListElem RF_ASMHeaderListElem_t * rf_AllocASMHeaderListElem(void) { - RF_ASMHeaderListElem_t *p; - - p = pool_get(&rf_pools.asmhle, PR_WAITOK); - memset(p, 0, sizeof(*p)); - - return (p); + return pool_get(&rf_pools.asmhle, PR_WAITOK | PR_ZERO); } void @@ -449,12 +429,7 @@ rf_FreeASMHeaderListElem(RF_ASMHeaderLis RF_FailedStripe_t * rf_AllocFailedStripeStruct(void) { - RF_FailedStripe_t *p; - - p = pool_get(&rf_pools.fss, PR_WAITOK); - memset(p, 0, sizeof(*p)); - - return (p); + return pool_get(&rf_pools.fss, PR_WAITOK | PR_ZERO); } void @@ -470,12 +445,7 @@ rf_FreeFailedStripeStruct(RF_FailedStrip RF_PhysDiskAddr_t * rf_AllocPhysDiskAddr(void) { - RF_PhysDiskAddr_t *p; - - p = pool_get(&rf_pools.pda, PR_WAITOK); - memset(p, 0, sizeof(*p)); - - return (p); + return pool_get(&rf_pools.pda, PR_WAITOK | PR_ZERO); } /* allocates a list of PDAs, locking the free list only once when we * have to call calloc, we do it one component at a time to simplify Index: dev/raidframe/rf_psstatus.c =================================================================== RCS file: /cvsroot/src/sys/dev/raidframe/rf_psstatus.c,v retrieving revision 1.35 diff -u -p -u -r1.35 rf_psstatus.c --- dev/raidframe/rf_psstatus.c 9 Feb 2019 03:34:00 -0000 1.35 +++ dev/raidframe/rf_psstatus.c 10 Feb 2019 17:04:45 -0000 @@ -267,11 +267,7 @@ rf_RemoveFromActiveReconTable(RF_Raid_t RF_ReconParityStripeStatus_t * rf_AllocPSStatus(RF_Raid_t *raidPtr) { - RF_ReconParityStripeStatus_t *p; - - p = pool_get(&rf_pools.pss, PR_WAITOK); - memset(p, 0, sizeof(*p)); - return (p); + return pool_get(&rf_pools.pss, PR_WAITOK | PR_ZERO); } void Index: kern/kern_time.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_time.c,v retrieving revision 1.194 diff -u -p -u -r1.194 kern_time.c --- kern/kern_time.c 31 Jan 2019 20:09:05 -0000 1.194 +++ kern/kern_time.c 10 Feb 2019 17:04:47 -0000 @@ -603,8 +603,7 @@ timer_create1(timer_t *tid, clockid_t id if ((pts = p->p_timers) == NULL) pts = timers_alloc(p); - pt = pool_get(&ptimer_pool, PR_WAITOK); - memset(pt, 0, sizeof(*pt)); + pt = pool_get(&ptimer_pool, PR_WAITOK | PR_ZERO); if (evp != NULL) { if (((error = (*fetch_event)(evp, &pt->pt_ev, sizeof(pt->pt_ev))) != 0) || @@ -1166,8 +1165,7 @@ dosetitimer(struct proc *p, int which, s if (pt == NULL) { if (spare == NULL) { mutex_spin_exit(&timer_lock); - spare = pool_get(&ptimer_pool, PR_WAITOK); - memset(spare, 0, sizeof(*spare)); + spare = pool_get(&ptimer_pool, PR_WAITOK | PR_ZERO); goto retry; } pt = spare; Index: kern/subr_pool.c =================================================================== RCS file: /cvsroot/src/sys/kern/subr_pool.c,v retrieving revision 1.231 diff -u -p -u -r1.231 subr_pool.c --- kern/subr_pool.c 23 Dec 2018 12:15:01 -0000 1.231 +++ kern/subr_pool.c 10 Feb 2019 17:04:47 -0000 @@ -959,8 +959,11 @@ pool_get(struct pool *pp, int flags) KASSERT((((vaddr_t)v + pp->pr_itemoffset) & (pp->pr_align - 1)) == 0); FREECHECK_OUT(&pp->pr_freecheck, v); pool_redzone_fill(pp, v); - pool_kleak_fill(pp, v); - return (v); + if (flags & PR_ZERO) + memset(v, 0, pp->pr_size); + else + pool_kleak_fill(pp, v); + return v; } /* Index: kern/sys_aio.c =================================================================== RCS file: /cvsroot/src/sys/kern/sys_aio.c,v retrieving revision 1.43 diff -u -p -u -r1.43 sys_aio.c --- kern/sys_aio.c 1 Jun 2017 02:45:13 -0000 1.43 +++ kern/sys_aio.c 10 Feb 2019 17:04:47 -0000 @@ -564,8 +564,7 @@ aio_enqueue_job(int op, void *aiocb_uptr return error; /* Allocate and initialize a new AIO job */ - a_job = pool_get(&aio_job_pool, PR_WAITOK); - memset(a_job, 0, sizeof(struct aio_job)); + a_job = pool_get(&aio_job_pool, PR_WAITOK | PR_ZERO); /* * Set the data. Index: kern/vfs_dirhash.c =================================================================== RCS file: /cvsroot/src/sys/kern/vfs_dirhash.c,v retrieving revision 1.12 diff -u -p -u -r1.12 vfs_dirhash.c --- kern/vfs_dirhash.c 5 Sep 2014 05:57:21 -0000 1.12 +++ kern/vfs_dirhash.c 10 Feb 2019 17:04:48 -0000 @@ -202,8 +202,7 @@ dirhash_get(struct dirhash **dirhp) /* if no dirhash was given, allocate one */ dirh = *dirhp; if (dirh == NULL) { - dirh = pool_get(&dirhash_pool, PR_WAITOK); - memset(dirh, 0, sizeof(struct dirhash)); + dirh = pool_get(&dirhash_pool, PR_WAITOK | PR_ZERO); for (hashline = 0; hashline < DIRHASH_HASHSIZE; hashline++) { LIST_INIT(&dirh->entries[hashline]); } @@ -301,8 +300,7 @@ dirhash_enter(struct dirhash *dirh, } /* add to the hashline */ - dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK); - memset(dirh_e, 0, sizeof(struct dirhash_entry)); + dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK | PR_ZERO); dirh_e->hashvalue = hashvalue; dirh_e->offset = offset; @@ -333,8 +331,7 @@ dirhash_enter_freed(struct dirhash *dirh DPRINTF(("dirhash enter FREED %"PRIu64", %d\n", offset, entry_size)); - dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK); - memset(dirh_e, 0, sizeof(struct dirhash_entry)); + dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK | PR_ZERO); dirh_e->hashvalue = 0; /* not relevant */ dirh_e->offset = offset; Index: sys/pool.h =================================================================== RCS file: /cvsroot/src/sys/sys/pool.h,v retrieving revision 1.83 diff -u -p -u -r1.83 pool.h --- sys/pool.h 16 Dec 2018 21:03:35 -0000 1.83 +++ sys/pool.h 10 Feb 2019 17:04:49 -0000 @@ -149,6 +149,7 @@ struct pool { #define PR_LARGECACHE 0x1000 /* use large cache groups */ #define PR_GROWING 0x2000 /* pool_grow in progress */ #define PR_GROWINGNOWAIT 0x4000 /* pool_grow in progress by PR_NOWAIT alloc */ +#define PR_ZERO 0x8000 /* zero data before returning */ /* * `pr_lock' protects the pool's data structures when removing