On 19 January 2015 at 11:35, Stefan Hajnoczi <stefa...@gmail.com> wrote: > What is the difference between the virtio_tswaps() and > virtio_ld/st_p() families of functions?
virtio_ld/st*_p() perform a load or store from memory pointed to by the (host) pointer argument. virtio_tswap16 &c take a value, swap it as appropriate and return a value. virtio_tswap16s &c do an in-place byteswap on the value pointed to by the host pointer argument. (The tswap*/tswap*s pairs are a mirror of the equivalent families of functions bswap16/bswap16s provided by bswap.h.) The most important distinction here is that the ld/st functions will handle possibly unaligned accesses, whereas the tswap functions will not. The former are intended for "fish this value out from some guest RAM" and the latter for "we have a structure we've copied from guest RAM already via memcpy and want to swizzle the entries in it". -- PMM