[SLOF] [PATCH 2/2] board-qemu: add private hcall to inform host on "phandle" update

Thomas Huth thuth at redhat.com
Mon Jul 24 21:50:22 AEST 2017


On 24.07.2017 13:19, Greg Kurz wrote:
> On Mon, 10 Jul 2017 16:57:57 +0200
> Thomas Huth <thuth at redhat.com> wrote:
> 
>> On 10.07.2017 14:17, Greg Kurz wrote:
>>> The "interrupt-map" property in each PHB node references the "phandle"
>>> property of the "interrupt-controller" node. This is used by the guest
>>> OS to setup IRQs for any PCI device plugged into the PHB. QEMU sets this
>>> property to an arbitrary value in the flattened DT passed to SLOF.
>>>
>>> Since commit 82954d4c1088, SLOF has some generic code to convert all
>>> references to any "phandle" property to a SLOF specific value.
>>>
>>> This is is perfectly okay for coldplug devices, since the guest OS only
>>> sees the converted value in "interrupt-map". It is a problem though for
>>> hotplug devices. Since they don't go through SLOF, the guest OS receives
>>> the arbitrary value set by QEMU and fails to setup IRQs.
>>>
>>> In order to support PHB hotplug, this patch introduces a new private
>>> hcall, which allows SLOF to tell QEMU that a "phandle" was converted
>>> from an old value to a new value.
>>>
>>> Suggested-by: Thomas Huth <thuth at redhat.com>
>>> Signed-off-by: Greg Kurz <groug at kaod.org>
>>> ---
>>>  board-qemu/slof/fdt.fs    |   14 +++++++++++---
>>>  lib/libhvcall/hvcall.code |    6 ++++++
>>>  lib/libhvcall/hvcall.in   |    1 +
>>>  lib/libhvcall/libhvcall.h |    1 +
>>>  4 files changed, 19 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/board-qemu/slof/fdt.fs b/board-qemu/slof/fdt.fs
>>> index 8d4635f30495..8ce0a59879ac 100644
>>> --- a/board-qemu/slof/fdt.fs
>>> +++ b/board-qemu/slof/fdt.fs
>>> @@ -316,14 +316,22 @@ fdt-claim-reserve
>>>     s" phandle" r@ get-property 0= IF
>>>        decode-int                       ( p-addr2 p-len2 val )
>>>        \ ." found phandle: " dup . cr
>>> -      r@ s" /" find-node               ( p-addr2 p-len2 val node root )  
>>> -      fdt-replace-all-phandles         ( p-addr2 p-len2 )
>>> -      2drop
>>> +      dup                              ( p-addr2 p-len2 val val )
>>> +      r@ s" /" find-node               ( p-addr2 p-len2 val val node root )
>>> +      fdt-replace-all-phandles         ( p-addr2 p-len2 val )
>>> +      -rot 2drop                       ( val )
>>>        (fdt-phandle-replaced) IF
>>>           r@ set-node
>>>           s" phandle" delete-property
>>>           s" linux,phandle" delete-property
>>> +         r@ swap hv-update-phandle dup 0 <> IF  
>>
>> Instead of "dup 0 <> IF" you can use "?dup IF" here and remove the
>> corresponding "ELSE drop" below.
>>
>>> +	    \ Ignore hcall not implemented error, print error otherwise
>>> +	    dup -2 <> IF ." HV-UPDATE-PHANDLE error: " . cr ELSE drop THEN  
>>
>> Dito - use ?dup and remove the "ELSE drop" part.
>>
> 
> We want to print the value if it's not -2. I don't see how ?dup can help
> here actually or am I missing something ?

Sorry, my bad, I somehow overlooked the -2 during my review.

 Thomas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://lists.ozlabs.org/pipermail/slof/attachments/20170724/5b50db8d/attachment.sig>


More information about the SLOF mailing list