Module Name: src Committed By: hannken Date: Thu May 23 08:32:31 UTC 2019
Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c dbuf.c dnode.c sa.c zfs_znode.c src/external/cddl/osnet/sys/kern: kmem.c src/external/cddl/osnet/sys/sys: kmem.h Log Message: Update the kmem_cache emulation to run its callbacks with Solaris argument order. No functional change intended. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c cvs rdiff -u -r1.6 -r1.7 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c cvs rdiff -u -r1.5 -r1.6 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode.c cvs rdiff -u -r1.2 -r1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/sa.c cvs rdiff -u -r1.26 -r1.27 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c cvs rdiff -u -r1.1 -r1.2 src/external/cddl/osnet/sys/kern/kmem.c cvs rdiff -u -r1.10 -r1.11 src/external/cddl/osnet/sys/sys/kmem.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.12 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.13 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.12 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c Thu May 23 08:32:30 2019 @@ -1578,9 +1578,6 @@ hdr_full_cons(void *vbuf, void *unused, { arc_buf_hdr_t *hdr = vbuf; -#ifdef __NetBSD__ - hdr = unused; -#endif bzero(hdr, HDR_FULL_SIZE); cv_init(&hdr->b_l1hdr.b_cv, NULL, CV_DEFAULT, NULL); refcount_create(&hdr->b_l1hdr.b_refcnt); @@ -1597,9 +1594,6 @@ hdr_l2only_cons(void *vbuf, void *unused { arc_buf_hdr_t *hdr = vbuf; -#ifdef __NetBSD__ - hdr = unused; -#endif bzero(hdr, HDR_L2ONLY_SIZE); arc_space_consume(HDR_L2ONLY_SIZE, ARC_SPACE_L2HDRS); @@ -1612,9 +1606,6 @@ buf_cons(void *vbuf, void *unused, int k { arc_buf_t *buf = vbuf; -#ifdef __NetBSD__ - buf = unused; -#endif bzero(buf, sizeof (arc_buf_t)); mutex_init(&buf->b_evict_lock, NULL, MUTEX_DEFAULT, NULL); arc_space_consume(sizeof (arc_buf_t), ARC_SPACE_HDRS); Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c:1.7 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c:1.6 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dbuf.c Thu May 23 08:32:30 2019 @@ -138,9 +138,6 @@ dbuf_cons(void *vdb, void *unused, int k { dmu_buf_impl_t *db = vdb; -#ifdef __NetBSD__ - db = unused; -#endif bzero(db, sizeof (dmu_buf_impl_t)); mutex_init(&db->db_mtx, NULL, MUTEX_DEFAULT, NULL); cv_init(&db->db_changed, NULL, CV_DEFAULT, NULL); Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode.c:1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode.c:1.6 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode.c:1.5 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dnode.c Thu May 23 08:32:30 2019 @@ -107,9 +107,6 @@ dnode_cons(void *arg, void *unused, int dnode_t *dn = arg; int i; -#ifdef __NetBSD__ - dn = unused; -#endif rw_init(&dn->dn_struct_rwlock, NULL, RW_DEFAULT, NULL); mutex_init(&dn->dn_mtx, NULL, MUTEX_DEFAULT, NULL); mutex_init(&dn->dn_dbufs_mtx, NULL, MUTEX_DEFAULT, NULL); Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/sa.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/sa.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/sa.c:1.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/sa.c:1.2 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/sa.c Thu May 23 08:32:30 2019 @@ -212,9 +212,6 @@ sa_cache_constructor(void *buf, void *un { sa_handle_t *hdl = buf; -#ifdef __NetBSD__ - hdl = unused; -#endif mutex_init(&hdl->sa_lock, NULL, MUTEX_DEFAULT, NULL); return (0); } Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.26 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.27 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c:1.26 Mon Apr 15 12:59:38 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_znode.c Thu May 23 08:32:30 2019 @@ -130,9 +130,6 @@ zfs_znode_cache_constructor(void *buf, v { znode_t *zp = buf; -#ifdef __NetBSD__ - zp = arg; -#endif POINTER_INVALIDATE(&zp->z_zfsvfs); list_link_init(&zp->z_link_node); Index: src/external/cddl/osnet/sys/kern/kmem.c diff -u src/external/cddl/osnet/sys/kern/kmem.c:1.1 src/external/cddl/osnet/sys/kern/kmem.c:1.2 --- src/external/cddl/osnet/sys/kern/kmem.c:1.1 Mon May 28 21:05:09 2018 +++ src/external/cddl/osnet/sys/kern/kmem.c Thu May 23 08:32:30 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: kmem.c,v 1.1 2018/05/28 21:05:09 chs Exp $ */ +/* $NetBSD: kmem.c,v 1.2 2019/05/23 08:32:30 hannken Exp $ */ /*- * Copyright (c) 2017 The NetBSD Foundation, Inc. @@ -28,6 +28,102 @@ #include <sys/kmem.h> +struct kmem_cache { + pool_cache_t km_pool; + void *km_private; + int (*km_constructor)(void *, void *, int); + void (*km_destructor)(void *, void *); + void (*km_reclaim)(void *); +}; + +static int +solaris_constructor(void *private, void *object, int flag) +{ + kmem_cache_t *km = private; + + if (km->km_constructor) + return (*km->km_constructor)(object, km->km_private, flag); + + return 0; +} + +static void +solaris_destructor(void *private, void *object) +{ + kmem_cache_t *km = private; + + if (km->km_destructor) + (*km->km_destructor)(object, km->km_private); +} + +static void +solaris_reclaim(void *private, int flag) +{ + + kmem_cache_t *km = private; + + if (km->km_reclaim) + (*km->km_reclaim)(km->km_private); +} + +kmem_cache_t * +kmem_cache_create(char *name, size_t bufsize, size_t align, + int (*constructor)(void *, void *, int), void (*destructor)(void *, void *), + void (*reclaim)(void *) __unused, void *private, vmem_t *vmp, int flags) +{ + kmem_cache_t *km; + + KASSERT(ISSET(flags, ~(KMC_NOTOUCH | KMC_NODEBUG)) == 0); + KASSERT(private == NULL); + KASSERT(vmp == NULL); + + km = kmem_zalloc(sizeof(*km), KM_SLEEP); + km->km_private = private; + km->km_constructor = constructor; + km->km_destructor = destructor; + km->km_reclaim = reclaim; + km->km_pool = pool_cache_init(bufsize, align, 0, 0, name, NULL, + IPL_NONE, solaris_constructor, solaris_destructor, km); + if (km->km_pool == NULL) { + kmem_free(km, sizeof(*km)); + return NULL; + } + if (reclaim) + pool_cache_set_drain_hook(km->km_pool, solaris_reclaim, km); + + return km; +} +void +kmem_cache_destroy(kmem_cache_t *km) +{ + + pool_cache_destroy(km->km_pool); + kmem_free(km, sizeof(*km)); +} + +void * +kmem_cache_alloc(kmem_cache_t *km, int flags) +{ + + KASSERT(ISSET(flags, ~(KM_SLEEP | KM_NOSLEEP | KM_PUSHPAGE)) == 0); + + return pool_cache_get(km->km_pool, flags); +} + +void +kmem_cache_free(kmem_cache_t *km, void *object) +{ + + pool_cache_put(km->km_pool, object); +} + +void +kmem_cache_reap_now(kmem_cache_t *km) +{ + + pool_cache_invalidate(km->km_pool); +} + #undef kmem_alloc #undef kmem_zalloc #undef kmem_free Index: src/external/cddl/osnet/sys/sys/kmem.h diff -u src/external/cddl/osnet/sys/sys/kmem.h:1.10 src/external/cddl/osnet/sys/sys/kmem.h:1.11 --- src/external/cddl/osnet/sys/sys/kmem.h:1.10 Mon May 28 21:05:10 2018 +++ src/external/cddl/osnet/sys/sys/kmem.h Thu May 23 08:32:31 2019 @@ -1,5 +1,5 @@ -/* $NetBSD: kmem.h,v 1.10 2018/05/28 21:05:10 chs Exp $ */ +/* $NetBSD: kmem.h,v 1.11 2019/05/23 08:32:31 hannken Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -41,48 +41,27 @@ #define KM_NORMALPRI 0 #define KM_NODEBUG 0 -#define KMC_NODEBUG 0 -#define KMC_NOTOUCH 0 +#define KMC_NOTOUCH 0x00010000 +#define KMC_NODEBUG 0x00020000 -typedef void kmem_cache_t; +struct kmem_cache; + +typedef struct kmem_cache kmem_cache_t; #define POINTER_IS_VALID(p) (!((uintptr_t)(p) & 0x3)) #define POINTER_INVALIDATE(pp) (*(pp) = (void *)((uintptr_t)(*(pp)) | 0x1)) -void kmem_reap(void); - -static inline kmem_cache_t * -kmem_cache_create(char *name, size_t bufsize, size_t align, - int (*constructor)(void *, void *, int), void (*destructor)(void *, void *), - void (*reclaim)(void *) __unused, void *private, vmem_t *vmp, int cflags) -{ - pool_cache_t pc; - int flags = bufsize > PAGESIZE ? PR_NOALIGN : 0; - - KASSERT(vmp == NULL); - - pc = pool_cache_init(bufsize, align, 0, flags, name, NULL, IPL_NONE, - constructor, destructor, private); - if (pc != NULL && reclaim != NULL) { - pool_cache_set_drain_hook(pc, (void *)reclaim, private); - } - return pc; -} - -static inline void * -kmem_cache_alloc(kmem_cache_t *cache, int flags) -{ - return pool_cache_get(cache, flags); -} - -#define kmem_cache_destroy(cache) pool_cache_destroy(cache) -#define kmem_cache_free(cache, buf) pool_cache_put(cache, buf) -#define kmem_cache_reap_now(cache) pool_cache_invalidate(cache) +kmem_cache_t *kmem_cache_create(char *, size_t, size_t, + int (*)(void *, void *, int), void (*)(void *, void *), + void (*)(void *), void *, vmem_t *, int); +void kmem_cache_destroy(kmem_cache_t *); +void *kmem_cache_alloc(kmem_cache_t *, int); +void kmem_cache_free(kmem_cache_t *, void *); +void kmem_cache_reap_now(kmem_cache_t *); +#define kmem_cache_set_move(cache, movefunc) do { } while (0) #define heap_arena kmem_arena -#define kmem_cache_set_move(cache, movefunc) do { } while (0) - #define kmem_alloc solaris_kmem_alloc #define kmem_zalloc solaris_kmem_zalloc #define kmem_free solaris_kmem_free