Message ID | 1455128440-11783-1-git-send-email-duanj@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Quoting Jianjun Duan (2016-02-10 12:20:40) > htab_save_first_pass could return without finishing its work due to > timeout. The patch checks if another invocation of it is necessary and > will call it in htab_save_complete if necessary. > > Signed-off-by: Jianjun Duan <duanj@linux.vnet.ibm.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> > --- > hw/ppc/spapr.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 6bfb908..f6b6749 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -1317,6 +1317,7 @@ static int htab_save_setup(QEMUFile *f, void *opaque) > static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr, > int64_t max_ns) > { > + bool has_timeout = max_ns != -1; > int htabslots = HTAB_SIZE(spapr) / HASH_PTE_SIZE_64; > int index = spapr->htab_save_index; > int64_t starttime = qemu_clock_get_ns(QEMU_CLOCK_REALTIME); > @@ -1350,7 +1351,7 @@ static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr, > qemu_put_buffer(f, HPTE(spapr->htab, chunkstart), > HASH_PTE_SIZE_64 * n_valid); > > - if ((qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) { > + if (has_timeout && (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) { > break; > } > } > @@ -1503,6 +1504,9 @@ static int htab_save_complete(QEMUFile *f, void *opaque) > close(spapr->htab_fd); > spapr->htab_fd = -1; > } else { > + if (spapr->htab_first_pass) { > + htab_save_first_pass(f, spapr, -1); > + } > htab_save_later_pass(f, spapr, -1); > } > > -- > 1.9.1 >
On Wed, Feb 10, 2016 at 10:20:40AM -0800, Jianjun Duan wrote: > htab_save_first_pass could return without finishing its work due to > timeout. The patch checks if another invocation of it is necessary and > will call it in htab_save_complete if necessary. > > Signed-off-by: Jianjun Duan <duanj@linux.vnet.ibm.com> Looks good, applied to ppc-for-2.6 (with a small fix to remove the overly long line). > --- > hw/ppc/spapr.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 6bfb908..f6b6749 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -1317,6 +1317,7 @@ static int htab_save_setup(QEMUFile *f, void *opaque) > static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr, > int64_t max_ns) > { > + bool has_timeout = max_ns != -1; > int htabslots = HTAB_SIZE(spapr) / HASH_PTE_SIZE_64; > int index = spapr->htab_save_index; > int64_t starttime = qemu_clock_get_ns(QEMU_CLOCK_REALTIME); > @@ -1350,7 +1351,7 @@ static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr, > qemu_put_buffer(f, HPTE(spapr->htab, chunkstart), > HASH_PTE_SIZE_64 * n_valid); > > - if ((qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) { > + if (has_timeout && (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) { > break; > } > } > @@ -1503,6 +1504,9 @@ static int htab_save_complete(QEMUFile *f, void *opaque) > close(spapr->htab_fd); > spapr->htab_fd = -1; > } else { > + if (spapr->htab_first_pass) { > + htab_save_first_pass(f, spapr, -1); > + } > htab_save_later_pass(f, spapr, -1); > } >
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 6bfb908..f6b6749 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1317,6 +1317,7 @@ static int htab_save_setup(QEMUFile *f, void *opaque) static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr, int64_t max_ns) { + bool has_timeout = max_ns != -1; int htabslots = HTAB_SIZE(spapr) / HASH_PTE_SIZE_64; int index = spapr->htab_save_index; int64_t starttime = qemu_clock_get_ns(QEMU_CLOCK_REALTIME); @@ -1350,7 +1351,7 @@ static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr, qemu_put_buffer(f, HPTE(spapr->htab, chunkstart), HASH_PTE_SIZE_64 * n_valid); - if ((qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) { + if (has_timeout && (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) { break; } } @@ -1503,6 +1504,9 @@ static int htab_save_complete(QEMUFile *f, void *opaque) close(spapr->htab_fd); spapr->htab_fd = -1; } else { + if (spapr->htab_first_pass) { + htab_save_first_pass(f, spapr, -1); + } htab_save_later_pass(f, spapr, -1); }
htab_save_first_pass could return without finishing its work due to timeout. The patch checks if another invocation of it is necessary and will call it in htab_save_complete if necessary. Signed-off-by: Jianjun Duan <duanj@linux.vnet.ibm.com> --- hw/ppc/spapr.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)