KVM does not hold any references to rcu protected data when it switches
CPU into a guest mode. In fact switching to a guest mode is very similar
to exiting to userspase from rcu point of view. In addition CPU may stay
in a guest mode for quite a long time (up to one time slice). Lets treat
guest mode as quiescent state, just like we do with user-mode execution.
This request was evaluated by Red Hat Product Management for inclusion
in a Red Hat Enterprise Linux maintenance release. Product Management has
requested further review of this request by Red Hat Engineering, for potential
inclusion in a Red Hat Enterprise Linux Update release for currently deployed
products. This request is not yet committed for inclusion in an Update release.
Tested on 2.6.32-156.el6.x86_64 with qemu-kvm-0.12.1.2-2.165.el6.x86_64, marked as qa_ack+
1. boot guest with virtio devices and vcpu=4
2. in guest
guest just pause for a couple of seconds after printing "Disabling non-boot CPUs"
guest should be rhel6.X
Patch(es) available on kernel-2.6.32-160.el6
Verified this issue on kernel 2.6.32-206.el6.x86_64 with qemu-kvm-0.12.1.2-2.195.el6.x86_64.,I tried three times.
1.boot guest with boot guest with virtio devices and vcpu=4
No pause after printing "Disabling non-boot
According to comment3 and comment10,set this issue as verified.
Technical note added. If any revisions are required, please edit the "Technical Notes" field
accordingly. All revisions will be proofread by the Engineering Content Services team.
When a CPU is about to modify data protected by the RCU (Read Copy Update) mechanism, it has to wait for other CPUs in the system to pass a quiescent state. Previously, the guest mode was not considered a quiescent state. As a consequence, if a CPU was in the guest mode for a long time, another CPU had to wait a long time in order to modify RCU-protected data. With this update, the rcu_virt_note_context_switch() function, which marks the guest mode as a quiescent state, has been added to the kernel, thus resolving this issue.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.