* [Qemu-devel] [PATCH 0/3] sun4u: timer fixups
@ 2015-11-13 17:54 Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields Mark Cave-Ayland
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Mark Cave-Ayland @ 2015-11-13 17:54 UTC (permalink / raw)
To: qemu-devel, atar4qemu
Whilst trying to boot FreeBSD SPARC64, it became apparent that the existing
timer code doesn't behave correctly with respect to the NPT and INT_DIS
bits. This patchset corrects this behaviour and allows FreeBSD SPARC64 boot
to progress further.
Many thanks to Marius Strobl <marius@alchemy.franken.de> for pointing me in
the right direction.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Mark Cave-Ayland (3):
sun4u: split out NPT and INT_DIS into separate CPUTimer fields
sun4u: split NPT and INT_DIS accesses between timer and compare
registers
target-sparc: implement NPT timer bit
hw/sparc64/sun4u.c | 36 +++++++++++++++++++++++-------------
target-sparc/cpu.h | 2 ++
target-sparc/helper.c | 10 ++++++++--
target-sparc/helper.h | 2 +-
target-sparc/translate.c | 18 +++++++++++++++---
5 files changed, 49 insertions(+), 19 deletions(-)
--
1.7.10.4
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields
2015-11-13 17:54 [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Mark Cave-Ayland
@ 2015-11-13 17:54 ` Mark Cave-Ayland
2016-01-08 14:05 ` Peter Maydell
2015-11-13 17:54 ` [Qemu-devel] [PATCH 2/3] sun4u: split NPT and INT_DIS accesses between timer and compare registers Mark Cave-Ayland
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Mark Cave-Ayland @ 2015-11-13 17:54 UTC (permalink / raw)
To: qemu-devel, atar4qemu
Currently there is confusion between use of these bits for the timer and timer
compare registers (while they both have the same value, the behaviour is
different). Split into two separate CPUTimer fields so we can always reference
the correct value.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/sparc64/sun4u.c | 17 +++++++++++++----
target-sparc/cpu.h | 2 ++
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index d6b929c..7153638 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -363,6 +363,8 @@ void cpu_put_timer(QEMUFile *f, CPUTimer *s)
qemu_put_be32s(f, &s->frequency);
qemu_put_be32s(f, &s->disabled);
qemu_put_be64s(f, &s->disabled_mask);
+ qemu_put_be32s(f, &s->npt);
+ qemu_put_be64s(f, &s->npt_mask);
qemu_put_sbe64s(f, &s->clock_offset);
timer_put(f, s->qtimer);
@@ -373,6 +375,8 @@ void cpu_get_timer(QEMUFile *f, CPUTimer *s)
qemu_get_be32s(f, &s->frequency);
qemu_get_be32s(f, &s->disabled);
qemu_get_be64s(f, &s->disabled_mask);
+ qemu_get_be32s(f, &s->npt);
+ qemu_get_be64s(f, &s->npt_mask);
qemu_get_sbe64s(f, &s->clock_offset);
timer_get(f, s->qtimer);
@@ -380,15 +384,17 @@ void cpu_get_timer(QEMUFile *f, CPUTimer *s)
static CPUTimer *cpu_timer_create(const char *name, SPARCCPU *cpu,
QEMUBHFunc *cb, uint32_t frequency,
- uint64_t disabled_mask)
+ uint64_t disabled_mask, uint64_t npt_mask)
{
CPUTimer *timer = g_malloc0(sizeof (CPUTimer));
timer->name = name;
timer->frequency = frequency;
timer->disabled_mask = disabled_mask;
+ timer->npt_mask = npt_mask;
timer->disabled = 1;
+ timer->npt = 1;
timer->clock_offset = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
timer->qtimer = timer_new_ns(QEMU_CLOCK_VIRTUAL, cb, cpu);
@@ -799,13 +805,16 @@ static SPARCCPU *cpu_devinit(const char *cpu_model, const struct hwdef *hwdef)
env = &cpu->env;
env->tick = cpu_timer_create("tick", cpu, tick_irq,
- tick_frequency, TICK_NPT_MASK);
+ tick_frequency, TICK_INT_DIS,
+ TICK_NPT_MASK);
env->stick = cpu_timer_create("stick", cpu, stick_irq,
- stick_frequency, TICK_INT_DIS);
+ stick_frequency, TICK_INT_DIS,
+ TICK_NPT_MASK);
env->hstick = cpu_timer_create("hstick", cpu, hstick_irq,
- hstick_frequency, TICK_INT_DIS);
+ hstick_frequency, TICK_INT_DIS,
+ TICK_NPT_MASK);
reset_info = g_malloc0(sizeof(ResetData));
reset_info->cpu = cpu;
diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h
index 9fa770b..4aa689e 100644
--- a/target-sparc/cpu.h
+++ b/target-sparc/cpu.h
@@ -366,6 +366,8 @@ struct CPUTimer
uint32_t frequency;
uint32_t disabled;
uint64_t disabled_mask;
+ uint32_t npt;
+ uint64_t npt_mask;
int64_t clock_offset;
QEMUTimer *qtimer;
};
--
1.7.10.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 2/3] sun4u: split NPT and INT_DIS accesses between timer and compare registers
2015-11-13 17:54 [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields Mark Cave-Ayland
@ 2015-11-13 17:54 ` Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 3/3] target-sparc: implement NPT timer bit Mark Cave-Ayland
2016-01-05 10:32 ` [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Artyom Tarasenko
3 siblings, 0 replies; 9+ messages in thread
From: Mark Cave-Ayland @ 2015-11-13 17:54 UTC (permalink / raw)
To: qemu-devel, atar4qemu
Accesses to the timer register high bit should only set NPT, whilst accesses
to the timer compare register high bit should only set INT_DIS. This fixes
issues with the timer being unexpectedly disabled whilst trying to boot
FreeBSD SPARC64.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/sparc64/sun4u.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index 7153638..7a433d3 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -500,17 +500,17 @@ static uint64_t timer_to_cpu_ticks(int64_t timer_ticks, uint32_t frequency)
void cpu_tick_set_count(CPUTimer *timer, uint64_t count)
{
- uint64_t real_count = count & ~timer->disabled_mask;
- uint64_t disabled_bit = count & timer->disabled_mask;
+ uint64_t real_count = count & ~timer->npt_mask;
+ uint64_t npt_bit = count & timer->npt_mask;
int64_t vm_clock_offset = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) -
cpu_to_timer_ticks(real_count, timer->frequency);
- TIMER_DPRINTF("%s set_count count=0x%016lx (%s) p=%p\n",
+ TIMER_DPRINTF("%s set_count count=0x%016lx (npt %s) p=%p\n",
timer->name, real_count,
- timer->disabled?"disabled":"enabled", timer);
+ timer->npt ? "disabled" : "enabled", timer);
- timer->disabled = disabled_bit ? 1 : 0;
+ timer->npt = npt_bit ? 1 : 0;
timer->clock_offset = vm_clock_offset;
}
@@ -520,12 +520,13 @@ uint64_t cpu_tick_get_count(CPUTimer *timer)
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - timer->clock_offset,
timer->frequency);
- TIMER_DPRINTF("%s get_count count=0x%016lx (%s) p=%p\n",
+ TIMER_DPRINTF("%s get_count count=0x%016lx (npt %s) p=%p\n",
timer->name, real_count,
- timer->disabled?"disabled":"enabled", timer);
+ timer->npt ? "disabled" : "enabled", timer);
- if (timer->disabled)
- real_count |= timer->disabled_mask;
+ if (timer->npt) {
+ real_count |= timer->npt_mask;
+ }
return real_count;
}
--
1.7.10.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 3/3] target-sparc: implement NPT timer bit
2015-11-13 17:54 [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 2/3] sun4u: split NPT and INT_DIS accesses between timer and compare registers Mark Cave-Ayland
@ 2015-11-13 17:54 ` Mark Cave-Ayland
2016-01-05 10:32 ` [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Artyom Tarasenko
3 siblings, 0 replies; 9+ messages in thread
From: Mark Cave-Ayland @ 2015-11-13 17:54 UTC (permalink / raw)
To: qemu-devel, atar4qemu
If the NPT bit is set in the timer register, all non-supervisor read accesses
to the register should fail with a privilege exception.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
target-sparc/helper.c | 10 ++++++++--
target-sparc/helper.h | 2 +-
target-sparc/translate.c | 18 +++++++++++++++---
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/target-sparc/helper.c b/target-sparc/helper.c
index 4850c7c..6600834 100644
--- a/target-sparc/helper.c
+++ b/target-sparc/helper.c
@@ -51,10 +51,16 @@ void helper_tick_set_count(void *opaque, uint64_t count)
#endif
}
-uint64_t helper_tick_get_count(void *opaque)
+uint64_t helper_tick_get_count(CPUSPARCState *env, void *opaque, int mem_idx)
{
#if !defined(CONFIG_USER_ONLY)
- return cpu_tick_get_count(opaque);
+ CPUTimer *timer = opaque;
+
+ if (timer->npt && mem_idx < MMU_KERNEL_IDX) {
+ helper_raise_exception(env, TT_PRIV_INSN);
+ }
+
+ return cpu_tick_get_count(timer);
#else
return 0;
#endif
diff --git a/target-sparc/helper.h b/target-sparc/helper.h
index 1ad23e8..4374f0d 100644
--- a/target-sparc/helper.h
+++ b/target-sparc/helper.h
@@ -25,7 +25,7 @@ DEF_HELPER_2(set_softint, void, env, i64)
DEF_HELPER_2(clear_softint, void, env, i64)
DEF_HELPER_2(write_softint, void, env, i64)
DEF_HELPER_2(tick_set_count, void, ptr, i64)
-DEF_HELPER_1(tick_get_count, i64, ptr)
+DEF_HELPER_3(tick_get_count, i64, env, ptr, int)
DEF_HELPER_2(tick_set_limit, void, ptr, i64)
#endif
#if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64)
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 41a3319..a3f1edb 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -2708,12 +2708,16 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
case 0x4: /* V9 rdtick */
{
TCGv_ptr r_tickptr;
+ TCGv_i32 r_const;
r_tickptr = tcg_temp_new_ptr();
+ r_const = tcg_const_i32(dc->mem_idx);
tcg_gen_ld_ptr(r_tickptr, cpu_env,
offsetof(CPUSPARCState, tick));
- gen_helper_tick_get_count(cpu_dst, r_tickptr);
+ gen_helper_tick_get_count(cpu_dst, cpu_env, r_tickptr,
+ r_const);
tcg_temp_free_ptr(r_tickptr);
+ tcg_temp_free_i32(r_const);
gen_store_gpr(dc, rd, cpu_dst);
}
break;
@@ -2750,12 +2754,16 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
case 0x18: /* System tick */
{
TCGv_ptr r_tickptr;
+ TCGv_i32 r_const;
r_tickptr = tcg_temp_new_ptr();
+ r_const = tcg_const_i32(dc->mem_idx);
tcg_gen_ld_ptr(r_tickptr, cpu_env,
offsetof(CPUSPARCState, stick));
- gen_helper_tick_get_count(cpu_dst, r_tickptr);
+ gen_helper_tick_get_count(cpu_dst, cpu_env, r_tickptr,
+ r_const);
tcg_temp_free_ptr(r_tickptr);
+ tcg_temp_free_i32(r_const);
gen_store_gpr(dc, rd, cpu_dst);
}
break;
@@ -2863,12 +2871,16 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
case 4: // tick
{
TCGv_ptr r_tickptr;
+ TCGv_i32 r_const;
r_tickptr = tcg_temp_new_ptr();
+ r_const = tcg_const_i32(dc->mem_idx);
tcg_gen_ld_ptr(r_tickptr, cpu_env,
offsetof(CPUSPARCState, tick));
- gen_helper_tick_get_count(cpu_tmp0, r_tickptr);
+ gen_helper_tick_get_count(cpu_tmp0, cpu_env,
+ r_tickptr, r_const);
tcg_temp_free_ptr(r_tickptr);
+ tcg_temp_free_i32(r_const);
}
break;
case 5: // tba
--
1.7.10.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH 0/3] sun4u: timer fixups
2015-11-13 17:54 [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Mark Cave-Ayland
` (2 preceding siblings ...)
2015-11-13 17:54 ` [Qemu-devel] [PATCH 3/3] target-sparc: implement NPT timer bit Mark Cave-Ayland
@ 2016-01-05 10:32 ` Artyom Tarasenko
3 siblings, 0 replies; 9+ messages in thread
From: Artyom Tarasenko @ 2016-01-05 10:32 UTC (permalink / raw)
To: Mark Cave-Ayland; +Cc: qemu-devel
Looks good.
Reviewed-By: Artyom Tarasenko <atar4qemu@gmail.com>
On Fri, Nov 13, 2015 at 6:54 PM, Mark Cave-Ayland
<mark.cave-ayland@ilande.co.uk> wrote:
> Whilst trying to boot FreeBSD SPARC64, it became apparent that the existing
> timer code doesn't behave correctly with respect to the NPT and INT_DIS
> bits. This patchset corrects this behaviour and allows FreeBSD SPARC64 boot
> to progress further.
>
> Many thanks to Marius Strobl <marius@alchemy.franken.de> for pointing me in
> the right direction.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>
> Mark Cave-Ayland (3):
> sun4u: split out NPT and INT_DIS into separate CPUTimer fields
> sun4u: split NPT and INT_DIS accesses between timer and compare
> registers
> target-sparc: implement NPT timer bit
>
> hw/sparc64/sun4u.c | 36 +++++++++++++++++++++++-------------
> target-sparc/cpu.h | 2 ++
> target-sparc/helper.c | 10 ++++++++--
> target-sparc/helper.h | 2 +-
> target-sparc/translate.c | 18 +++++++++++++++---
> 5 files changed, 49 insertions(+), 19 deletions(-)
>
> --
> 1.7.10.4
>
--
Regards,
Artyom Tarasenko
SPARC and PPC PReP under qemu blog: http://tyom.blogspot.com/search/label/qemu
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields
2015-11-13 17:54 ` [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields Mark Cave-Ayland
@ 2016-01-08 14:05 ` Peter Maydell
2016-01-08 14:34 ` Mark Cave-Ayland
0 siblings, 1 reply; 9+ messages in thread
From: Peter Maydell @ 2016-01-08 14:05 UTC (permalink / raw)
To: Mark Cave-Ayland; +Cc: QEMU Developers, Artyom Tarasenko
On 13 November 2015 at 17:54, Mark Cave-Ayland
<mark.cave-ayland@ilande.co.uk> wrote:
> Currently there is confusion between use of these bits for the timer and timer
> compare registers (while they both have the same value, the behaviour is
> different). Split into two separate CPUTimer fields so we can always reference
> the correct value.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
> hw/sparc64/sun4u.c | 17 +++++++++++++----
> target-sparc/cpu.h | 2 ++
> 2 files changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
> index d6b929c..7153638 100644
> --- a/hw/sparc64/sun4u.c
> +++ b/hw/sparc64/sun4u.c
> @@ -363,6 +363,8 @@ void cpu_put_timer(QEMUFile *f, CPUTimer *s)
> qemu_put_be32s(f, &s->frequency);
> qemu_put_be32s(f, &s->disabled);
> qemu_put_be64s(f, &s->disabled_mask);
> + qemu_put_be32s(f, &s->npt);
> + qemu_put_be64s(f, &s->npt_mask);
> qemu_put_sbe64s(f, &s->clock_offset);
>
> timer_put(f, s->qtimer);
> @@ -373,6 +375,8 @@ void cpu_get_timer(QEMUFile *f, CPUTimer *s)
> qemu_get_be32s(f, &s->frequency);
> qemu_get_be32s(f, &s->disabled);
> qemu_get_be64s(f, &s->disabled_mask);
> + qemu_get_be32s(f, &s->npt);
> + qemu_get_be64s(f, &s->npt_mask);
> qemu_get_sbe64s(f, &s->clock_offset);
>
> timer_get(f, s->qtimer);
Hi. I was just rebasing my sparc convert-to-vmstate patchset, and I
noticed this patch due to a conflict. This change breaks migration
and vmstate save/restore compatibility for these boards.
Making the field version-dependent is probably a bit awkward at
this point because these are just subfields in the overall CPU
state and share its version number (which in turn is shared with
the 32-bit CPUs).
Not sure what you want to do here?
thanks
-- PMM
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields
2016-01-08 14:05 ` Peter Maydell
@ 2016-01-08 14:34 ` Mark Cave-Ayland
2016-01-08 14:55 ` Peter Maydell
0 siblings, 1 reply; 9+ messages in thread
From: Mark Cave-Ayland @ 2016-01-08 14:34 UTC (permalink / raw)
To: Peter Maydell; +Cc: QEMU Developers, Artyom Tarasenko
On 08/01/16 14:05, Peter Maydell wrote:
> On 13 November 2015 at 17:54, Mark Cave-Ayland
> <mark.cave-ayland@ilande.co.uk> wrote:
>> Currently there is confusion between use of these bits for the timer and timer
>> compare registers (while they both have the same value, the behaviour is
>> different). Split into two separate CPUTimer fields so we can always reference
>> the correct value.
>>
>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>> ---
>> hw/sparc64/sun4u.c | 17 +++++++++++++----
>> target-sparc/cpu.h | 2 ++
>> 2 files changed, 15 insertions(+), 4 deletions(-)
>>
>> diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
>> index d6b929c..7153638 100644
>> --- a/hw/sparc64/sun4u.c
>> +++ b/hw/sparc64/sun4u.c
>> @@ -363,6 +363,8 @@ void cpu_put_timer(QEMUFile *f, CPUTimer *s)
>> qemu_put_be32s(f, &s->frequency);
>> qemu_put_be32s(f, &s->disabled);
>> qemu_put_be64s(f, &s->disabled_mask);
>> + qemu_put_be32s(f, &s->npt);
>> + qemu_put_be64s(f, &s->npt_mask);
>> qemu_put_sbe64s(f, &s->clock_offset);
>>
>> timer_put(f, s->qtimer);
>> @@ -373,6 +375,8 @@ void cpu_get_timer(QEMUFile *f, CPUTimer *s)
>> qemu_get_be32s(f, &s->frequency);
>> qemu_get_be32s(f, &s->disabled);
>> qemu_get_be64s(f, &s->disabled_mask);
>> + qemu_get_be32s(f, &s->npt);
>> + qemu_get_be64s(f, &s->npt_mask);
>> qemu_get_sbe64s(f, &s->clock_offset);
>>
>> timer_get(f, s->qtimer);
>
> Hi. I was just rebasing my sparc convert-to-vmstate patchset, and I
> noticed this patch due to a conflict. This change breaks migration
> and vmstate save/restore compatibility for these boards.
> Making the field version-dependent is probably a bit awkward at
> this point because these are just subfields in the overall CPU
> state and share its version number (which in turn is shared with
> the 32-bit CPUs).
>
> Not sure what you want to do here?
Hi Peter,
I'm not particularly worried about sun4u for the moment as there are
already other reasons why migration would fail, e.g. no
VMStateDescription for storing PCI interrupt state in the apb host bridge.
Last time I checked sun4m migration appeared to work under some very
light testing, so as long as this behaviour is preserved then I don't
see a problem.
ATB,
Mark.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields
2016-01-08 14:34 ` Mark Cave-Ayland
@ 2016-01-08 14:55 ` Peter Maydell
2016-01-08 15:13 ` Mark Cave-Ayland
0 siblings, 1 reply; 9+ messages in thread
From: Peter Maydell @ 2016-01-08 14:55 UTC (permalink / raw)
To: Mark Cave-Ayland; +Cc: QEMU Developers, Artyom Tarasenko
On 8 January 2016 at 14:34, Mark Cave-Ayland
<mark.cave-ayland@ilande.co.uk> wrote:
> I'm not particularly worried about sun4u for the moment as there are
> already other reasons why migration would fail, e.g. no
> VMStateDescription for storing PCI interrupt state in the apb host bridge.
>
> Last time I checked sun4m migration appeared to work under some very
> light testing, so as long as this behaviour is preserved then I don't
> see a problem.
OK. Does this apply to all 64-bit SPARC CPUs? (There are some
things I can simplify in the CPU migration code if we can break
64-bit migration.)
thanks
-- PMM
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields
2016-01-08 14:55 ` Peter Maydell
@ 2016-01-08 15:13 ` Mark Cave-Ayland
0 siblings, 0 replies; 9+ messages in thread
From: Mark Cave-Ayland @ 2016-01-08 15:13 UTC (permalink / raw)
To: Peter Maydell; +Cc: QEMU Developers, Artyom Tarasenko
On 08/01/16 14:55, Peter Maydell wrote:
> On 8 January 2016 at 14:34, Mark Cave-Ayland
> <mark.cave-ayland@ilande.co.uk> wrote:
>> I'm not particularly worried about sun4u for the moment as there are
>> already other reasons why migration would fail, e.g. no
>> VMStateDescription for storing PCI interrupt state in the apb host bridge.
>>
>> Last time I checked sun4m migration appeared to work under some very
>> light testing, so as long as this behaviour is preserved then I don't
>> see a problem.
>
> OK. Does this apply to all 64-bit SPARC CPUs? (There are some
> things I can simplify in the CPU migration code if we can break
> 64-bit migration.)
Yes, seems reasonable to me - I'm fairly sure that sun4u migration is
incomplete so I'd be amazed if anyone were successfully using this out
in the field.
ATB,
Mark.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-01-08 15:13 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-13 17:54 [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 1/3] sun4u: split out NPT and INT_DIS into separate CPUTimer fields Mark Cave-Ayland
2016-01-08 14:05 ` Peter Maydell
2016-01-08 14:34 ` Mark Cave-Ayland
2016-01-08 14:55 ` Peter Maydell
2016-01-08 15:13 ` Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 2/3] sun4u: split NPT and INT_DIS accesses between timer and compare registers Mark Cave-Ayland
2015-11-13 17:54 ` [Qemu-devel] [PATCH 3/3] target-sparc: implement NPT timer bit Mark Cave-Ayland
2016-01-05 10:32 ` [Qemu-devel] [PATCH 0/3] sun4u: timer fixups Artyom Tarasenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).