On 08/21/2014 05:44 AM, Alex Williamson wrote:
> On Wed, 2014-08-20 at 17:49 +1000, Alexey Kardashevskiy wrote:
>> On 08/19/2014 03:42 AM, Alex Williamson wrote:
>>> On Fri, 2014-08-15 at 20:12 +1000, Alexey Kardashevskiy wrote:
>>>> Since the changes are not in upstream yet, no tag or branch is specified 
>>>> here.
>>>>
>>>> Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
>>>> ---
>>>>  linux-headers/linux/vfio.h | 37 ++++++++++++++++++++++++++++++++++++-
>>>>  1 file changed, 36 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
>>>> index 26c218e..f0aa97d 100644
>>>> --- a/linux-headers/linux/vfio.h
>>>> +++ b/linux-headers/linux/vfio.h
>>>> @@ -448,13 +448,48 @@ struct vfio_iommu_type1_dma_unmap {
>>>>   */
>>>>  struct vfio_iommu_spapr_tce_info {
>>>>    __u32 argsz;
>>>> -  __u32 flags;                    /* reserved for future use */
>>>> +  __u32 flags;
>>>> +#define VFIO_IOMMU_SPAPR_TCE_FLAG_DDW     1 /* Support dynamic windows */
>>>>    __u32 dma32_window_start;       /* 32 bit window start (bytes) */
>>>>    __u32 dma32_window_size;        /* 32 bit window size (bytes) */
>>>>  };
>>>>  
>>>>  #define VFIO_IOMMU_SPAPR_TCE_GET_INFO     _IO(VFIO_TYPE, VFIO_BASE + 12)
>>>>  
>>>> +/*
>>>> + * Dynamic DMA windows
>>>> + */
>>>> +struct vfio_iommu_spapr_tce_query {
>>>> +  __u32 argsz;
>>>> +  /* out */
>>>> +  __u32 windows_available;
>>>> +  __u32 page_size_mask;
>>>> +};
>>>
>>> Why do we need a new ioctl for this vs extending tce_info to include it?
>>> That's sort of the point of including argsz and flags in the ioctl.
>>
>>
>> It is not actual now but I can imagine that these numbers may change
>> depending on multiple calls of create()/remove().
> 
> Why does that matter?

Well, I could try imagining some hardware which would be able to have 2
small windows or 1 big window and only after the userspace created one
windows the host kernel could say if that window was small enough and it
still can do big window, or something like.

On the other hand, since we do not support this anyway and I do not think
we ever will and if we will, no idea what form it will take, I'll remove it
for now.


>>>> +#define VFIO_IOMMU_SPAPR_TCE_QUERY        _IO(VFIO_TYPE, VFIO_BASE + 17)
>>>> +
>>>> +struct vfio_iommu_spapr_tce_create {
>>>> +  __u32 argsz;
>>>> +  /* in */
>>>> +  __u32 page_shift;
>>>> +  __u32 window_shift;
>>>> +  /* out */
>>>> +  __u64 start_addr;
>>>> +
>>>> +};
>>>> +#define VFIO_IOMMU_SPAPR_TCE_CREATE       _IO(VFIO_TYPE, VFIO_BASE + 18)
>>>> +
>>>> +struct vfio_iommu_spapr_tce_remove {
>>>> +  __u32 argsz;
>>>> +  /* in */
>>>> +  __u64 start_addr;
>>>> +};
>>>> +#define VFIO_IOMMU_SPAPR_TCE_REMOVE       _IO(VFIO_TYPE, VFIO_BASE + 19)
>>>> +
>>>> +struct vfio_iommu_spapr_tce_reset {
>>>> +  __u32 argsz;
>>>> +};
>>>> +#define VFIO_IOMMU_SPAPR_TCE_RESET        _IO(VFIO_TYPE, VFIO_BASE + 20)
>>>> +
>>>
>>> argsz by itself seems rather pointless if we don't have a flags field to
>>> augment the structure.  Thanks,
>>
>>
>> Add flags and check for zero  or  remove it? Cannot choose, please help :)
> 
> Do we really need to hash this out again?  Almost every vfio ioctl
> includes argsz and flags.  Please continue to do this unless you have a
> good reason otherwise.  Thanks,

Will do. Thanks!



-- 
Alexey

Reply via email to