Add grouping and multiplexing for system-mode (PMC_MODE_SC) groups. A
system group counts on one CPU and has no target process, so it needs a
per-CPU rotation list and a per-CPU rotation thread instead of the
per-process ones that a virtual group uses.
pmu_sys_schedule_in checks the owner's allocation permission, assigns
the rows, and starts every member. If a member fails to start, it stops
the members that already started and releases the rows, so a row does
not stay running unpublished. pmu_sys_schedule_out stops the rows,
drains the samples of the group, and releases the rows.
pmu_syscpu_rotate_one runs one rotation tick for a CPU. Group release
now calls pmu_sys_group_pre_release first, so that a system group leaves
the per-CPU list before the rest of the release runs.
Sponsored by: AMD