[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH 1/4] spapr: Fix bug in h_signal_sys_reset()
From: |
Greg Kurz |
Subject: |
Re: [Qemu-ppc] [PATCH 1/4] spapr: Fix bug in h_signal_sys_reset() |
Date: |
Thu, 3 Aug 2017 14:37:15 +0200 |
On Thu, 3 Aug 2017 16:28:27 +1000
Sam Bobroff <address@hidden> wrote:
> The unicast case in h_signal_sys_reset() seems to be broken:
> rather than selecting the target CPU, it looks like it will pick
> either the first CPU or fail to find one at all.
>
> Fix it by using the search function rather than open coding the
> search.
>
Heh the open coded search is using cpu where it should have been using
POWERPC_CPU(cs) => it can only succeed if a the vCPU is signalling itself.
> This was found by inspection; the code appears to be unused because
> the Linux kernel only uses the broadcast target.
>
> Signed-off-by: Sam Bobroff <address@hidden>
Reviewed-by: Greg Kurz <address@hidden>
> ---
> hw/ppc/spapr_hcall.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> index 72ea5a8247..07b3da8dc4 100644
> --- a/hw/ppc/spapr_hcall.c
> +++ b/hw/ppc/spapr_hcall.c
> @@ -1431,11 +1431,10 @@ static target_ulong h_signal_sys_reset(PowerPCCPU
> *cpu,
>
> } else {
> /* Unicast */
> - CPU_FOREACH(cs) {
> - if (cpu->cpu_dt_id == target) {
> - run_on_cpu(cs, spapr_do_system_reset_on_cpu,
> RUN_ON_CPU_NULL);
> - return H_SUCCESS;
> - }
> + cs = CPU(ppc_get_vcpu_by_dt_id(target));
> + if (cs) {
> + run_on_cpu(cs, spapr_do_system_reset_on_cpu, RUN_ON_CPU_NULL);
> + return H_SUCCESS;
> }
> return H_PARAMETER;
> }
pgpslfhLl7W4_.pgp
Description: OpenPGP digital signature