Date: Fri, 31 Jan 2020 20:30:50 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r357352 - head/tools/uma/smrstress Message-ID: <202001312030.00VKUoeK088320@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Fri Jan 31 20:30:50 2020 New Revision: 357352 URL: https://svnweb.freebsd.org/changeset/base/357352 Log: smrstress: Add 'publishing' fences to operations on smrs_current. Reported and tested by: andrew Reviewed by: jeff Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D23440 Modified: head/tools/uma/smrstress/smrstress.c Modified: head/tools/uma/smrstress/smrstress.c ============================================================================== --- head/tools/uma/smrstress/smrstress.c Fri Jan 31 20:04:32 2020 (r357351) +++ head/tools/uma/smrstress/smrstress.c Fri Jan 31 20:30:50 2020 (r357352) @@ -84,7 +84,7 @@ smrs_read(void) /* Wait for the writer to exit. */ while (smrs_completed == 0) { smr_enter(smrs_smr); - cur = (void *)atomic_load_ptr(&smrs_current); + cur = (void *)atomic_load_acq_ptr(&smrs_current); if (cur->generation == -1) smrs_error(cur, "read early: Use after free!\n"); atomic_add_int(&cur->count, 1); @@ -107,6 +107,7 @@ smrs_write(void) for (i = 0; i < smrs_iterations; i++) { cur = uma_zalloc_smr(smrs_zone, M_WAITOK); + atomic_thread_fence_rel(); cur = (void *)atomic_swap_ptr(&smrs_current, (uintptr_t)cur); uma_zfree_smr(smrs_zone, cur); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001312030.00VKUoeK088320>