* [Qemu-devel] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY
@ 2018-12-17 14:00 Laurent Vivier
2018-12-18 4:29 ` David Gibson
0 siblings, 1 reply; 7+ messages in thread
From: Laurent Vivier @ 2018-12-17 14:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-ppc, David Gibson, Laurent Vivier
H_HOME_NODE_ASSOCIATIVITY H-Call returns the associativity domain
designation associated with the identifier input parameter.
Remove the warning message from the kernel:
VPHN is not supported. Disabling polling..
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
Based-on: <20181213040126.6768-1-david@gibson.dropbear.id.au>
"[PULL 00/27] ppc-for-4.0 queue 20181213"
hw/ppc/spapr_hcall.c | 39 +++++++++++++++++++++++++++++++++++++++
include/hw/ppc/spapr.h | 1 +
2 files changed, 40 insertions(+)
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index 78fecc8fe9..454ec594fd 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -1663,6 +1663,41 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
return H_SUCCESS;
}
+static target_ulong h_home_node_associativity(PowerPCCPU *cpu,
+ sPAPRMachineState *spapr,
+ target_ulong opcode,
+ target_ulong *args)
+{
+ target_ulong flags = args[0];
+ target_ulong procno = args[1];
+ PowerPCCPU *tcpu;
+ int idx;
+
+ /* only support procno from H_REGISTER_VPA */
+ if ((flags & 0x1) == 0) {
+ return H_PARAMETER;
+ }
+
+ tcpu = spapr_find_cpu(procno);
+ if (tcpu == NULL) {
+ return H_P2;
+ }
+
+ /* sequence is the same as in the "ibm,associativity" property */
+
+ idx = 0;
+#define ASSOCIATIVITY(a, b) (((uint64_t)a << 32) | ((uint64_t)b & 0xffffffff))
+ args[idx++] = ASSOCIATIVITY(0, 0);
+ args[idx++] = ASSOCIATIVITY(0, tcpu->node_id);
+ args[idx++] = ASSOCIATIVITY(procno, -1);
+ for ( ; idx < 6; idx++) {
+ args[idx] = -1;
+ }
+#undef ASSOCIATIVITY
+
+ return H_SUCCESS;
+}
+
static target_ulong h_get_cpu_characteristics(PowerPCCPU *cpu,
sPAPRMachineState *spapr,
target_ulong opcode,
@@ -1864,6 +1899,10 @@ static void hypercall_register_types(void)
spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
spapr_register_hypercall(KVMPPC_H_UPDATE_DT, h_update_dt);
+
+ /* Virtual Processor Home Node */
+ spapr_register_hypercall(H_HOME_NODE_ASSOCIATIVITY,
+ h_home_node_associativity);
}
type_init(hypercall_register_types)
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index b1a2515107..eb13e2b614 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -447,6 +447,7 @@ struct sPAPRMachineState {
#define H_GET_EM_PARMS 0x2B8
#define H_SET_MPP 0x2D0
#define H_GET_MPP 0x2D4
+#define H_HOME_NODE_ASSOCIATIVITY 0x2EC
#define H_XIRR_X 0x2FC
#define H_RANDOM 0x300
#define H_SET_MODE 0x31C
--
2.19.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY
2018-12-17 14:00 [Qemu-devel] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY Laurent Vivier
@ 2018-12-18 4:29 ` David Gibson
2018-12-18 7:50 ` Laurent Vivier
0 siblings, 1 reply; 7+ messages in thread
From: David Gibson @ 2018-12-18 4:29 UTC (permalink / raw)
To: Laurent Vivier, Benjamin Herrenschmidt, Paul Mackerras
Cc: qemu-devel, qemu-ppc
[-- Attachment #1: Type: text/plain, Size: 3709 bytes --]
On Mon, Dec 17, 2018 at 03:00:55PM +0100, Laurent Vivier wrote:
> H_HOME_NODE_ASSOCIATIVITY H-Call returns the associativity domain
> designation associated with the identifier input parameter.
>
> Remove the warning message from the kernel:
> VPHN is not supported. Disabling polling..
>
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
From the looks of PAPR, I suspect this call isn't of much use outside
PowerVM guests, though it probably wouldn't do any harm.
BenH, Paulus, any thoughts?
One nit in implementation: if you implement this hcall, it's supposed
to be advertised by adding hcall-vphn to ibm,hypertas-functions.
> ---
> Based-on: <20181213040126.6768-1-david@gibson.dropbear.id.au>
> "[PULL 00/27] ppc-for-4.0 queue 20181213"
>
> hw/ppc/spapr_hcall.c | 39 +++++++++++++++++++++++++++++++++++++++
> include/hw/ppc/spapr.h | 1 +
> 2 files changed, 40 insertions(+)
>
> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> index 78fecc8fe9..454ec594fd 100644
> --- a/hw/ppc/spapr_hcall.c
> +++ b/hw/ppc/spapr_hcall.c
> @@ -1663,6 +1663,41 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
> return H_SUCCESS;
> }
>
> +static target_ulong h_home_node_associativity(PowerPCCPU *cpu,
> + sPAPRMachineState *spapr,
> + target_ulong opcode,
> + target_ulong *args)
> +{
> + target_ulong flags = args[0];
> + target_ulong procno = args[1];
> + PowerPCCPU *tcpu;
> + int idx;
> +
> + /* only support procno from H_REGISTER_VPA */
> + if ((flags & 0x1) == 0) {
> + return H_PARAMETER;
> + }
> +
> + tcpu = spapr_find_cpu(procno);
> + if (tcpu == NULL) {
> + return H_P2;
> + }
> +
> + /* sequence is the same as in the "ibm,associativity" property */
> +
> + idx = 0;
> +#define ASSOCIATIVITY(a, b) (((uint64_t)a << 32) | ((uint64_t)b & 0xffffffff))
> + args[idx++] = ASSOCIATIVITY(0, 0);
> + args[idx++] = ASSOCIATIVITY(0, tcpu->node_id);
> + args[idx++] = ASSOCIATIVITY(procno, -1);
> + for ( ; idx < 6; idx++) {
> + args[idx] = -1;
> + }
> +#undef ASSOCIATIVITY
> +
> + return H_SUCCESS;
> +}
> +
> static target_ulong h_get_cpu_characteristics(PowerPCCPU *cpu,
> sPAPRMachineState *spapr,
> target_ulong opcode,
> @@ -1864,6 +1899,10 @@ static void hypercall_register_types(void)
> spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
>
> spapr_register_hypercall(KVMPPC_H_UPDATE_DT, h_update_dt);
> +
> + /* Virtual Processor Home Node */
> + spapr_register_hypercall(H_HOME_NODE_ASSOCIATIVITY,
> + h_home_node_associativity);
> }
>
> type_init(hypercall_register_types)
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index b1a2515107..eb13e2b614 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -447,6 +447,7 @@ struct sPAPRMachineState {
> #define H_GET_EM_PARMS 0x2B8
> #define H_SET_MPP 0x2D0
> #define H_GET_MPP 0x2D4
> +#define H_HOME_NODE_ASSOCIATIVITY 0x2EC
> #define H_XIRR_X 0x2FC
> #define H_RANDOM 0x300
> #define H_SET_MODE 0x31C
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY
2018-12-18 4:29 ` David Gibson
@ 2018-12-18 7:50 ` Laurent Vivier
2018-12-18 9:23 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
0 siblings, 1 reply; 7+ messages in thread
From: Laurent Vivier @ 2018-12-18 7:50 UTC (permalink / raw)
To: David Gibson, Benjamin Herrenschmidt, Paul Mackerras; +Cc: qemu-devel, qemu-ppc
On 18/12/2018 05:29, David Gibson wrote:
> On Mon, Dec 17, 2018 at 03:00:55PM +0100, Laurent Vivier wrote:
>> H_HOME_NODE_ASSOCIATIVITY H-Call returns the associativity domain
>> designation associated with the identifier input parameter.
>>
>> Remove the warning message from the kernel:
>> VPHN is not supported. Disabling polling..
>>
>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>
> From the looks of PAPR, I suspect this call isn't of much use outside
> PowerVM guests, though it probably wouldn't do any harm.
This call is used by the kernel to get the node id of a CPU on hotplug
and fixes a crash when we hotplug a CPU in a memory-less/CPU-less node
where this information is missing (not initialized from the device-tree).
> BenH, Paulus, any thoughts?
>
> One nit in implementation: if you implement this hcall, it's supposed
> to be advertised by adding hcall-vphn to ibm,hypertas-functions.
ok in v2.
Thanks,
Laurent
>> ---
>> Based-on: <20181213040126.6768-1-david@gibson.dropbear.id.au>
>> "[PULL 00/27] ppc-for-4.0 queue 20181213"
>>
>> hw/ppc/spapr_hcall.c | 39 +++++++++++++++++++++++++++++++++++++++
>> include/hw/ppc/spapr.h | 1 +
>> 2 files changed, 40 insertions(+)
>>
>> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
>> index 78fecc8fe9..454ec594fd 100644
>> --- a/hw/ppc/spapr_hcall.c
>> +++ b/hw/ppc/spapr_hcall.c
>> @@ -1663,6 +1663,41 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
>> return H_SUCCESS;
>> }
>>
>> +static target_ulong h_home_node_associativity(PowerPCCPU *cpu,
>> + sPAPRMachineState *spapr,
>> + target_ulong opcode,
>> + target_ulong *args)
>> +{
>> + target_ulong flags = args[0];
>> + target_ulong procno = args[1];
>> + PowerPCCPU *tcpu;
>> + int idx;
>> +
>> + /* only support procno from H_REGISTER_VPA */
>> + if ((flags & 0x1) == 0) {
>> + return H_PARAMETER;
>> + }
>> +
>> + tcpu = spapr_find_cpu(procno);
>> + if (tcpu == NULL) {
>> + return H_P2;
>> + }
>> +
>> + /* sequence is the same as in the "ibm,associativity" property */
>> +
>> + idx = 0;
>> +#define ASSOCIATIVITY(a, b) (((uint64_t)a << 32) | ((uint64_t)b & 0xffffffff))
>> + args[idx++] = ASSOCIATIVITY(0, 0);
>> + args[idx++] = ASSOCIATIVITY(0, tcpu->node_id);
>> + args[idx++] = ASSOCIATIVITY(procno, -1);
>> + for ( ; idx < 6; idx++) {
>> + args[idx] = -1;
>> + }
>> +#undef ASSOCIATIVITY
>> +
>> + return H_SUCCESS;
>> +}
>> +
>> static target_ulong h_get_cpu_characteristics(PowerPCCPU *cpu,
>> sPAPRMachineState *spapr,
>> target_ulong opcode,
>> @@ -1864,6 +1899,10 @@ static void hypercall_register_types(void)
>> spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
>>
>> spapr_register_hypercall(KVMPPC_H_UPDATE_DT, h_update_dt);
>> +
>> + /* Virtual Processor Home Node */
>> + spapr_register_hypercall(H_HOME_NODE_ASSOCIATIVITY,
>> + h_home_node_associativity);
>> }
>>
>> type_init(hypercall_register_types)
>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>> index b1a2515107..eb13e2b614 100644
>> --- a/include/hw/ppc/spapr.h
>> +++ b/include/hw/ppc/spapr.h
>> @@ -447,6 +447,7 @@ struct sPAPRMachineState {
>> #define H_GET_EM_PARMS 0x2B8
>> #define H_SET_MPP 0x2D0
>> #define H_GET_MPP 0x2D4
>> +#define H_HOME_NODE_ASSOCIATIVITY 0x2EC
>> #define H_XIRR_X 0x2FC
>> #define H_RANDOM 0x300
>> #define H_SET_MODE 0x31C
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY
2018-12-18 7:50 ` Laurent Vivier
@ 2018-12-18 9:23 ` Greg Kurz
2018-12-18 10:00 ` Laurent Vivier
0 siblings, 1 reply; 7+ messages in thread
From: Greg Kurz @ 2018-12-18 9:23 UTC (permalink / raw)
To: Laurent Vivier
Cc: David Gibson, Benjamin Herrenschmidt, Paul Mackerras, qemu-ppc,
qemu-devel
On Tue, 18 Dec 2018 08:50:00 +0100
Laurent Vivier <lvivier@redhat.com> wrote:
> On 18/12/2018 05:29, David Gibson wrote:
> > On Mon, Dec 17, 2018 at 03:00:55PM +0100, Laurent Vivier wrote:
> >> H_HOME_NODE_ASSOCIATIVITY H-Call returns the associativity domain
> >> designation associated with the identifier input parameter.
> >>
> >> Remove the warning message from the kernel:
> >> VPHN is not supported. Disabling polling..
> >>
> >> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> >
> > From the looks of PAPR, I suspect this call isn't of much use outside
> > PowerVM guests, though it probably wouldn't do any harm.
>
> This call is used by the kernel to get the node id of a CPU on hotplug
> and fixes a crash when we hotplug a CPU in a memory-less/CPU-less node
> where this information is missing (not initialized from the device-tree).
>
So this patch isn't just about removing the warning message from the kernel
but about fixing an actual crash ?
I ask because if it's only about the warning, why does the kernel call
H_HOME_NODE_ASSOCIATIVITY when hcall-vphn isn't advertised ? Especially,
the polling for topology changes is only started if hcall-vphn is present:
if (firmware_has_feature(FW_FEATURE_VPHN) &&
lppaca_shared_proc(get_lppaca())) {
if (!vphn_enabled) {
vphn_enabled = 1;
setup_cpu_associativity_change_counters();
timer_setup(&topology_timer, topology_timer_fn,
TIMER_DEFERRABLE);
reset_topology_timer();
}
}
It thus seems wrong to emit the "Disable polling.." warning for something
that was never enabled in the first place, doesn't it ?
On the other hand, if this really needed to avoid a crash, I guess you
should provide some more details.
> > BenH, Paulus, any thoughts?
> >
> > One nit in implementation: if you implement this hcall, it's supposed
> > to be advertised by adding hcall-vphn to ibm,hypertas-functions.
> ok in v2.
>
> Thanks,
> Laurent
>
> >> ---
> >> Based-on: <20181213040126.6768-1-david@gibson.dropbear.id.au>
> >> "[PULL 00/27] ppc-for-4.0 queue 20181213"
> >>
> >> hw/ppc/spapr_hcall.c | 39 +++++++++++++++++++++++++++++++++++++++
> >> include/hw/ppc/spapr.h | 1 +
> >> 2 files changed, 40 insertions(+)
> >>
> >> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> >> index 78fecc8fe9..454ec594fd 100644
> >> --- a/hw/ppc/spapr_hcall.c
> >> +++ b/hw/ppc/spapr_hcall.c
> >> @@ -1663,6 +1663,41 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
> >> return H_SUCCESS;
> >> }
> >>
> >> +static target_ulong h_home_node_associativity(PowerPCCPU *cpu,
> >> + sPAPRMachineState *spapr,
> >> + target_ulong opcode,
> >> + target_ulong *args)
> >> +{
> >> + target_ulong flags = args[0];
> >> + target_ulong procno = args[1];
> >> + PowerPCCPU *tcpu;
> >> + int idx;
> >> +
> >> + /* only support procno from H_REGISTER_VPA */
> >> + if ((flags & 0x1) == 0) {
> >> + return H_PARAMETER;
> >> + }
LoPAPR says that the guest can pass exactly 0x1 or 0x2 in flags. The
above check should then rather be flags == 0x1.
Also, even if linux only seems to call this with 0x1, this is a
limitation from a LoPAPR standpoint. Not sure H_PARAMETER is the
appropriate return value if flags is 0x2 since the guest did
nothing wrong... I'd rather return H_FUNCTION in this case.
> >> +
> >> + tcpu = spapr_find_cpu(procno);
> >> + if (tcpu == NULL) {
> >> + return H_P2;
> >> + }
> >> +
> >> + /* sequence is the same as in the "ibm,associativity" property */
> >> +
> >> + idx = 0;
> >> +#define ASSOCIATIVITY(a, b) (((uint64_t)a << 32) | ((uint64_t)b & 0xffffffff))
> >> + args[idx++] = ASSOCIATIVITY(0, 0);
> >> + args[idx++] = ASSOCIATIVITY(0, tcpu->node_id);
> >> + args[idx++] = ASSOCIATIVITY(procno, -1);
> >> + for ( ; idx < 6; idx++) {
> >> + args[idx] = -1;
> >> + }
> >> +#undef ASSOCIATIVITY
> >> +
> >> + return H_SUCCESS;
> >> +}
> >> +
> >> static target_ulong h_get_cpu_characteristics(PowerPCCPU *cpu,
> >> sPAPRMachineState *spapr,
> >> target_ulong opcode,
> >> @@ -1864,6 +1899,10 @@ static void hypercall_register_types(void)
> >> spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
> >>
> >> spapr_register_hypercall(KVMPPC_H_UPDATE_DT, h_update_dt);
> >> +
> >> + /* Virtual Processor Home Node */
> >> + spapr_register_hypercall(H_HOME_NODE_ASSOCIATIVITY,
> >> + h_home_node_associativity);
> >> }
> >>
> >> type_init(hypercall_register_types)
> >> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> >> index b1a2515107..eb13e2b614 100644
> >> --- a/include/hw/ppc/spapr.h
> >> +++ b/include/hw/ppc/spapr.h
> >> @@ -447,6 +447,7 @@ struct sPAPRMachineState {
> >> #define H_GET_EM_PARMS 0x2B8
> >> #define H_SET_MPP 0x2D0
> >> #define H_GET_MPP 0x2D4
> >> +#define H_HOME_NODE_ASSOCIATIVITY 0x2EC
> >> #define H_XIRR_X 0x2FC
> >> #define H_RANDOM 0x300
> >> #define H_SET_MODE 0x31C
> >
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY
2018-12-18 9:23 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
@ 2018-12-18 10:00 ` Laurent Vivier
2018-12-18 10:50 ` Greg Kurz
0 siblings, 1 reply; 7+ messages in thread
From: Laurent Vivier @ 2018-12-18 10:00 UTC (permalink / raw)
To: Greg Kurz
Cc: David Gibson, Benjamin Herrenschmidt, Paul Mackerras, qemu-ppc,
qemu-devel
On 18/12/2018 10:23, Greg Kurz wrote:
> On Tue, 18 Dec 2018 08:50:00 +0100
> Laurent Vivier <lvivier@redhat.com> wrote:
>
>> On 18/12/2018 05:29, David Gibson wrote:
>>> On Mon, Dec 17, 2018 at 03:00:55PM +0100, Laurent Vivier wrote:
>>>> H_HOME_NODE_ASSOCIATIVITY H-Call returns the associativity domain
>>>> designation associated with the identifier input parameter.
>>>>
>>>> Remove the warning message from the kernel:
>>>> VPHN is not supported. Disabling polling..
>>>>
>>>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>>>
>>> From the looks of PAPR, I suspect this call isn't of much use outside
>>> PowerVM guests, though it probably wouldn't do any harm.
>>
>> This call is used by the kernel to get the node id of a CPU on hotplug
>> and fixes a crash when we hotplug a CPU in a memory-less/CPU-less node
>> where this information is missing (not initialized from the device-tree).
>>
>
> So this patch isn't just about removing the warning message from the kernel
> but about fixing an actual crash ?
Yes, I updated the message but sent the wrong e-mail.
> I ask because if it's only about the warning, why does the kernel call
> H_HOME_NODE_ASSOCIATIVITY when hcall-vphn isn't advertised ? Especially,
> the polling for topology changes is only started if hcall-vphn is present:
>
> if (firmware_has_feature(FW_FEATURE_VPHN) &&
> lppaca_shared_proc(get_lppaca())) {
> if (!vphn_enabled) {
> vphn_enabled = 1;
> setup_cpu_associativity_change_counters();
> timer_setup(&topology_timer, topology_timer_fn,
> TIMER_DEFERRABLE);
> reset_topology_timer();
> }
> }
>
> It thus seems wrong to emit the "Disable polling.." warning for something
> that was never enabled in the first place, doesn't it ?
It's unconditionally called from find_and_online_cpu_nid() that is used
to plug a CPU in a node that is not already online.
> On the other hand, if this really needed to avoid a crash, I guess you
> should provide some more details.
I agree.
>>> BenH, Paulus, any thoughts?
>>>
>>> One nit in implementation: if you implement this hcall, it's supposed
>>> to be advertised by adding hcall-vphn to ibm,hypertas-functions.
>> ok in v2.
>>
>> Thanks,
>> Laurent
>>
>>>> ---
>>>> Based-on: <20181213040126.6768-1-david@gibson.dropbear.id.au>
>>>> "[PULL 00/27] ppc-for-4.0 queue 20181213"
>>>>
>>>> hw/ppc/spapr_hcall.c | 39 +++++++++++++++++++++++++++++++++++++++
>>>> include/hw/ppc/spapr.h | 1 +
>>>> 2 files changed, 40 insertions(+)
>>>>
>>>> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
>>>> index 78fecc8fe9..454ec594fd 100644
>>>> --- a/hw/ppc/spapr_hcall.c
>>>> +++ b/hw/ppc/spapr_hcall.c
>>>> @@ -1663,6 +1663,41 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
>>>> return H_SUCCESS;
>>>> }
>>>>
>>>> +static target_ulong h_home_node_associativity(PowerPCCPU *cpu,
>>>> + sPAPRMachineState *spapr,
>>>> + target_ulong opcode,
>>>> + target_ulong *args)
>>>> +{
>>>> + target_ulong flags = args[0];
>>>> + target_ulong procno = args[1];
>>>> + PowerPCCPU *tcpu;
>>>> + int idx;
>>>> +
>>>> + /* only support procno from H_REGISTER_VPA */
>>>> + if ((flags & 0x1) == 0) {
>>>> + return H_PARAMETER;
>>>> + }
>
> LoPAPR says that the guest can pass exactly 0x1 or 0x2 in flags. The
> above check should then rather be flags == 0x1.
>
ok
> Also, even if linux only seems to call this with 0x1, this is a
> limitation from a LoPAPR standpoint. Not sure H_PARAMETER is the
> appropriate return value if flags is 0x2 since the guest did
> nothing wrong... I'd rather return H_FUNCTION in this case.
The doc says:
H_Function: The function is not supported
H_Parameter: Unsupported flag parameter value
in that case function is supported but not the flag, so I think
H_PARAMETER is a better choice.
Thanks,
Laurent
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY
2018-12-18 10:00 ` Laurent Vivier
@ 2018-12-18 10:50 ` Greg Kurz
2018-12-18 10:57 ` Laurent Vivier
0 siblings, 1 reply; 7+ messages in thread
From: Greg Kurz @ 2018-12-18 10:50 UTC (permalink / raw)
To: Laurent Vivier
Cc: David Gibson, Benjamin Herrenschmidt, Paul Mackerras, qemu-ppc,
qemu-devel
On Tue, 18 Dec 2018 11:00:01 +0100
Laurent Vivier <lvivier@redhat.com> wrote:
> On 18/12/2018 10:23, Greg Kurz wrote:
> > On Tue, 18 Dec 2018 08:50:00 +0100
> > Laurent Vivier <lvivier@redhat.com> wrote:
> >
> >> On 18/12/2018 05:29, David Gibson wrote:
> >>> On Mon, Dec 17, 2018 at 03:00:55PM +0100, Laurent Vivier wrote:
> >>>> H_HOME_NODE_ASSOCIATIVITY H-Call returns the associativity domain
> >>>> designation associated with the identifier input parameter.
> >>>>
> >>>> Remove the warning message from the kernel:
> >>>> VPHN is not supported. Disabling polling..
> >>>>
> >>>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> >>>
> >>> From the looks of PAPR, I suspect this call isn't of much use outside
> >>> PowerVM guests, though it probably wouldn't do any harm.
> >>
> >> This call is used by the kernel to get the node id of a CPU on hotplug
> >> and fixes a crash when we hotplug a CPU in a memory-less/CPU-less node
> >> where this information is missing (not initialized from the device-tree).
> >>
> >
> > So this patch isn't just about removing the warning message from the kernel
> > but about fixing an actual crash ?
>
> Yes, I updated the message but sent the wrong e-mail.
>
> > I ask because if it's only about the warning, why does the kernel call
> > H_HOME_NODE_ASSOCIATIVITY when hcall-vphn isn't advertised ? Especially,
> > the polling for topology changes is only started if hcall-vphn is present:
> >
> > if (firmware_has_feature(FW_FEATURE_VPHN) &&
> > lppaca_shared_proc(get_lppaca())) {
> > if (!vphn_enabled) {
> > vphn_enabled = 1;
> > setup_cpu_associativity_change_counters();
> > timer_setup(&topology_timer, topology_timer_fn,
> > TIMER_DEFERRABLE);
> > reset_topology_timer();
> > }
> > }
> >
> > It thus seems wrong to emit the "Disable polling.." warning for something
> > that was never enabled in the first place, doesn't it ?
>
> It's unconditionally called from find_and_online_cpu_nid() that is used
> to plug a CPU in a node that is not already online.
>
> > On the other hand, if this really needed to avoid a crash, I guess you
> > should provide some more details.
>
> I agree.
>
> >>> BenH, Paulus, any thoughts?
> >>>
> >>> One nit in implementation: if you implement this hcall, it's supposed
> >>> to be advertised by adding hcall-vphn to ibm,hypertas-functions.
> >> ok in v2.
> >>
> >> Thanks,
> >> Laurent
> >>
> >>>> ---
> >>>> Based-on: <20181213040126.6768-1-david@gibson.dropbear.id.au>
> >>>> "[PULL 00/27] ppc-for-4.0 queue 20181213"
> >>>>
> >>>> hw/ppc/spapr_hcall.c | 39 +++++++++++++++++++++++++++++++++++++++
> >>>> include/hw/ppc/spapr.h | 1 +
> >>>> 2 files changed, 40 insertions(+)
> >>>>
> >>>> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> >>>> index 78fecc8fe9..454ec594fd 100644
> >>>> --- a/hw/ppc/spapr_hcall.c
> >>>> +++ b/hw/ppc/spapr_hcall.c
> >>>> @@ -1663,6 +1663,41 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
> >>>> return H_SUCCESS;
> >>>> }
> >>>>
> >>>> +static target_ulong h_home_node_associativity(PowerPCCPU *cpu,
> >>>> + sPAPRMachineState *spapr,
> >>>> + target_ulong opcode,
> >>>> + target_ulong *args)
> >>>> +{
> >>>> + target_ulong flags = args[0];
> >>>> + target_ulong procno = args[1];
> >>>> + PowerPCCPU *tcpu;
> >>>> + int idx;
> >>>> +
> >>>> + /* only support procno from H_REGISTER_VPA */
> >>>> + if ((flags & 0x1) == 0) {
> >>>> + return H_PARAMETER;
> >>>> + }
> >
> > LoPAPR says that the guest can pass exactly 0x1 or 0x2 in flags. The
> > above check should then rather be flags == 0x1.
> >
>
> ok
>
> > Also, even if linux only seems to call this with 0x1, this is a
> > limitation from a LoPAPR standpoint. Not sure H_PARAMETER is the
> > appropriate return value if flags is 0x2 since the guest did
> > nothing wrong... I'd rather return H_FUNCTION in this case.
>
> The doc says:
>
> H_Function: The function is not supported
> H_Parameter: Unsupported flag parameter value
>
> in that case function is supported but not the flag, so I think
> H_PARAMETER is a better choice.
>
Well... neither LoPAPR, nor IBM confidential PAPR+ do say anything
about partial support for this hcall. If the guest was to use the
flags == 0x2 variant, eg, some closed-source OS supporting PAPR,
it could be legitimately confused to get an H_PARAMETER error when
passing supposedly valid parameters... how to cope with that ?
On the other hand, if QEMU cannot honor the flags == 0x2 variant
and returns H_FUNCTION then the OS can recover since it is
required by the specification.
But I don't really care for now, and we can talk about this later
if I'm assigned a BZ from the people who run such OS in KVM guests ;)
> Thanks,
> Laurent
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY
2018-12-18 10:50 ` Greg Kurz
@ 2018-12-18 10:57 ` Laurent Vivier
0 siblings, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2018-12-18 10:57 UTC (permalink / raw)
To: Greg Kurz
Cc: David Gibson, Benjamin Herrenschmidt, Paul Mackerras, qemu-ppc,
qemu-devel
On 18/12/2018 11:50, Greg Kurz wrote:
> On Tue, 18 Dec 2018 11:00:01 +0100
> Laurent Vivier <lvivier@redhat.com> wrote:
>
>> On 18/12/2018 10:23, Greg Kurz wrote:
>>> On Tue, 18 Dec 2018 08:50:00 +0100
...
>>> Also, even if linux only seems to call this with 0x1, this is a
>>> limitation from a LoPAPR standpoint. Not sure H_PARAMETER is the
>>> appropriate return value if flags is 0x2 since the guest did
>>> nothing wrong... I'd rather return H_FUNCTION in this case.
>>
>> The doc says:
>>
>> H_Function: The function is not supported
>> H_Parameter: Unsupported flag parameter value
>>
>> in that case function is supported but not the flag, so I think
>> H_PARAMETER is a better choice.
>>
>
> Well... neither LoPAPR, nor IBM confidential PAPR+ do say anything
> about partial support for this hcall. If the guest was to use the
> flags == 0x2 variant, eg, some closed-source OS supporting PAPR,
> it could be legitimately confused to get an H_PARAMETER error when
> passing supposedly valid parameters... how to cope with that ?
> On the other hand, if QEMU cannot honor the flags == 0x2 variant
> and returns H_FUNCTION then the OS can recover since it is
> required by the specification.
You have certainly access to more information than I have, so I'll
change H_PARAMETER to H_FUNCTION.
Thanks,
Laurent
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-12-18 11:09 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-17 14:00 [Qemu-devel] [PATCH] spapr: Add H-Call H_HOME_NODE_ASSOCIATIVITY Laurent Vivier
2018-12-18 4:29 ` David Gibson
2018-12-18 7:50 ` Laurent Vivier
2018-12-18 9:23 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2018-12-18 10:00 ` Laurent Vivier
2018-12-18 10:50 ` Greg Kurz
2018-12-18 10:57 ` Laurent Vivier
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).