[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 62/62] colo: fix return without releasing RCU
From: |
Paolo Bonzini |
Subject: |
[PULL 62/62] colo: fix return without releasing RCU |
Date: |
Mon, 16 Dec 2019 17:28:46 +0100 |
Use WITH_RCU_READ_LOCK_GUARD to avoid exiting colo_init_ram_cache
without releasing RCU.
Cc: Dr. David Alan Gilbert <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
migration/ram.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/migration/ram.c b/migration/ram.c
index 7dd7f81..8d7c015 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -3891,26 +3891,27 @@ int colo_init_ram_cache(void)
{
RAMBlock *block;
- rcu_read_lock();
- RAMBLOCK_FOREACH_NOT_IGNORED(block) {
- block->colo_cache = qemu_anon_ram_alloc(block->used_length,
- NULL,
- false);
- if (!block->colo_cache) {
- error_report("%s: Can't alloc memory for COLO cache of block %s,"
- "size 0x" RAM_ADDR_FMT, __func__, block->idstr,
- block->used_length);
- RAMBLOCK_FOREACH_NOT_IGNORED(block) {
- if (block->colo_cache) {
- qemu_anon_ram_free(block->colo_cache, block->used_length);
- block->colo_cache = NULL;
+ WITH_RCU_READ_LOCK_GUARD() {
+ RAMBLOCK_FOREACH_NOT_IGNORED(block) {
+ block->colo_cache = qemu_anon_ram_alloc(block->used_length,
+ NULL,
+ false);
+ if (!block->colo_cache) {
+ error_report("%s: Can't alloc memory for COLO cache of block
%s,"
+ "size 0x" RAM_ADDR_FMT, __func__, block->idstr,
+ block->used_length);
+ RAMBLOCK_FOREACH_NOT_IGNORED(block) {
+ if (block->colo_cache) {
+ qemu_anon_ram_free(block->colo_cache,
block->used_length);
+ block->colo_cache = NULL;
+ }
}
+ return -errno;
}
- return -errno;
+ memcpy(block->colo_cache, block->host, block->used_length);
}
- memcpy(block->colo_cache, block->host, block->used_length);
}
- rcu_read_unlock();
+
/*
* Record the dirty pages that sent by PVM, we use this dirty bitmap
together
* with to decide which page in cache should be flushed into SVM's RAM. Here
--
1.8.3.1
- [PULL 50/62] x86: move more x86-generic functions out of PC files, (continued)
- [PULL 50/62] x86: move more x86-generic functions out of PC files, Paolo Bonzini, 2019/12/16
- [PULL 52/62] pc: stubify x86 iommu, Paolo Bonzini, 2019/12/16
- [PULL 53/62] hw/i386: De-duplicate gsi_handler() to remove kvm_pc_gsi_handler(), Paolo Bonzini, 2019/12/16
- [PULL 46/62] hw: replace hw/i386/pc.h with a header just for the i8259, Paolo Bonzini, 2019/12/16
- [PULL 49/62] hw/i386/pc: Convert DPRINTF() to trace events, Paolo Bonzini, 2019/12/16
- [PULL 51/62] acpi: move PC stubs out of stubs/, Paolo Bonzini, 2019/12/16
- [PULL 56/62] hw/i386/pc: Use TYPE_PORT92 instead of hardcoded string, Paolo Bonzini, 2019/12/16
- [PULL 54/62] hw/i386: Simplify ioapic_init_gsi(), Paolo Bonzini, 2019/12/16
- [PULL 55/62] hw/isa/isa-bus: cleanup irq functions, Paolo Bonzini, 2019/12/16
- [PULL 59/62] hyperv: Use auto rcu_read macros, Paolo Bonzini, 2019/12/16
- [PULL 62/62] colo: fix return without releasing RCU,
Paolo Bonzini <=
- [PULL 57/62] hw/i386/pc: Inline port92_init(), Paolo Bonzini, 2019/12/16
- [PULL 58/62] hw/i386/pc: Extract the port92 device, Paolo Bonzini, 2019/12/16
- [PULL 60/62] qsp: Use WITH_RCU_READ_LOCK_GUARD, Paolo Bonzini, 2019/12/16
- [PULL 61/62] memory: use RCU_READ_LOCK_GUARD, Paolo Bonzini, 2019/12/16
- Re: [PULL 00/62] Misc patches for 2019-12-16, Peter Maydell, 2019/12/17