------- Comment From <email address hidden> 2018-01-24 14:13 EDT-------
The reason for this bug is because the h_set_sprg0 and h_page_init hypervisor calls were not yet implemented in Qemu 2.5. The problem was solved by two patches. They implement one hypercall each.
This is a very simple hypercall that only sets up the SPRG0
register for the guest (since writing to SPRG0 was only permitted
to the hypervisor in older versions of the PowerISA).
This hypercall either initializes a page with zeros, or copies
another page.
According to LoPAPR, the i-cache of the page should also be
flushed if using H_ICACHE_INVALIDATE or H_ICACHE_SYNCHRONIZE,
and the d-cache should be synchronized to the RAM if the
H_ICACHE_SYNCHRONIZE flag is used. For this, two new functions
are introduced, kvmppc_dcbst_range() and kvmppc_icbi()_range, which
use the corresponding assembler instructions to flush the caches
if running with KVM on Power. If the code runs with TCG instead,
the code only uses tb_flush(), assuming that this will be
enough for synchronization.
------- Comment From <email address hidden> 2018-01-24 14:13 EDT-------
The reason for this bug is because the h_set_sprg0 and h_page_init hypervisor calls were not yet implemented in Qemu 2.5. The problem was solved by two patches. They implement one hypercall each.
https:/ /github. com/qemu/ qemu/commit/ 423576f771db8c6 dbb944ddb8dc15b 472f62de4a
This is a very simple hypercall that only sets up the SPRG0
register for the guest (since writing to SPRG0 was only permitted
to the hypervisor in older versions of the PowerISA).
https:/ /github. com/qemu/ qemu/commit/ 3240dd9a6924df1 8dfccb83defa091 4065da076e
This hypercall either initializes a page with zeros, or copies SYNCHRONIZE, SYNCHRONIZE flag is used. For this, two new functions dcbst_range( ) and kvmppc_ icbi()_ range, which
another page.
According to LoPAPR, the i-cache of the page should also be
flushed if using H_ICACHE_INVALIDATE or H_ICACHE_
and the d-cache should be synchronized to the RAM if the
H_ICACHE_
are introduced, kvmppc_
use the corresponding assembler instructions to flush the caches
if running with KVM on Power. If the code runs with TCG instead,
the code only uses tb_flush(), assuming that this will be
enough for synchronization.