Message ID | 1374783499-2550-8-git-send-email-lilei@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On 07/25/2013 04:18 PM, Lei Li wrote: > Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> > --- > include/sysemu/sysemu.h | 1 + > savevm.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 56 insertions(+), 0 deletions(-) > > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h > index 5b90027..9abe4c9 100644 > --- a/include/sysemu/sysemu.h > +++ b/include/sysemu/sysemu.h > @@ -80,6 +80,7 @@ int qemu_savevm_state_iterate(QEMUFile *f); > void qemu_savevm_state_complete(QEMUFile *f); > void qemu_savevm_state_cancel(void); > uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size); > +int qemu_savevm_local(QEMUFile *f); > int qemu_save_device_state(QEMUFile *f); > int qemu_loadvm_state(QEMUFile *f); > > diff --git a/savevm.c b/savevm.c > index e18ca22..c183369 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -2007,6 +2007,61 @@ static int qemu_savevm_state(QEMUFile *f) > } > > /** > + * Save all of the ram pages to stream QEMUFile > + * > + * Return: negtive for an error > + */ > +int qemu_savevm_local(QEMUFile *f) > +{ > + SaveStateEntry *se; > + int ret; > + > + QTAILQ_FOREACH(se, &savevm_handlers, entry) { > + if (!se->ops) { > + continue; > + } > + } > + > + qemu_put_be32(f, QEMU_VM_FILE_MAGIC); > + qemu_put_be32(f, QEMU_VM_FILE_VERSION); > + > + QTAILQ_FOREACH(se, &savevm_handlers, entry) { > + int len; > + > + if (!se->ops || !se->ops->save_local_setup) { > + continue; > + } > + if (se->ops && se->ops->is_block_active) { > + continue; > + } > + > + /* Section type */ > + qemu_put_byte(f, QEMU_VM_SECTION_START); > + qemu_put_be32(f, se->section_id); > + > + /* ID string */ > + len = strlen(se->idstr); > + qemu_put_byte(f, len); > + qemu_put_buffer(f, (uint8_t *)se->idstr, len); > + > + qemu_put_be32(f, se->instance_id); > + > + qemu_put_be32(f, se->version_id); > + > + ret = se->ops->save_local_setup(f, se->opaque); > + if (ret < 0) { > + qemu_file_set_error(f, ret); > + break; > + } > + } > + > + qemu_put_byte(f, QEMU_VM_EOF); > + qemu_fflush(f); > + > + return qemu_file_get_error(f); > +} > + > +/** > * Save all of the device states to stream QEMUFile > * > * Return negtive if there has been an error You don't have enough comments in your commit messages - please add more. Why do you need a new savevm function? - Michael
On 08/03/2013 03:48 AM, Michael R. Hines wrote: > On 07/25/2013 04:18 PM, Lei Li wrote: >> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> >> --- >> include/sysemu/sysemu.h | 1 + >> savevm.c | 55 >> +++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 56 insertions(+), 0 deletions(-) >> >> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h >> index 5b90027..9abe4c9 100644 >> --- a/include/sysemu/sysemu.h >> +++ b/include/sysemu/sysemu.h >> @@ -80,6 +80,7 @@ int qemu_savevm_state_iterate(QEMUFile *f); >> void qemu_savevm_state_complete(QEMUFile *f); >> void qemu_savevm_state_cancel(void); >> uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size); >> +int qemu_savevm_local(QEMUFile *f); >> int qemu_save_device_state(QEMUFile *f); >> int qemu_loadvm_state(QEMUFile *f); >> >> diff --git a/savevm.c b/savevm.c >> index e18ca22..c183369 100644 >> --- a/savevm.c >> +++ b/savevm.c >> @@ -2007,6 +2007,61 @@ static int qemu_savevm_state(QEMUFile *f) >> } >> >> /** >> + * Save all of the ram pages to stream QEMUFile >> + * >> + * Return: negtive for an error >> + */ >> +int qemu_savevm_local(QEMUFile *f) >> +{ >> + SaveStateEntry *se; >> + int ret; >> + >> + QTAILQ_FOREACH(se, &savevm_handlers, entry) { >> + if (!se->ops) { >> + continue; >> + } >> + } >> + >> + qemu_put_be32(f, QEMU_VM_FILE_MAGIC); >> + qemu_put_be32(f, QEMU_VM_FILE_VERSION); >> + >> + QTAILQ_FOREACH(se, &savevm_handlers, entry) { >> + int len; >> + >> + if (!se->ops || !se->ops->save_local_setup) { >> + continue; >> + } >> + if (se->ops && se->ops->is_block_active) { >> + continue; >> + } >> + >> + /* Section type */ >> + qemu_put_byte(f, QEMU_VM_SECTION_START); >> + qemu_put_be32(f, se->section_id); >> + >> + /* ID string */ >> + len = strlen(se->idstr); >> + qemu_put_byte(f, len); >> + qemu_put_buffer(f, (uint8_t *)se->idstr, len); >> + >> + qemu_put_be32(f, se->instance_id); >> + >> + qemu_put_be32(f, se->version_id); >> + >> + ret = se->ops->save_local_setup(f, se->opaque); >> + if (ret < 0) { >> + qemu_file_set_error(f, ret); >> + break; >> + } >> + } >> + >> + qemu_put_byte(f, QEMU_VM_EOF); >> + qemu_fflush(f); >> + >> + return qemu_file_get_error(f); >> +} >> + >> +/** >> * Save all of the device states to stream QEMUFile >> * >> * Return negtive if there has been an error > > You don't have enough comments in your commit messages - please add more. Sorry for the missing of commit messages.. > > Why do you need a new savevm function? qemu_savevm_local() is introduced to savevm layer that begin and do the local migration by calling ops->save_local_setup which is added to savevm_ram_handlers. > > - Michael
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 5b90027..9abe4c9 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -80,6 +80,7 @@ int qemu_savevm_state_iterate(QEMUFile *f); void qemu_savevm_state_complete(QEMUFile *f); void qemu_savevm_state_cancel(void); uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size); +int qemu_savevm_local(QEMUFile *f); int qemu_save_device_state(QEMUFile *f); int qemu_loadvm_state(QEMUFile *f); diff --git a/savevm.c b/savevm.c index e18ca22..c183369 100644 --- a/savevm.c +++ b/savevm.c @@ -2007,6 +2007,61 @@ static int qemu_savevm_state(QEMUFile *f) } /** + * Save all of the ram pages to stream QEMUFile + * + * Return: negtive for an error + */ +int qemu_savevm_local(QEMUFile *f) +{ + SaveStateEntry *se; + int ret; + + QTAILQ_FOREACH(se, &savevm_handlers, entry) { + if (!se->ops) { + continue; + } + } + + qemu_put_be32(f, QEMU_VM_FILE_MAGIC); + qemu_put_be32(f, QEMU_VM_FILE_VERSION); + + QTAILQ_FOREACH(se, &savevm_handlers, entry) { + int len; + + if (!se->ops || !se->ops->save_local_setup) { + continue; + } + if (se->ops && se->ops->is_block_active) { + continue; + } + + /* Section type */ + qemu_put_byte(f, QEMU_VM_SECTION_START); + qemu_put_be32(f, se->section_id); + + /* ID string */ + len = strlen(se->idstr); + qemu_put_byte(f, len); + qemu_put_buffer(f, (uint8_t *)se->idstr, len); + + qemu_put_be32(f, se->instance_id); + + qemu_put_be32(f, se->version_id); + + ret = se->ops->save_local_setup(f, se->opaque); + if (ret < 0) { + qemu_file_set_error(f, ret); + break; + } + } + + qemu_put_byte(f, QEMU_VM_EOF); + qemu_fflush(f); + + return qemu_file_get_error(f); +} + +/** * Save all of the device states to stream QEMUFile * * Return negtive if there has been an error
Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> --- include/sysemu/sysemu.h | 1 + savevm.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 0 deletions(-)