From: Igor Mammedov <imammedo@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Eric Auger <eric.auger@redhat.com>,
qemu-arm <qemu-arm@nongnu.org>,
QEMU Developers <qemu-devel@nongnu.org>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH for-2.13 3/4] arm: always start from first_cpu when registering loader cpu reset callback
Date: Fri, 13 Apr 2018 15:59:01 +0200 [thread overview]
Message-ID: <20180413155901.45a02b95@redhat.com> (raw)
In-Reply-To: <CAFEAcA-AVuHMao5kQUrfEYWpGL0y-CwbuqCA_8ZSZrVbqz9nCg@mail.gmail.com>
On Thu, 12 Apr 2018 19:29:28 +0100
Peter Maydell <peter.maydell@linaro.org> wrote:
> On 12 April 2018 at 17:40, Igor Mammedov <imammedo@redhat.com> wrote:
> > if arm_load_kernel() were passed non first_cpu, QEMU would end up
> > with partially set do_cpu_reset() callback leaving some CPUs without it.
> >
> > Make sure that do_cpu_reset() is registered for all CPUs by enumerating
> > CPUs from first_cpu.
> >
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> > hw/arm/boot.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/hw/arm/boot.c b/hw/arm/boot.c
> > index 2f464ca..2591fee 100644
> > --- a/hw/arm/boot.c
> > +++ b/hw/arm/boot.c
> > @@ -1188,7 +1188,7 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
> > * actually loading a kernel, the handler is also responsible for
> > * arranging that we start it correctly.
> > */
> > - for (cs = CPU(cpu); cs; cs = CPU_NEXT(cs)) {
> > + for (cs = first_cpu; cs; cs = CPU_NEXT(cs)) {
> > qemu_register_reset(do_cpu_reset, ARM_CPU(cs));
> > }
> > }
>
> Definitely a bug fix, so:
> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
>
> I think though that in at least some cases we'll still mishandle
> being passed anything other than first_cpu as the CPU pointer,
> because in do_cpu_reset() we do some checks for "do this if
> cs == first_cpu", on the assumption that first_cpu is the
> primary CPU that we're booting. We should instead I suppose
> be checking against the CPU pointer we're given as the
> arm_load_kernel() argument (which I think do_cpu_reset() can
> get at via info->load_kernel_notifier.cpu).
Agreed,
only that load_kernel_notifier is being removed in 4/4,
but nothing prevents us from adding pointer to arm_boot_info directly.
> We should probably analyse which boards actually pass anything
> other than first_cpu -- I suspect it will end up just being
> the xilinx board which has both A and R profile cores...
Probably,
I've managed to stop myself digging deeper into reset handling for now,
and deal with firmware blobs regeneration first.
I still might have to look back at do_cpu_reset() later
if it proves to be in a way of cpu hotplug but not just yet.
> thanks
> -- PMM
WARNING: multiple messages have this Message-ID (diff)
From: Igor Mammedov <imammedo@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
qemu-arm <qemu-arm@nongnu.org>,
Eric Auger <eric.auger@redhat.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH for-2.13 3/4] arm: always start from first_cpu when registering loader cpu reset callback
Date: Fri, 13 Apr 2018 15:59:01 +0200 [thread overview]
Message-ID: <20180413155901.45a02b95@redhat.com> (raw)
In-Reply-To: <CAFEAcA-AVuHMao5kQUrfEYWpGL0y-CwbuqCA_8ZSZrVbqz9nCg@mail.gmail.com>
On Thu, 12 Apr 2018 19:29:28 +0100
Peter Maydell <peter.maydell@linaro.org> wrote:
> On 12 April 2018 at 17:40, Igor Mammedov <imammedo@redhat.com> wrote:
> > if arm_load_kernel() were passed non first_cpu, QEMU would end up
> > with partially set do_cpu_reset() callback leaving some CPUs without it.
> >
> > Make sure that do_cpu_reset() is registered for all CPUs by enumerating
> > CPUs from first_cpu.
> >
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> > hw/arm/boot.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/hw/arm/boot.c b/hw/arm/boot.c
> > index 2f464ca..2591fee 100644
> > --- a/hw/arm/boot.c
> > +++ b/hw/arm/boot.c
> > @@ -1188,7 +1188,7 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
> > * actually loading a kernel, the handler is also responsible for
> > * arranging that we start it correctly.
> > */
> > - for (cs = CPU(cpu); cs; cs = CPU_NEXT(cs)) {
> > + for (cs = first_cpu; cs; cs = CPU_NEXT(cs)) {
> > qemu_register_reset(do_cpu_reset, ARM_CPU(cs));
> > }
> > }
>
> Definitely a bug fix, so:
> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
>
> I think though that in at least some cases we'll still mishandle
> being passed anything other than first_cpu as the CPU pointer,
> because in do_cpu_reset() we do some checks for "do this if
> cs == first_cpu", on the assumption that first_cpu is the
> primary CPU that we're booting. We should instead I suppose
> be checking against the CPU pointer we're given as the
> arm_load_kernel() argument (which I think do_cpu_reset() can
> get at via info->load_kernel_notifier.cpu).
Agreed,
only that load_kernel_notifier is being removed in 4/4,
but nothing prevents us from adding pointer to arm_boot_info directly.
> We should probably analyse which boards actually pass anything
> other than first_cpu -- I suspect it will end up just being
> the xilinx board which has both A and R profile cores...
Probably,
I've managed to stop myself digging deeper into reset handling for now,
and deal with firmware blobs regeneration first.
I still might have to look back at do_cpu_reset() later
if it proves to be in a way of cpu hotplug but not just yet.
> thanks
> -- PMM
next prev parent reply other threads:[~2018-04-13 13:59 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-12 16:40 [Qemu-arm] [PATCH for-2.13 0/4] arm: isolate and clean up dtb generation Igor Mammedov
2018-04-12 16:40 ` [Qemu-devel] " Igor Mammedov
2018-04-12 16:40 ` [Qemu-arm] [PATCH for-2.13 1/4] arm: reuse arm_boot_address_space() in armv7m_load_kernel() Igor Mammedov
2018-04-12 16:40 ` [Qemu-devel] " Igor Mammedov
2018-04-12 18:22 ` [Qemu-arm] " Peter Maydell
2018-04-12 18:22 ` [Qemu-devel] " Peter Maydell
2018-04-13 13:41 ` [Qemu-arm] " Igor Mammedov
2018-04-13 13:41 ` [Qemu-devel] " Igor Mammedov
2018-04-12 16:40 ` [Qemu-arm] [PATCH for-2.13 2/4] platform-bus-device: use device plug callback instead of machine_done notifier Igor Mammedov
2018-04-12 16:40 ` [Qemu-devel] " Igor Mammedov
2018-04-13 18:00 ` [Qemu-arm] " Auger Eric
2018-04-13 18:00 ` [Qemu-devel] " Auger Eric
2018-04-16 8:00 ` [Qemu-arm] " Igor Mammedov
2018-04-16 8:00 ` [Qemu-devel] " Igor Mammedov
2018-04-16 2:43 ` [Qemu-arm] " David Gibson
2018-04-16 2:43 ` [Qemu-devel] " David Gibson
2018-04-16 8:19 ` [Qemu-arm] " Igor Mammedov
2018-04-16 8:19 ` [Qemu-devel] " Igor Mammedov
2018-04-17 1:15 ` [Qemu-arm] " David Gibson
2018-04-17 1:15 ` [Qemu-devel] " David Gibson
2018-04-17 16:34 ` [Qemu-devel] [PATCH] ppc: e500: switch E500 based machines to full machine definition Igor Mammedov
2018-04-18 9:38 ` David Gibson
2018-04-16 17:25 ` [Qemu-devel] [PATCH for-2.13 2/4] platform-bus-device: use device plug callback instead of machine_done notifier Peter Maydell
2018-04-16 17:25 ` Peter Maydell
2018-04-12 16:40 ` [Qemu-arm] [PATCH for-2.13 3/4] arm: always start from first_cpu when registering loader cpu reset callback Igor Mammedov
2018-04-12 16:40 ` [Qemu-devel] " Igor Mammedov
2018-04-12 18:29 ` [Qemu-arm] " Peter Maydell
2018-04-12 18:29 ` [Qemu-devel] " Peter Maydell
2018-04-13 13:59 ` Igor Mammedov [this message]
2018-04-13 13:59 ` Igor Mammedov
2018-04-16 17:17 ` Peter Maydell
2018-04-16 17:17 ` [Qemu-devel] " Peter Maydell
2018-04-17 11:35 ` Igor Mammedov
2018-04-17 11:35 ` [Qemu-devel] " Igor Mammedov
2018-04-12 16:40 ` [Qemu-arm] [PATCH for-2.13 4/4] arm/boot: split load_dtb() from arm_load_kernel() Igor Mammedov
2018-04-12 16:40 ` [Qemu-devel] " Igor Mammedov
2018-04-16 17:34 ` [Qemu-arm] " Peter Maydell
2018-04-16 17:34 ` [Qemu-devel] " Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180413155901.45a02b95@redhat.com \
--to=imammedo@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=eric.auger@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.