Page MenuHomeFreeBSD

vnet: make VNET_FOREACH() always be a loop
ClosedPublic

Authored by kp on Jul 6 2022, 8:21 PM.
Tags
None
Referenced Files
F166615574: D35739.id107877.diff
Fri, Aug 14, 9:32 PM
F166605152: D35739.id107863.diff
Fri, Aug 14, 8:21 PM
F166603841: D35739.diff
Fri, Aug 14, 8:13 PM
F166603812: D35739.id107877.diff
Fri, Aug 14, 8:13 PM
Unknown Object (File)
Thu, Aug 13, 7:36 PM
Unknown Object (File)
Thu, Aug 13, 6:50 PM
Unknown Object (File)
Sun, Jul 26, 11:48 AM
Unknown Object (File)
Wed, Jul 22, 11:02 AM

Details

Summary

VNET_FOREACH() is a LIST_FOREACH if VIMAGE is set, but empty if it's
not. This means that users of the macro couldn't use 'continue' or
'break' as one would expect of a loop.

Change VNET_FOREACH() to be a loop in all cases (although one that is
fixed to one iteration if VIMAGE is not set).

Sponsored by: Rubicon Communications, LLC ("Netgate")

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 46301
Build 43190: arc lint + arc unit

Event Timeline

kp requested review of this revision.Jul 6 2022, 8:21 PM

I wonder if compiler removes the loop and produces same code after the change.

This revision is now accepted and ready to land.Jul 6 2022, 8:28 PM

I wonder if compiler removes the loop and produces same code after the change.

It does, yes, so this is a no-op, other than making the loop work the way a reader would expect it to, regardless of VIMAGE or ! VIMAGE.

This revision was automatically updated to reflect the committed changes.