Date: Mon, 25 Jan 2021 22:42:35 GMT From: Mateusz Guzik <mjg@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: cc96f92a570e - main - atomic: make atomic_store_ptr type-aware Message-ID: <202101252242.10PMgZfO026271@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by mjg: URL: https://cgit.FreeBSD.org/src/commit/?id=cc96f92a570e05636a20fdd15d4616b127bb9ecc commit cc96f92a570e05636a20fdd15d4616b127bb9ecc Author: Mateusz Guzik <mjg@FreeBSD.org> AuthorDate: 2021-01-25 19:39:14 +0000 Commit: Mateusz Guzik <mjg@FreeBSD.org> CommitDate: 2021-01-25 22:40:15 +0000 atomic: make atomic_store_ptr type-aware --- sys/contrib/openzfs/module/os/freebsd/zfs/zfs_znode.c | 2 +- sys/fs/tmpfs/tmpfs_subr.c | 6 ++---- sys/sys/_cscan_atomic.h | 5 ++++- sys/sys/atomic_common.h | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_znode.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_znode.c index f9a0820eda2d..d9f2635b0129 100644 --- a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_znode.c +++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_znode.c @@ -444,7 +444,7 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz, zp->z_blksz = blksz; zp->z_seq = 0x7A4653; zp->z_sync_cnt = 0; - atomic_store_ptr((uintptr_t *)&zp->z_cached_symlink, (uintptr_t)NULL); + atomic_store_ptr(&zp->z_cached_symlink, NULL); vp = ZTOV(zp); diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c index 07e7ea11ad6e..3b3581fc81f6 100644 --- a/sys/fs/tmpfs/tmpfs_subr.c +++ b/sys/fs/tmpfs/tmpfs_subr.c @@ -360,8 +360,7 @@ tmpfs_alloc_node(struct mount *mp, struct tmpfs_mount *tmp, enum vtype type, * TODO: Since there is no load consume primitive provided * right now, the load is performed with an acquire fence. */ - atomic_store_ptr((uintptr_t *)&nnode->tn_link_target, - (uintptr_t)symlink); + atomic_store_ptr(&nnode->tn_link_target, symlink); atomic_store_char((char *)&nnode->tn_link_smr, symlink_smr); atomic_thread_fence_rel(); break; @@ -453,8 +452,7 @@ tmpfs_free_node_locked(struct tmpfs_mount *tmp, struct tmpfs_node *node, case VLNK: symlink = node->tn_link_target; - atomic_store_ptr((uintptr_t *)&node->tn_link_target, - (uintptr_t)NULL); + atomic_store_ptr(&node->tn_link_target, NULL); if (atomic_load_char(&node->tn_link_smr)) { cache_symlink_free(symlink, node->tn_size + 1); } else { diff --git a/sys/sys/_cscan_atomic.h b/sys/sys/_cscan_atomic.h index 19c05b179940..3bd9455102b1 100644 --- a/sys/sys/_cscan_atomic.h +++ b/sys/sys/_cscan_atomic.h @@ -243,7 +243,10 @@ void kcsan_atomic_thread_fence_seq_cst(void); #define atomic_subtract_ptr kcsan_atomic_subtract_ptr #define atomic_subtract_acq_ptr kcsan_atomic_subtract_acq_ptr #define atomic_subtract_rel_ptr kcsan_atomic_subtract_rel_ptr -#define atomic_store_ptr kcsan_atomic_store_ptr +#define atomic_store_ptr(x, v) ({ \ + __typeof(*x) __value = (v); \ + kcsan_atomic_store_ptr((volatile uintptr_t *)(x), (uintptr_t)(__value));\ +}) #define atomic_store_rel_ptr kcsan_atomic_store_rel_ptr #define atomic_swap_ptr kcsan_atomic_swap_ptr #define atomic_testandclear_ptr kcsan_atomic_testandclear_ptr diff --git a/sys/sys/atomic_common.h b/sys/sys/atomic_common.h index a3548977b940..4c29d132c369 100644 --- a/sys/sys/atomic_common.h +++ b/sys/sys/atomic_common.h @@ -58,7 +58,7 @@ #define atomic_store_long(p, v) \ (*(volatile u_long *)(p) = (u_long)(v)) #define atomic_store_ptr(p, v) \ - (*(volatile uintptr_t *)(p) = (uintptr_t)(v)) + (*(volatile __typeof(*p) *)(p) = (v)) #define atomic_store_8(p, v) \ (*(volatile uint8_t *)(p) = (uint8_t)(v)) #define atomic_store_16(p, v) \
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202101252242.10PMgZfO026271>