[SLOF] [PATCH v1 08/27] virtio: make virtio_get_qsize 1.0 aware
Alexey Kardashevskiy
aik at ozlabs.ru
Fri Jan 15 12:06:22 AEDT 2016
On 01/14/2016 09:57 PM, Nikunj A Dadhania wrote:
> Alexey Kardashevskiy <aik at ozlabs.ru> writes:
>
>> On 01/13/2016 10:16 PM, Nikunj A Dadhania wrote:
>>> Also return unsigned int
>>
>> Why?
>
> Size is not negative :-)
The size equal to 0xffffffff makes as much sense as a negative one ;)
Are sizes in other places all unsigned already? If yes, then add this note
to the commit log, if not, then change it in other places in a separate patch.
btw (out of curiosity) while looking at the kernel tree about
VIRTIOHDR_QUEUE_SIZE, I could not spot its counterpart there, I thought it
is VIRTIO_PCI_COMMON_Q_SIZE but it is not, what is it?
>
>>
>>
>>>
>>> Signed-off-by: Nikunj A Dadhania <nikunj at linux.vnet.ibm.com>
>>> ---
>>> lib/libvirtio/virtio.c | 15 +++++++++++----
>>> lib/libvirtio/virtio.h | 2 +-
>>> 2 files changed, 12 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/lib/libvirtio/virtio.c b/lib/libvirtio/virtio.c
>>> index bcf050b..77676c7 100644
>>> --- a/lib/libvirtio/virtio.c
>>> +++ b/lib/libvirtio/virtio.c
>>> @@ -185,17 +185,24 @@ unsigned long virtio_vring_size(unsigned int qsize)
>>> * @param queue virtio queue number
>>> * @return number of elements
>>> */
>>> -int virtio_get_qsize(struct virtio_device *dev, int queue)
>>> +unsigned int virtio_get_qsize(struct virtio_device *dev, int queue)
>>> {
>>> - int size = 0;
>>> + unsigned int size = 0;
>>>
>>> - if (dev->type == VIRTIO_TYPE_PCI) {
>>> + if (dev->type != VIRTIO_TYPE_PCI)
>>> + return 0;
>>> + if (dev->is_modern) {
>>> + void *addr = dev->common.addr + offset_of(struct virtio_dev_common, q_select);
>>> + ci_write_16(addr, cpu_to_le16(queue));
>>> + eieio();
>>> + size = le16_to_cpu(ci_read_16(addr + 2));
>>
>>
>> Please add commit log explaining this magic.
>
> Sure.
>
>>
>>
>>> + }
>>> + else {
>>> ci_write_16(dev->base+VIRTIOHDR_QUEUE_SELECT,
>>> cpu_to_le16(queue));
>>> eieio();
>>> size = le16_to_cpu(ci_read_16(dev->base+VIRTIOHDR_QUEUE_SIZE));
>>> }
>>> -
>>
>> Unrelated change.
>
> Yep.
>
>>
>>
>>> return size;
>>> }
>>>
>>> diff --git a/lib/libvirtio/virtio.h b/lib/libvirtio/virtio.h
>>> index eee3144..537862b 100644
>>> --- a/lib/libvirtio/virtio.h
>>> +++ b/lib/libvirtio/virtio.h
>>> @@ -107,7 +107,7 @@ struct vqs {
>>> #define VQ_ALIGN(addr) (((addr) + 0xfff) & ~0xfff)
>>>
>>> extern unsigned long virtio_vring_size(unsigned int qsize);
>>> -extern int virtio_get_qsize(struct virtio_device *dev, int queue);
>>> +extern unsigned int virtio_get_qsize(struct virtio_device *dev, int queue);
>>> extern struct vring_desc *virtio_get_vring_desc(struct virtio_device *dev, int queue);
>>> extern struct vring_avail *virtio_get_vring_avail(struct virtio_device *dev, int queue);
>>> extern struct vring_used *virtio_get_vring_used(struct virtio_device *dev, int queue);
>>>
>>
>>
>> --
>> Alexey
>
--
Alexey
More information about the SLOF
mailing list