hv: bugfix for sbuf reset

The sbuf is allocated for each pcpu by hypercall from SOS. Before launch
Guest OS, the script will offline cpus, which will trigger vcpu reset and
then reset sbuf pointer. But sbuf only initiate once by SOS, so these
cpus for Guest OS has no sbuf to use. Thus, when run 'acrntrace' on SOS,
there is no trace data for Guest OS.
To fix the issue, only reset the sbuf for SOS.

Tracked-On: #3335
Signed-off-by: Conghui Chen <conghui.chen@intel.com>
Reviewed-by: Eddie Dong <eddie.dong@intel.com>
Reviewed-by: Yan, Like <like.yan@intel.com>
This commit is contained in:
Conghui Chen 2019-06-27 00:50:00 +08:00 committed by wenlingz
parent f7c4d2b5c4
commit 4d88b2bb65
5 changed files with 10 additions and 9 deletions

View File

@ -579,8 +579,6 @@ void reset_vcpu(struct acrn_vcpu *vcpu)
vlapic = vcpu_vlapic(vcpu);
vlapic_reset(vlapic);
sbuf_reset(vcpu->pcpu_id);
reset_vcpu_regs(vcpu);
}

View File

@ -26,6 +26,7 @@
#include <vboot_info.h>
#include <board.h>
#include <sgx.h>
#include <sbuf.h>
vm_sw_loader_t vm_sw_loader;
@ -575,6 +576,10 @@ int32_t shutdown_vm(struct acrn_vm *vm)
vm_config = get_vm_config(vm->vm_id);
vm_config->guest_flags &= ~DM_OWNED_GUEST_FLAG_MASK;
if (is_sos_vm(vm)) {
sbuf_reset();
}
vpci_cleanup(vm);
vuart_deinit(vm);

View File

@ -92,11 +92,11 @@ int32_t sbuf_share_setup(uint16_t pcpu_id, uint32_t sbuf_id, uint64_t *hva)
return 0;
}
void sbuf_reset(uint16_t pcpu_id)
void sbuf_reset(void)
{
uint32_t sbuf_id;
uint16_t pcpu_id, sbuf_id;
if (pcpu_id < get_pcpu_nums()) {
for (pcpu_id = 0U; pcpu_id < get_pcpu_nums(); pcpu_id++) {
for (sbuf_id = 0U; sbuf_id < ACRN_SBUF_ID_MAX; sbuf_id++) {
per_cpu(sbuf, pcpu_id)[sbuf_id] = 0U;
}

View File

@ -65,7 +65,7 @@ struct shared_buf {
*/
uint32_t sbuf_put(struct shared_buf *sbuf, uint8_t *data);
int32_t sbuf_share_setup(uint16_t pcpu_id, uint32_t sbuf_id, uint64_t *hva);
void sbuf_reset(uint16_t pcpu_id);
void sbuf_reset(void);
uint32_t sbuf_next_ptr(uint32_t pos, uint32_t span, uint32_t scope);
#endif /* SHARED_BUFFER_H */

View File

@ -4,6 +4,4 @@
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <types.h>
void sbuf_reset(__unused uint16_t pcpu_id) {}
void sbuf_reset(void) {}