[PATCH 6/7] score: Always validate ticks in _TOD_Validate()

Chris Johns chrisj at rtems.org
Wed Sep 8 02:48:53 UTC 2021


On 7/9/21 3:34 pm, Sebastian Huber wrote:
> On 07/09/2021 05:11, Chris Johns wrote:
>> On 6/9/21 6:11 pm, Sebastian Huber wrote:
>>> On 06/09/2021 09:55, Chris Johns wrote:
>>>> On 6/9/21 3:49 pm, Sebastian Huber wrote:
>>>>> On 04/09/2021 06:20, Joel Sherrill wrote:
>>>>>>        > -    sc = _TOD_Validate(&temp_tod, TOD_ENABLE_TICKS_VALIDATION);
>>>>>>        > +    sc = _TOD_Validate(&temp_tod);
>>>>>>
>>>>>>       This has leaked out of the internal implementation interface. Should
>>>>>> it?
>>>>>>
>>>>>>       I prefer this does not happen and BSPs use an API.
>>>>>>
>>>>>>
>>>>>> I noticed this also. It needs an API.
>>>>> There is no RTEMS API to support writing realtime clock drivers currently.
>>>> Where did the RTC API connection comes from? I was only thinking of a call in
>>>> `rtems/clock.h` to validate time. I would not expect an RTC API to result in
>>>> the
>>>> validate call being moved from where it is.
>>>
>>> This is not the only _TOD_* stuff used by RTC drivers.
>>
>> A check shows there are 2 calls used and the bfin bsp can be ignored. Maybe I am
>> missing something here. Am I?
> 
> Yes, you missed the other uses of _TOD_* stuff:
> 
> bsps/arm/lpc32xx/rtc/rtc-config.c:  lpc32xx_rtc_set(_TOD_To_seconds(tod));
> bsps/shared/dev/rtc/ds1375.c:  secs = _TOD_To_seconds( time );
> bsps/shared/dev/rtc/ds1375.c:  secs = _TOD_To_seconds( &rtod );
> bsps/shared/dev/rtc/rtc-support.c:  rtems_time = _TOD_To_seconds( &rtems_tod );
> bsps/shared/dev/rtc/rtc-support.c:  rtc_time = _TOD_To_seconds( &rtc_tod );
> bsps/bfin/shared/dev/rtc.c: _TOD_Days_to_date[1][tod_temp.month] + tod_temp.day
> - 1;
> bsps/bfin/shared/dev/rtc.c:    if (days <= _TOD_Days_to_date[Leap_year][n+1]) {
> bsps/bfin/shared/dev/rtc.c:      tod_temp.day = days -
> _TOD_Days_to_date[Leap_year][n];
> bsps/bfin/shared/dev/rtc.c:  rtems_time = _TOD_To_seconds( &rtems_tod );
> bsps/bfin/shared/dev/rtc.c:  rtc_time = _TOD_To_seconds( &rtc_tod );
> 

This is what I saw and it not much that needs to be added to the header file.

>>
>>>>> I am not that sure if this is really a high priority issue.
>>>> If you mean an RTC API, sure I agree with that. If this is about dipping
>>>> directly into the score, I do not agree, it is always a priority.
>>>
>>> The _TOD_* stuff is probably used for decades in RTC drivers. Adding RTEMS API
>>> functions is a bit of work and all core developers are busy. I think it is
>>> unrealistic that someone will have time to work on this topic.
>>
>> I think our goals are not aligned. I am only asking the call be protected by an
>> API signature placed in rtems/clock.h. Is there a problem with doing this?
>>
>> /**
>>   * @brief Validates the time of day.
>>   *
>>   * @param tod is the reference to the time of day structure to validate or
>>   *   NULL.
>>   *
>>   * @retval RTEMS_SUCCESSFUL @a tod references a valid time of day.
>>   * @retval RTEMS_INVALID_CLOCK @a tod references an invalid time of day.
>>   * @retval RTEMS_INVALID_ADDRESS @a tod reference is @c NULL.
>>   */
>> rtems_status rtems_time_of_day_validate(rtems_time_of_day* tod);
>>
>> And the implementation is:
>>
>> rtems_status rtems_time_of_day_validate(
>>    rtems_time_of_day* tod
>> )
>> {
>>    return _TOD_Validate(tod);
>> }
> 
> The RTEMS API should be documented in the Classic API Guide. There should be
> also separate tests for API functions. API functions should be stable and cover
> important use cases of applications. I am really not sure if a function used
> only by two device drivers should be moved to the API.
> 

static void test_leap_year(void)
{
    rtems_status_code test_status;
    const rtems_time_of_day *problem = &problem_2100;
    const rtems_time_of_day *problem2 = &problem_2100_2;
    // 2100 is not a leap year, so it should have 28 days
    test_status = rtems_time_of_day_validate(problem);
    rtems_test_assert(test_status == RTEMS_SUCCESSFUL);
    test_status = rtems_time_of_day_validate(problem2);
    rtems_test_assert(test_status == RTEMS_INVALID_CLOCK);
}

?

Chris


More information about the devel mailing list