[SLOF] [PATCH v2 12/19] virtio: add 64-bit virtio helpers for 1.0
Nikunj A Dadhania
nikunj at linux.vnet.ibm.com
Fri Jan 22 16:18:12 AEDT 2016
Alexey Kardashevskiy <aik at ozlabs.ru> writes:
> On 01/21/2016 06:58 PM, Nikunj A Dadhania wrote:
>> Thomas Huth <thuth at redhat.com> writes:
>>> On 20.01.2016 13:10, Nikunj A Dadhania wrote:
>>>> } __attribute__ ((packed));
>>>> +/* virtio 1.0 Spec: 4.1.3 PCI Device Layout
>>>> + *
>>>> + * Fields of different sizes are present in the device configuration regions.
>>>> + * All 64-bit, 32-bit and 16-bit fields are little-endian. 64-bit fields are to
>>>> + * be treated as two 32-bit fields, with low 32 bit part followed by the high 32
>>>> + * bit part.
>>>> + */
>>>> +static void virtio_write64(void *addr, uint64_t val)
>>>> + uint32_t hi = (val >> 32) & 0xFFFFFFFF;
>>>> + uint32_t lo = val & 0xFFFFFFFF;
>>>> + ci_write_32(addr, cpu_to_le32(lo));
>>>> + ci_write_32(addr + 4, cpu_to_le32(hi));
>>>> +static uint64_t virtio_read64(void *addr)
>>>> + uint64_t hi, lo;
>>>> + lo = le32_to_cpu(ci_read_32(addr));
>>>> + hi = le32_to_cpu(ci_read_32(addr + 4));
>>>> + return (hi << 32) | lo;
>>> I'd maybe name them "virtio_pci_write64" and "virtio_pci_read64" to make
>>> it clear that they are only to be used when reading and writing to the
>>> PCI space - otherwise somebody might use them for accessing the virtio
>>> rings one day, for example.
>> Right, will rename.
> I'd rename these to virtio_ci_write_64/virtio_ci_read_64 as they are
> wrappers on top of ci_read_xx/ci_write_xx. And frankly they can be used to
> access any guest physical memory and any MMIO.
They can be used, but should not be, as the register in MMIO are not
split into two registers (hi,low). This is very specific to VIRTIO PCI.
IMO, the current naming is correct.
More information about the SLOF