Hello Sebastian,

From: Sebastian Huber [sebastian.hu...@embedded-brains.de]
Sent: Wednesday, February 28, 2018 11:55

> ----- Am 27. Feb 2018 um 13:11 schrieb Jakob Viketoft 
> jakob.viket...@aacmicrotec.com:
>
>> From: Joel Sherrill [j...@rtems.org]
>> Sent: Monday, February 26, 2018 14:36
>>>> On Feb 26, 2018 8:27 AM, "Jakob Viketoft" <jakob.viket...@aacmicrotec.com>
>>>> wrote:
>>
>>>> Hello Joel,
>>
>>>> From: Joel Sherrill [j...@rtems.org]
>>>> Sent: Monday, February 26, 2018 12:21
>>
>>>>> On Feb 26, 2018 5:13 AM, "Jakob Viketoft" <jakob.viket...@aacmicrotec.com>
>>>>> wrote:
>>>>>> E.g. could it be possible for the translation mechanism to look if there 
>>>>>> is
>>>>>> already an errno defined and then return this instead of doing the error 
>>>>>> code
>>>>>> translation?
>>
>>>>>> It seems like the translation I'm talking about happens in the
>>>>>> rtems_deviceio_write() function in 
>>>>>> cpukit/libcsupport/src/sup_fs_deviceio.c
>>
>>>>> Completely random thought as I sit on a plane without code.
>>
>>>>> Add a field to the arguments structure for errno. See it to zero before 
>>>>> the
>>>>> call. If it is set to non-zero after the call, then the driver wanted to 
>>>>> return
>>>>> errno directly. Otherwise translate.
>>
>>>> This was my thought as well, I just wanted to bounce it off the RTEMS list 
>>>> and
>>>> also possibly get official support for a feature as this.
>>
>>> Now boarded on a different plane and have had another round of thinking.
>>
>>> What if an RTEMS status code were added like RTEMS_STATUS_IN_ERRNO and we 
>>> don't
>>> modify the arguments structure. Then a driver could return that status to 
>>> trip
>>> -1 and errno.
>>
>> Yes, that would work just as well for us and is even less work / impact.
>>
>>> Just a thought. I think it would make the code cleaner but another core
>>> developer should pipe up. I was up at 3am to catch a flight and could be 
>>> loopy.
>>> :)
>>
>> Anyone else? :)
>
> I think you try to improve the wrong driver framework. This classic device 
> support is a legacy API. It is inflexible
> and has a considerable overhead due to an excessive layering and the use of 
> minor numbers. A driver registered
> via IMFS_make_generic_node() already provides the functionality you are 
> asking.

I agree with the excessive layering, but it's not straightforward how 
IMFS_make_generic_node() works. Looking at e.g. 
https://git.rtems.org/rtems/tree/testsuites/libtests/newlib01/init.c, it seems 
like driver *user* is calling IMFS_make_generic_node() which seems a bit absurd 
(correct me if I'm wrong). You also noted that the API isn't stable yet which 
make me hesitate about switching over to this.

Practically speaking, I think need we have to have an immediate interim 
solution, along the lines Joel suggested, and then long term we could switch 
over to the IMFS_make_generic_node() way of doing things. However, I would need 
some more documentation on IMFS_make_generic_node() besides looking at examples 
in testsuites code.

The current POSIX API is what's exposed to our users and changing that in any 
way is not done at the flip of a coin.

We don't have any other filesystems in RTEMS (apart from /dev/*) if that has 
any impact either way.

       /Jakob
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to