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
Unknown Object (File)
Fri, Nov 1, 10:36 AM
Unknown Object (File)
Fri, Nov 1, 9:33 AM
Unknown Object (File)
Fri, Nov 1, 5:48 AM
Unknown Object (File)
Oct 4 2024, 7:36 AM
Unknown Object (File)
Oct 4 2024, 7:31 AM
Unknown Object (File)
Oct 4 2024, 7:28 AM
Unknown Object (File)
Oct 4 2024, 7:28 AM
Unknown Object (File)
Oct 4 2024, 7:26 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.