On Tue, Mar 30, 2010 at 10:20 AM, Garrett D'Amore <garr...@damore.org> wrote:
> On 03/30/10 01:17 AM, Darren J Moffat wrote:
>>
>> On 30/03/2010 04:21, Jason King wrote:
>>>>>
>>>>> I don't know of any... they're awkward to use in most cases; coding
>>>>> some higher level routines may help.
>>>>
>>>> IIRC, this is *precisely* how ddi_get16 and friends work when they are
>>>> used
>>>> with a handle that indicates little-endian device order.  Of course,
>>>> this is
>>>> only useful in the kernel...
>>>
>>> Even in the kernel, zfs at the very least could benefit (since it does
>>> endian conversion as needed), though there might be other areas as
>>> well.
>>
>> For ZFS see $SRC/common/fs/zfs/dmu.c  the following routines in
>> particular:
>>
>> byteswap_uint64_array()
>> byteswap_uint32_array()
>> byteswap_uint16_array()
>> byteswap_uint8_array().
>>
>> Note that in the implementation of those to swap the elements the
>> corresponding BSWAP_XX() macro is used.
>>
>> Those macros are defined in <sys/byteswap.h>
>>
>> For x86 they use hton[s,l,ll]() which are implemented in asm.
>> For everything else (ie SPARC) they use & < | to do with swapping.
>>
>> If there is a way to use VIS (or any other SPARC instructions for that
>> mater) to make byteswapping faster then please implement them as sparc
>> versions of hton[s,l,ll]() and fixup <sys/byteswap.h>.  Doing it that way
>> means that ZFS, Crypto, Networking and a whole lot of other code gets to
>> take advantage of it.
>
> We should make sure that these are done for SPARC with little endian
> swapping.  The only concern I can see would be if the use of the ASI might
> have bad side effects with respect to the cache.  Perhaps someone familiar
> with SPARC architecture can comment on that.
>
> For hto*, on SPARC its a no-op.  Does ZFS use big endian, little endian, or
> native endian for is on-disk structures?  I'd guess native, but, I'm not
> sure.

Last time I checked, it was native, with 'reader makes right', and I
believe a bit in one of the data structures indicates the order (so
it's possible that a zpool that gets imported and exported on sparc
and x86 could be mixed).

>
> I'd guess that outside of certain code dealing with MS filesystems, and
> device drivers dealing with little-endian registers, there is probably
> little other use of little-endian data on SPARC systems.  I'm pretty sure
> that TCP/IP, XDR/NFS, and even crypto bignum keys are all formatted using
> big-endian.  (I'd need to double check on the bignum stuff... its my
> recollection though.)
>
>    - Garrett
>
>
>
_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to