Re: [v7 2/3] vfio: support notifier chain in vfio_group

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 11/22/2016 7:32 PM, Alex Williamson wrote:
> On Tue, 22 Nov 2016 19:05:16 +0530
> Kirti Wankhede <kwankhede@xxxxxxxxxx> wrote:
> 
>> On 11/22/2016 11:39 AM, Jike Song wrote:

<snip>

>>>  /* events for VFIO_IOMMU_NOTIFY */
>>>  #define VFIO_IOMMU_NOTIFY_DMA_UNMAP	BIT(0)
>>>  
>>> +/* events for VFIO_GROUP_NOTIFY */
>>> +#define VFIO_GROUP_NOTIFY_SET_KVM	BIT(0)
>>> +
>>> +struct kvm;
>>> +extern void vfio_group_set_kvm(struct vfio_group *group, struct kvm *kvm);
>>>    
>>
>> If I understand correctly, notifier for backend iommu driver and
>> notifier for group should be registered with different notifier blocks,
>> as per your current implementation:
>>
>> unsigned long iommu_event = VFIO_IOMMU_NOTIFY_DMA_UNMAP;
>> struct notifier_block iommu_nb;
>>
>> iommu_nb.notifier_call = vfio_iommu_notifier_cb;
>> vfio_register_notifier(dev, VFIO_IOMMU_NOTIFY, &iommu_event, &iommu_nb);
>>
>>
>> unsigned long group_event = VFIO_GROUP_NOTIFY_SET_KVM;
>> struct notifier_block group_nb;
>>
>> group_nb.notifier_call = vfio_group_notifier_cb;
>> vfio_register_notifier(dev, VFIO_GROUP_NOTIFY, &group_event, &group_nb);
>>
>> Then what is the use of having 'events' bitmask as input argument?
>>
>> Its clear that caller should set:
>> -  VFIO_IOMMU_NOTIFY_DMA_UNMAP when vfio_notify_type_t is VFIO_IOMMU_NOTIFY
>> -  VFIO_GROUP_NOTIFY_SET_KVM when vfio_notify_type_t is VFIO_GROUP_NOTIFY
>>
>> Notifier action could be a integer as earlier and indexing of action
>> would be different for both notifiers.
>>
>> Then caller don't have to sent event bitmask, for caller it would look like:
>>
>> struct notifier_block iommu_nb;
>>
>> iommu_nb.notifier_call = vfio_iommu_notifier_cb;
>> vfio_register_notifier(dev, VFIO_IOMMU_NOTIFY, &iommu_nb);
>>
>>
>> struct notifier_block group_nb;
>>
>> group_nb.notifier_call = vfio_group_notifier_cb;
>> vfio_register_notifier(dev, VFIO_GROUP_NOTIFY, &group_nb);
> 
> If we did that then we'd effectively need to add a new notifier any
> time we want a new signal because the vendor driver would have no
> ability to query the notifications available.  For instance, say we
> added VFIO_IOMMU_NOTIFY_SET_FOO and a vendor driver was dependent on
> that and would either refuse to work or would take a backup path if
> that notification isn't available.  How could it operate in your
> proposal?  By passing a bitmask of events, the vendor driver can
> specify the set of required events and see which event signaling is
> unavailable.  The purpose of using a bitmask and passing the set of
> required bits on registration is to support future expansion.  Thanks,
> 

If we add VFIO_IOMMU_NOTIFY_SET_FOO in future, we have to define this
action in include/linux/vfio.h

 #define VFIO_IOMMU_NOTIFY_DMA_UNMAP    (1)
+#define VFIO_IOMMU_NOTIFY_SET_FOO      (2)

Vendor driver anyways need to be compiled against the kernel to which
its going to run. So vendor driver could use conditional directive:

#if defined(VFIO_IOMMU_NOTIFY_SET_FOO)
    /* foo signal available*/
#else
    /* foo signal not available*/
#endif

Thanks,
Kirti
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux