tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: RFC: New userspace fetch/store API
On Sat, 23 Feb 2019 at 18:26, Jason Thorpe <thorpej%me.com@localhost> wrote:
> A project I’m working on has a need for a proper “int” size fetch / store on all platforms, and it seems best to just tidy the whole mess up. So, I am proposing a new replacement user fetch/store API.
Can you be more specific on why "int" rather than a more abstract type
(we've things like size_t ptrdiff_t et.al. all kicking around) - I'm
curious.
> I have implemented the new API for alpha and amd64, and am putting together a test harness to exercise all aspects of the new API. Once that is done, I’ll tackle the remaining architectures.
> The implementation is entirely in architecture-dependent code. The following fetch primitives must be supplied:
As a corollary to KRE's point, why?
Can there be an inefficient default, implemented using something like
copy{in,out}() (yes I note the point about alignment). I sometimes
wonder of NetBSD's lost its way in terms of portability - it seems to
be accumulating an increasing number of redundant yet required
primitives.
> int ufetch_8(const uint8_t *uaddr, uint8_t *valp);
To follow through with Edgar Fuß's point. If I were looking for a
function to transfer a uint8_t I'd expect it to be called
fetch_uint8().
> int ufetch_16(const uint16_t *uaddr, uint16_t *valp);
> int ufetch_32(const uint32_t *uaddr, uint32_t *valp);
> #ifdef _LP64
> int ufetch_64(const uint64_t *uaddr, uint64_t *valp);
> #endif
>
> The following aliases must also be provided, mapped to the appropriate fixed-size primitives:
>
> int ufetch_char(const unsigned char *uaddr, unsigned char *valp);
> int ufetch_short(const unsigned short *uaddr, unsigned short *valp);
> int ufetch_int(const unsigned int *uaddr, unsigned int *valp);
> int ufetch_long(const unsigned long *uaddr, unsigned long *valp);
> int ufetch_ptr(const void **uaddr, void **valp);
I do find passing pointers as both the addr and the dest confusing;
but you've added a const which should help get the order right.
Home |
Main Index |
Thread Index |
Old Index