* Asynchronous dump-guest-memory from Peter
* improved logging with -D -daemonize from Dimitris
* more address_space_* optimization from Gonglei
* TCG xsave/xrstor thinko fix
* chardev bugfix and documentation patch
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQEcBAABCAAGBQJWzxnbAAoJEL/70l94x66DlfkIAJyo9kOareVLOnAE8ccayghk
0SbU1ZR9etgdeH4vZIUKzFzSg86pnqqub/w9yxgNG35PsiXVOnzgYSv6W1qsXdVE
v32u6c+vWHvHc3cCOFI5+6nURftf2+p/vB2VFXiI23VUbhs22UAjXsUdfbp321X5
Krme2fxk0kmwPHoKiyek0qiXa8nt0fiuFzU7DN7gTQMoDFaDEqvcULlNJHUFnep+
M1yQfhSzrD97bafPwmIDU0LejJxrzR6phuzWedugU1tay6y3pD85wQqHdFI7fn/o
dC4F+vg41Lc/5jKUgRMpe5FmX4VM+DvRdYgZZsp9/SkBM7DuL7crhVWVwvQj82Y=
=8BvG
-----END PGP SIGNATURE-----
Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
* Asynchronous dump-guest-memory from Peter
* improved logging with -D -daemonize from Dimitris
* more address_space_* optimization from Gonglei
* TCG xsave/xrstor thinko fix
* chardev bugfix and documentation patch
# gpg: Signature made Thu 25 Feb 2016 15:12:27 GMT using RSA key ID 78C7AE83
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>"
# gpg: aka "Paolo Bonzini <pbonzini@redhat.com>"
* remotes/bonzini/tags/for-upstream:
target-i386: fix confusion in xcr0 bit position vs. mask
chardev: Properly initialize ChardevCommon components
memory: Remove unreachable return statement
memory: optimize qemu_get_ram_ptr and qemu_ram_ptr_length
exec: store RAMBlock pointer into memory region
log: Redirect stderr to logfile if deamonized
dump-guest-memory: add qmp event DUMP_COMPLETED
Dump: add hmp command "info dump"
Dump: add qmp command "query-dump"
DumpState: adding total_size and written_size fields
dump-guest-memory: add "detach" support
dump-guest-memory: disable dump when in INMIGRATE state
dump-guest-memory: introduce dump_process() helper function.
dump-guest-memory: add dump_in_progress() helper function
dump-guest-memory: using static DumpState, add DumpStatus
dump-guest-memory: add "detach" flag for QMP/HMP interfaces.
dump-guest-memory: cleanup: removing dump_{error|cleanup}().
scripts/kvm/kvm_stat: Fix missing right parantheses and ".format(...)"
qemu-options.hx: Improve documentation of chardev multiplexing mode
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
586fc27e6a
31 changed files with 563 additions and 164 deletions
|
|
@ -31,6 +31,7 @@
|
|||
#include "qemu/notify.h"
|
||||
#include "qom/object.h"
|
||||
#include "qemu/rcu.h"
|
||||
#include "qemu/typedefs.h"
|
||||
|
||||
#define MAX_PHYS_ADDR_SPACE_BITS 62
|
||||
#define MAX_PHYS_ADDR (((hwaddr)1 << MAX_PHYS_ADDR_SPACE_BITS) - 1)
|
||||
|
|
@ -169,6 +170,7 @@ struct MemoryRegion {
|
|||
bool global_locking;
|
||||
uint8_t dirty_log_mask;
|
||||
ram_addr_t ram_addr;
|
||||
RAMBlock *ram_block;
|
||||
Object *owner;
|
||||
const MemoryRegionIOMMUOps *iommu_ops;
|
||||
|
||||
|
|
@ -1386,7 +1388,7 @@ MemTxResult address_space_read_continue(AddressSpace *as, hwaddr addr,
|
|||
MemoryRegion *mr);
|
||||
MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
|
||||
MemTxAttrs attrs, uint8_t *buf, int len);
|
||||
void *qemu_get_ram_ptr(ram_addr_t addr);
|
||||
void *qemu_get_ram_ptr(RAMBlock *ram_block, ram_addr_t addr);
|
||||
|
||||
static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
|
||||
{
|
||||
|
|
@ -1395,8 +1397,6 @@ static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
|
|||
} else {
|
||||
return memory_region_is_ram(mr) || memory_region_is_romd(mr);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1427,7 +1427,7 @@ MemTxResult address_space_read(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
|
|||
mr = address_space_translate(as, addr, &addr1, &l, false);
|
||||
if (len == l && memory_access_is_direct(mr, false)) {
|
||||
addr1 += memory_region_get_ram_addr(mr);
|
||||
ptr = qemu_get_ram_ptr(addr1);
|
||||
ptr = qemu_get_ram_ptr(mr->ram_block, addr1);
|
||||
memcpy(buf, ptr, len);
|
||||
} else {
|
||||
result = address_space_read_continue(as, addr, attrs, buf, len,
|
||||
|
|
|
|||
|
|
@ -493,4 +493,8 @@ int parse_debug_env(const char *name, int max, int initial);
|
|||
const char *qemu_ether_ntoa(const MACAddr *mac);
|
||||
void page_size_init(void);
|
||||
|
||||
/* returns non-zero if dump is in progress, otherwise zero is
|
||||
* returned. */
|
||||
bool dump_in_progress(void);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -90,12 +90,6 @@ static inline void qemu_log_close(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* Set up a new log file */
|
||||
static inline void qemu_log_set_file(FILE *f)
|
||||
{
|
||||
qemu_logfile = f;
|
||||
}
|
||||
|
||||
/* define log items */
|
||||
typedef struct QEMULogItem {
|
||||
int mask;
|
||||
|
|
|
|||
|
|
@ -114,6 +114,16 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
|
|||
void (*init)(struct CharDriverState *s),
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* @qemu_chr_parse_common:
|
||||
*
|
||||
* Parse the common options available to all character backends.
|
||||
*
|
||||
* @opts the options that still need parsing
|
||||
* @backend a new backend
|
||||
*/
|
||||
void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
|
||||
|
||||
/**
|
||||
* @qemu_chr_new:
|
||||
*
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
|
||||
#include "sysemu/dump-arch.h"
|
||||
#include "sysemu/memory_mapping.h"
|
||||
#include "qapi-types.h"
|
||||
|
||||
typedef struct QEMU_PACKED MakedumpfileHeader {
|
||||
char signature[16]; /* = "makedumpfile" */
|
||||
|
|
@ -176,6 +177,20 @@ typedef struct DumpState {
|
|||
off_t offset_page; /* offset of page part in vmcore */
|
||||
size_t num_dumpable; /* number of page that can be dumped */
|
||||
uint32_t flag_compress; /* indicate the compression format */
|
||||
DumpStatus status; /* current dump status */
|
||||
|
||||
bool has_format; /* whether format is provided */
|
||||
DumpGuestMemoryFormat format; /* valid only if has_format == true */
|
||||
QemuThread dump_thread; /* thread for detached dump */
|
||||
|
||||
int64_t total_size; /* total memory size (in bytes) to
|
||||
* be dumped. When filter is
|
||||
* enabled, this will only count
|
||||
* those to be written. */
|
||||
int64_t written_size; /* written memory size (in bytes),
|
||||
* this could be used to calculate
|
||||
* how much work we have
|
||||
* finished. */
|
||||
} DumpState;
|
||||
|
||||
uint16_t cpu_to_dump16(DumpState *s, uint16_t val);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/typedefs.h"
|
||||
#include "exec/memory.h"
|
||||
|
||||
typedef struct GuestPhysBlock {
|
||||
/* visible to guest, reflects PCI hole, etc */
|
||||
|
|
@ -27,6 +28,9 @@ typedef struct GuestPhysBlock {
|
|||
/* points into host memory */
|
||||
uint8_t *host_addr;
|
||||
|
||||
/* points to the MemoryRegion that this block belongs to */
|
||||
MemoryRegion *mr;
|
||||
|
||||
QTAILQ_ENTRY(GuestPhysBlock) next;
|
||||
} GuestPhysBlock;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue