Page MenuHomeFreeBSD

Fix pointer loads in uma_vm_zone_stats().
ClosedPublic

Authored by markj on Oct 18 2019, 4:51 PM.
Tags
None
Referenced Files
F122623805: D22081.id63454.diff
Sun, Jul 6, 8:42 PM
F122593549: D22081.id63454.diff
Sun, Jul 6, 1:02 PM
Unknown Object (File)
Mon, Jun 30, 9:41 AM
Unknown Object (File)
Sat, Jun 28, 5:26 PM
Unknown Object (File)
Fri, Jun 27, 1:25 PM
Unknown Object (File)
Thu, Jun 26, 6:34 AM
Unknown Object (File)
Thu, Jun 26, 6:04 AM
Unknown Object (File)
Mon, Jun 23, 4:46 AM
Subscribers

Details

Summary

Ensure that each bucket pointer is loaded only once.
This happens already in practice, but without a change
like this one the compiler is permitted to issue two loads,
resulting in a race condition. This can happen when compiling
with -O0, for instance.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Restore the original loop, we need to always zero the structure.

Fix the right loop this time.

markj added reviewers: alc, jeff, kib, dougm.

Peter, could you post the disassembly of uma_vm_zone_stats() from your -O0 kernel?

Perhaps adding a sentence to the preceding comment explaining why atomic_load would be useful.

This revision is now accepted and ready to land.Oct 18 2019, 5:33 PM
This revision now requires review to proceed.Oct 18 2019, 5:39 PM

Peter, could you post the disassembly of uma_vm_zone_stats() from your -O0 kernel?

Sure.

In D22081#482499, @pho wrote:

Peter, could you post the disassembly of uma_vm_zone_stats() from your -O0 kernel?

Sure.

Thanks. Indeed, that code contains a race that should be fixed by this diff.

I tested 63458 for 17 hours with a "-O0" build of uma_core.c. LGTM.

This revision was not accepted when it landed; it landed in state Needs Review.Oct 22 2019, 2:20 PM
This revision was automatically updated to reflect the committed changes.