[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v8 2/4] xen/arm: Check for interrupt controller directly



On 03/03/15 15:07, Frediano Ziglio wrote:
> 2015-03-03 14:45 GMT+00:00 Julien Grall <julien.grall@xxxxxxxxxx>:
>> Hello Frediano,
>>
>> On 03/03/15 11:19, Frediano Ziglio wrote:
>>> This check allow to detect mail interrupt controller even if it does
>>
>> main
>>
>>> not match one of the standard ones.
>>> This allow boards with non standard controllers to be handled correctly
>>> without having to manually edit the global list every time.
>>>
>>> Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>
>>> ---
>>>  xen/arch/arm/domain_build.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
>>> index 9f1f59f..83951a3 100644
>>> --- a/xen/arch/arm/domain_build.c
>>> +++ b/xen/arch/arm/domain_build.c
>>> @@ -1069,7 +1069,7 @@ static int handle_node(struct domain *d, struct 
>>> kernel_info *kinfo,
>>>
>>>      /* Replace these nodes with our own. Note that the original may be
>>>       * used_by DOMID_XEN so this check comes first. */
>>> -    if ( dt_match_node(gic_matches, node) )
>>> +    if ( node == dt_interrupt_controller || dt_match_node(gic_matches, 
>>> node) )
>>>          return make_gic_node(d, kinfo->fdt, node);
>>
>> What about if the device tree exposes multiple GICs? By mistake we will
>> expose the secondaries GIC if they are not standard.
>>
>> As I suggested on a previous mail, I would prefer to introduce a new
>> callback to check if the node is a GIC.
>>
> 
> I think something like this would make all happy (I hope, I tested and
> works correctly on my board):

This looks good to me.

Regards,

> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 9f1f59f..aaa3b97 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -1035,12 +1035,6 @@ static int handle_node(struct domain *d, struct
> kernel_info *kinfo,
>          DT_MATCH_COMPATIBLE("arm,armv7-timer-mem"),
>          { /* sentinel */ },
>      };
> -    static const struct dt_device_match gic_matches[] __initconst =
> -    {
> -        DT_MATCH_GIC_V2,
> -        DT_MATCH_GIC_V3,
> -        { /* sentinel */ },
> -    };
>      static const struct dt_device_match timer_matches[] __initconst =
>      {
>          DT_MATCH_TIMER,
> @@ -1069,7 +1063,7 @@ static int handle_node(struct domain *d, struct
> kernel_info *kinfo,
> 
>      /* Replace these nodes with our own. Note that the original may be
>       * used_by DOMID_XEN so this check comes first. */
> -    if ( dt_match_node(gic_matches, node) )
> +    if ( device_get_class(node) == DEVICE_GIC )
>          return make_gic_node(d, kinfo->fdt, node);
>      if ( dt_match_node(timer_matches, node) )
>          return make_timer_node(d, kinfo->fdt, node);
> 


-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.