Re: [PATCH 1/3] virtio: dwords->qwords

Andrew Lunn
2025-10-09T12:31:20Z

On Thu, Oct 09, 2025 at 07:24:08AM -0400, Michael S. Tsirkin wrote:
> A "word" is 16 bit. 64 bit integers like virtio uses are not dwords,
> they are actually qwords.

I'm having trouble with this....

This bit makes sense. 4x 16bits = 64 bits.

> -static const u64 vhost_net_features[VIRTIO_FEATURES_DWORDS] = {
> +static const u64 vhost_net_features[VIRTIO_FEATURES_QWORDS] = {

If this was u16, and VIRTIO_FEATURES_QWORDS was 4, which the Q would
imply, than i would agree with what you are saying. But this is a u64
type. It is already a QWORD, and this is an array of two of them.

I think the real issue here is not D vs Q, but WORD. We have a default
meaning of a u16 for a word, especially in C. But that is not the
actual definition of a word a computer scientist would use. Wikipedia
has:

In computing, a word is any processor design's natural unit of
data. A word is a fixed-sized datum handled as a unit by the
instruction set or the hardware of the processor.

A word can be any size. In this context, virtio is not referring to
the instruction set, but a protocol. Are all fields in this protocol
u64? Hence word is u64? And this is an array of two words? That would
make DWORD correct, it is two words.

If you want to change anything here, i would actually change WORD to
something else, maybe FIELD?

And i could be wrong here, i've not looked at the actual protocol, so
i've no idea if all fields in the protocol are u64. There are
protocols like this, IPv6 uses u32, not octets, and the length field
in the headers refer to the number of u32s in the header.

Andrew