* Re: [PATCH V3 4/6] vDPA/ifcvf: remove the version number string
[not found] ` <20210310090052.4762-5-lingshan.zhu@intel.com>
@ 2021-03-10 9:16 ` Leon Romanovsky
2021-03-10 9:18 ` Zhu Lingshan
0 siblings, 1 reply; 14+ messages in thread
From: Leon Romanovsky @ 2021-03-10 9:16 UTC (permalink / raw)
To: Zhu Lingshan; +Cc: lulu, kvm, mst, netdev, linux-kernel, virtualization
On Wed, Mar 10, 2021 at 05:00:50PM +0800, Zhu Lingshan wrote:
> This commit removes the version number string, using kernel
> version is enough.
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> ---
> drivers/vdpa/ifcvf/ifcvf_main.c | 2 --
> 1 file changed, 2 deletions(-)
>
I already added my ROB, but will add again.
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 4/6] vDPA/ifcvf: remove the version number string
2021-03-10 9:16 ` [PATCH V3 4/6] vDPA/ifcvf: remove the version number string Leon Romanovsky
@ 2021-03-10 9:18 ` Zhu Lingshan
0 siblings, 0 replies; 14+ messages in thread
From: Zhu Lingshan @ 2021-03-10 9:18 UTC (permalink / raw)
To: virtualization
Thanks Leon, I will include your ROB if there is a V4.
On 3/10/2021 5:16 PM, Leon Romanovsky wrote:
> On Wed, Mar 10, 2021 at 05:00:50PM +0800, Zhu Lingshan wrote:
>> This commit removes the version number string, using kernel
>> version is enough.
>>
>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>> ---
>> drivers/vdpa/ifcvf/ifcvf_main.c | 2 --
>> 1 file changed, 2 deletions(-)
>>
> I already added my ROB, but will add again.
>
> Thanks,
> Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
> _______________________________________________
> Virtualization mailing list
> Virtualization@lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/virtualization
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA
[not found] ` <20210310090052.4762-7-lingshan.zhu@intel.com>
@ 2021-03-11 3:20 ` Jason Wang
2021-03-11 4:15 ` Zhu Lingshan
2021-03-11 4:16 ` Zhu Lingshan
0 siblings, 2 replies; 14+ messages in thread
From: Jason Wang @ 2021-03-11 3:20 UTC (permalink / raw)
To: Zhu Lingshan, mst, lulu, leonro; +Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
> vDPA requres VIRTIO_F_ACCESS_PLATFORM as a must, this commit
> examines this when set features.
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> ---
> drivers/vdpa/ifcvf/ifcvf_base.c | 8 ++++++++
> drivers/vdpa/ifcvf/ifcvf_base.h | 1 +
> drivers/vdpa/ifcvf/ifcvf_main.c | 5 +++++
> 3 files changed, 14 insertions(+)
>
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
> index ea6a78791c9b..58f47fdce385 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
> @@ -224,6 +224,14 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
> return hw->hw_features;
> }
>
> +int ifcvf_verify_min_features(struct ifcvf_hw *hw)
> +{
> + if (!(hw->hw_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)))
> + return -EINVAL;
> +
> + return 0;
> +}
> +
> void ifcvf_read_net_config(struct ifcvf_hw *hw, u64 offset,
> void *dst, int length)
> {
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
> index dbb8c10aa3b1..91c5735d4dc9 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
> @@ -123,6 +123,7 @@ void io_write64_twopart(u64 val, u32 *lo, u32 *hi);
> void ifcvf_reset(struct ifcvf_hw *hw);
> u64 ifcvf_get_features(struct ifcvf_hw *hw);
> u64 ifcvf_get_hw_features(struct ifcvf_hw *hw);
> +int ifcvf_verify_min_features(struct ifcvf_hw *hw);
> u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid);
> int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num);
> struct ifcvf_adapter *vf_to_adapter(struct ifcvf_hw *hw);
> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> index 25fb9dfe23f0..f624f202447d 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> @@ -179,6 +179,11 @@ static u64 ifcvf_vdpa_get_features(struct vdpa_device *vdpa_dev)
> static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev, u64 features)
> {
> struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
> + int ret;
> +
> + ret = ifcvf_verify_min_features(vf);
So this validate device features instead of driver which is the one we
really want to check?
Thanks
> + if (ret)
> + return ret;
>
> vf->req_features = features;
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 1/6] vDPA/ifcvf: get_vendor_id returns a device specific vendor id
[not found] ` <20210310090052.4762-2-lingshan.zhu@intel.com>
@ 2021-03-11 3:23 ` Jason Wang
2021-03-11 4:21 ` Zhu Lingshan
0 siblings, 1 reply; 14+ messages in thread
From: Jason Wang @ 2021-03-11 3:23 UTC (permalink / raw)
To: Zhu Lingshan, mst, lulu, leonro; +Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
> In this commit, ifcvf_get_vendor_id() will return
> a device specific vendor id of the probed pci device
> than a hard code.
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> ---
> drivers/vdpa/ifcvf/ifcvf_main.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> index fa1af301cf55..e501ee07de17 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> @@ -324,7 +324,10 @@ static u32 ifcvf_vdpa_get_device_id(struct vdpa_device *vdpa_dev)
>
> static u32 ifcvf_vdpa_get_vendor_id(struct vdpa_device *vdpa_dev)
> {
> - return IFCVF_SUBSYS_VENDOR_ID;
> + struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev);
> + struct pci_dev *pdev = adapter->pdev;
> +
> + return pdev->subsystem_vendor;
> }
While at this, I wonder if we can do something similar in
get_device_id() if it could be simple deduced from some simple math from
the pci device id?
Thanks
>
> static u32 ifcvf_vdpa_get_vq_align(struct vdpa_device *vdpa_dev)
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 3/6] vDPA/ifcvf: rename original IFCVF dev ids to N3000 ids
[not found] ` <20210310090052.4762-4-lingshan.zhu@intel.com>
@ 2021-03-11 3:25 ` Jason Wang
2021-03-11 4:23 ` Zhu Lingshan
0 siblings, 1 reply; 14+ messages in thread
From: Jason Wang @ 2021-03-11 3:25 UTC (permalink / raw)
To: Zhu Lingshan, mst, lulu, leonro; +Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
> IFCVF driver probes multiple types of devices now,
> to distinguish the original device driven by IFCVF
> from others, it is renamed as "N3000".
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> ---
> drivers/vdpa/ifcvf/ifcvf_base.h | 8 ++++----
> drivers/vdpa/ifcvf/ifcvf_main.c | 8 ++++----
> 2 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
> index 75d9a8052039..794d1505d857 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
> @@ -18,10 +18,10 @@
> #include <uapi/linux/virtio_config.h>
> #include <uapi/linux/virtio_pci.h>
>
> -#define IFCVF_VENDOR_ID 0x1AF4
> -#define IFCVF_DEVICE_ID 0x1041
> -#define IFCVF_SUBSYS_VENDOR_ID 0x8086
> -#define IFCVF_SUBSYS_DEVICE_ID 0x001A
> +#define N3000_VENDOR_ID 0x1AF4
> +#define N3000_DEVICE_ID 0x1041
> +#define N3000_SUBSYS_VENDOR_ID 0x8086
> +#define N3000_SUBSYS_DEVICE_ID 0x001A
>
> #define C5000X_PL_VENDOR_ID 0x1AF4
> #define C5000X_PL_DEVICE_ID 0x1000
> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> index 26a2dab7ca66..fd5befc5cbcc 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> @@ -480,10 +480,10 @@ static void ifcvf_remove(struct pci_dev *pdev)
> }
>
> static struct pci_device_id ifcvf_pci_ids[] = {
> - { PCI_DEVICE_SUB(IFCVF_VENDOR_ID,
> - IFCVF_DEVICE_ID,
> - IFCVF_SUBSYS_VENDOR_ID,
> - IFCVF_SUBSYS_DEVICE_ID) },
> + { PCI_DEVICE_SUB(N3000_VENDOR_ID,
> + N3000_DEVICE_ID,
I am not sure the plan for Intel but I wonder if we can simply use
PCI_ANY_ID for device id here. Otherewise you need to maintain a very
long list of ids here.
Thanks
> + N3000_SUBSYS_VENDOR_ID,
> + N3000_SUBSYS_DEVICE_ID) },
> { PCI_DEVICE_SUB(C5000X_PL_VENDOR_ID,
> C5000X_PL_DEVICE_ID,
> C5000X_PL_SUBSYS_VENDOR_ID,
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA
2021-03-11 3:20 ` [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA Jason Wang
@ 2021-03-11 4:15 ` Zhu Lingshan
2021-03-11 4:16 ` Zhu Lingshan
1 sibling, 0 replies; 14+ messages in thread
From: Zhu Lingshan @ 2021-03-11 4:15 UTC (permalink / raw)
To: virtualization
On 3/11/2021 11:20 AM, Jason Wang wrote:
>
> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>> vDPA requres VIRTIO_F_ACCESS_PLATFORM as a must, this commit
>> examines this when set features.
>>
>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>> ---
>> drivers/vdpa/ifcvf/ifcvf_base.c | 8 ++++++++
>> drivers/vdpa/ifcvf/ifcvf_base.h | 1 +
>> drivers/vdpa/ifcvf/ifcvf_main.c | 5 +++++
>> 3 files changed, 14 insertions(+)
>>
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c
>> b/drivers/vdpa/ifcvf/ifcvf_base.c
>> index ea6a78791c9b..58f47fdce385 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
>> @@ -224,6 +224,14 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
>> return hw->hw_features;
>> }
>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw)
>> +{
>> + if (!(hw->hw_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)))
>> + return -EINVAL;
>> +
>> + return 0;
>> +}
>> +
>> void ifcvf_read_net_config(struct ifcvf_hw *hw, u64 offset,
>> void *dst, int length)
>> {
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h
>> b/drivers/vdpa/ifcvf/ifcvf_base.h
>> index dbb8c10aa3b1..91c5735d4dc9 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>> @@ -123,6 +123,7 @@ void io_write64_twopart(u64 val, u32 *lo, u32 *hi);
>> void ifcvf_reset(struct ifcvf_hw *hw);
>> u64 ifcvf_get_features(struct ifcvf_hw *hw);
>> u64 ifcvf_get_hw_features(struct ifcvf_hw *hw);
>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw);
>> u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid);
>> int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num);
>> struct ifcvf_adapter *vf_to_adapter(struct ifcvf_hw *hw);
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>> index 25fb9dfe23f0..f624f202447d 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>> @@ -179,6 +179,11 @@ static u64 ifcvf_vdpa_get_features(struct
>> vdpa_device *vdpa_dev)
>> static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev,
>> u64 features)
>> {
>> struct ifcvf_hw *vf = vdpa_to_intersectionvf(vdpa_dev);
>> + int ret;
>> +
>> + ret = ifcvf_verify_min_features(vf);
>
>
> So this validate device features instead of driver which is the one we
> really want to check?
>
> Thanks
Hi Jason,
Here we check device feature bits to make sure the device support
ACCESS_PLATFORM. In get_features(),
it will return a intersection of device features bit and driver
supported features bits(which includes ACCESS_PLATFORM).
Other components like QEMU should not set features bits more than this
intersection of bits. so we can make sure if this
ifcvf_verify_min_features() passed, both device and driver support
ACCESS_PLATFORM.
Are you suggesting check driver feature bits in
ifcvf_verify_min_features() in the meantime as well?
Thanks!
>
>
>> + if (ret)
>> + return ret;
>> vf->req_features = features;
>
> _______________________________________________
> Virtualization mailing list
> Virtualization@lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/virtualization
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA
2021-03-11 3:20 ` [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA Jason Wang
2021-03-11 4:15 ` Zhu Lingshan
@ 2021-03-11 4:16 ` Zhu Lingshan
2021-03-11 6:20 ` Jason Wang
1 sibling, 1 reply; 14+ messages in thread
From: Zhu Lingshan @ 2021-03-11 4:16 UTC (permalink / raw)
To: Jason Wang, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 3/11/2021 11:20 AM, Jason Wang wrote:
>
> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>> vDPA requres VIRTIO_F_ACCESS_PLATFORM as a must, this commit
>> examines this when set features.
>>
>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>> ---
>> drivers/vdpa/ifcvf/ifcvf_base.c | 8 ++++++++
>> drivers/vdpa/ifcvf/ifcvf_base.h | 1 +
>> drivers/vdpa/ifcvf/ifcvf_main.c | 5 +++++
>> 3 files changed, 14 insertions(+)
>>
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c
>> b/drivers/vdpa/ifcvf/ifcvf_base.c
>> index ea6a78791c9b..58f47fdce385 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
>> @@ -224,6 +224,14 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
>> return hw->hw_features;
>> }
>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw)
>> +{
>> + if (!(hw->hw_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)))
>> + return -EINVAL;
>> +
>> + return 0;
>> +}
>> +
>> void ifcvf_read_net_config(struct ifcvf_hw *hw, u64 offset,
>> void *dst, int length)
>> {
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h
>> b/drivers/vdpa/ifcvf/ifcvf_base.h
>> index dbb8c10aa3b1..91c5735d4dc9 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>> @@ -123,6 +123,7 @@ void io_write64_twopart(u64 val, u32 *lo, u32 *hi);
>> void ifcvf_reset(struct ifcvf_hw *hw);
>> u64 ifcvf_get_features(struct ifcvf_hw *hw);
>> u64 ifcvf_get_hw_features(struct ifcvf_hw *hw);
>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw);
>> u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid);
>> int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num);
>> struct ifcvf_adapter *vf_to_adapter(struct ifcvf_hw *hw);
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>> index 25fb9dfe23f0..f624f202447d 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>> @@ -179,6 +179,11 @@ static u64 ifcvf_vdpa_get_features(struct
>> vdpa_device *vdpa_dev)
>> static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev,
>> u64 features)
>> {
>> struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
>> + int ret;
>> +
>> + ret = ifcvf_verify_min_features(vf);
>
>
> So this validate device features instead of driver which is the one we
> really want to check?
>
> Thanks
Hi Jason,
Here we check device feature bits to make sure the device support
ACCESS_PLATFORM. In get_features(),
it will return a intersection of device features bit and driver
supported features bits(which includes ACCESS_PLATFORM).
Other components like QEMU should not set features bits more than this
intersection of bits. so we can make sure if this
ifcvf_verify_min_features() passed, both device and driver support
ACCESS_PLATFORM.
Are you suggesting check driver feature bits in
ifcvf_verify_min_features() in the meantime as well?
Thanks!
>
>
>> + if (ret)
>> + return ret;
>> vf->req_features = features;
>
> _______________________________________________
> Virtualization mailing list
> Virtualization@lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/virtualization
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 1/6] vDPA/ifcvf: get_vendor_id returns a device specific vendor id
2021-03-11 3:23 ` [PATCH V3 1/6] vDPA/ifcvf: get_vendor_id returns a device specific vendor id Jason Wang
@ 2021-03-11 4:21 ` Zhu Lingshan
2021-03-11 6:13 ` Jason Wang
0 siblings, 1 reply; 14+ messages in thread
From: Zhu Lingshan @ 2021-03-11 4:21 UTC (permalink / raw)
To: Jason Wang, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 3/11/2021 11:23 AM, Jason Wang wrote:
>
> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>> In this commit, ifcvf_get_vendor_id() will return
>> a device specific vendor id of the probed pci device
>> than a hard code.
>>
>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>> ---
>> drivers/vdpa/ifcvf/ifcvf_main.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>> index fa1af301cf55..e501ee07de17 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>> @@ -324,7 +324,10 @@ static u32 ifcvf_vdpa_get_device_id(struct
>> vdpa_device *vdpa_dev)
>> static u32 ifcvf_vdpa_get_vendor_id(struct vdpa_device *vdpa_dev)
>> {
>> - return IFCVF_SUBSYS_VENDOR_ID;
>> + struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev);
>> + struct pci_dev *pdev = adapter->pdev;
>> +
>> + return pdev->subsystem_vendor;
>> }
>
>
> While at this, I wonder if we can do something similar in
> get_device_id() if it could be simple deduced from some simple math
> from the pci device id?
>
> Thanks
Hi Jason,
IMHO, this implementation is just some memory read ops, I think other
implementations may not save many cpu cycles, an if cost at least three
cpu cycles.
Thanks!
>
>
>> static u32 ifcvf_vdpa_get_vq_align(struct vdpa_device *vdpa_dev)
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 3/6] vDPA/ifcvf: rename original IFCVF dev ids to N3000 ids
2021-03-11 3:25 ` [PATCH V3 3/6] vDPA/ifcvf: rename original IFCVF dev ids to N3000 ids Jason Wang
@ 2021-03-11 4:23 ` Zhu Lingshan
2021-03-11 6:14 ` Jason Wang
0 siblings, 1 reply; 14+ messages in thread
From: Zhu Lingshan @ 2021-03-11 4:23 UTC (permalink / raw)
To: Jason Wang, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 3/11/2021 11:25 AM, Jason Wang wrote:
>
> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>> IFCVF driver probes multiple types of devices now,
>> to distinguish the original device driven by IFCVF
>> from others, it is renamed as "N3000".
>>
>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>> ---
>> drivers/vdpa/ifcvf/ifcvf_base.h | 8 ++++----
>> drivers/vdpa/ifcvf/ifcvf_main.c | 8 ++++----
>> 2 files changed, 8 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h
>> b/drivers/vdpa/ifcvf/ifcvf_base.h
>> index 75d9a8052039..794d1505d857 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>> @@ -18,10 +18,10 @@
>> #include <uapi/linux/virtio_config.h>
>> #include <uapi/linux/virtio_pci.h>
>> -#define IFCVF_VENDOR_ID 0x1AF4
>> -#define IFCVF_DEVICE_ID 0x1041
>> -#define IFCVF_SUBSYS_VENDOR_ID 0x8086
>> -#define IFCVF_SUBSYS_DEVICE_ID 0x001A
>> +#define N3000_VENDOR_ID 0x1AF4
>> +#define N3000_DEVICE_ID 0x1041
>> +#define N3000_SUBSYS_VENDOR_ID 0x8086
>> +#define N3000_SUBSYS_DEVICE_ID 0x001A
>> #define C5000X_PL_VENDOR_ID 0x1AF4
>> #define C5000X_PL_DEVICE_ID 0x1000
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>> index 26a2dab7ca66..fd5befc5cbcc 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>> @@ -480,10 +480,10 @@ static void ifcvf_remove(struct pci_dev *pdev)
>> }
>> static struct pci_device_id ifcvf_pci_ids[] = {
>> - { PCI_DEVICE_SUB(IFCVF_VENDOR_ID,
>> - IFCVF_DEVICE_ID,
>> - IFCVF_SUBSYS_VENDOR_ID,
>> - IFCVF_SUBSYS_DEVICE_ID) },
>> + { PCI_DEVICE_SUB(N3000_VENDOR_ID,
>> + N3000_DEVICE_ID,
>
>
> I am not sure the plan for Intel but I wonder if we can simply use
> PCI_ANY_ID for device id here. Otherewise you need to maintain a very
> long list of ids here.
>
> Thanks
Hi Jason,
Thanks! but maybe if we present a very simple and clear list like what
e1000 does can help the users understand what we support easily.
Thanks!
>
>
>> + N3000_SUBSYS_VENDOR_ID,
>> + N3000_SUBSYS_DEVICE_ID) },
>> { PCI_DEVICE_SUB(C5000X_PL_VENDOR_ID,
>> C5000X_PL_DEVICE_ID,
>> C5000X_PL_SUBSYS_VENDOR_ID,
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 1/6] vDPA/ifcvf: get_vendor_id returns a device specific vendor id
2021-03-11 4:21 ` Zhu Lingshan
@ 2021-03-11 6:13 ` Jason Wang
0 siblings, 0 replies; 14+ messages in thread
From: Jason Wang @ 2021-03-11 6:13 UTC (permalink / raw)
To: Zhu Lingshan, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/11 12:21 下午, Zhu Lingshan wrote:
>
>
> On 3/11/2021 11:23 AM, Jason Wang wrote:
>>
>> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>>> In this commit, ifcvf_get_vendor_id() will return
>>> a device specific vendor id of the probed pci device
>>> than a hard code.
>>>
>>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>>> ---
>>> drivers/vdpa/ifcvf/ifcvf_main.c | 5 ++++-
>>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>>> index fa1af301cf55..e501ee07de17 100644
>>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>>> @@ -324,7 +324,10 @@ static u32 ifcvf_vdpa_get_device_id(struct
>>> vdpa_device *vdpa_dev)
>>> static u32 ifcvf_vdpa_get_vendor_id(struct vdpa_device *vdpa_dev)
>>> {
>>> - return IFCVF_SUBSYS_VENDOR_ID;
>>> + struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev);
>>> + struct pci_dev *pdev = adapter->pdev;
>>> +
>>> + return pdev->subsystem_vendor;
>>> }
>>
>>
>> While at this, I wonder if we can do something similar in
>> get_device_id() if it could be simple deduced from some simple math
>> from the pci device id?
>>
>> Thanks
> Hi Jason,
>
> IMHO, this implementation is just some memory read ops, I think other
> implementations may not save many cpu cycles, an if cost at least
> three cpu cycles.
>
> Thanks!
Well, I meant whehter you can deduce virtio device id from
pdev->subsystem_device.
Thanks
>>
>>
>>> static u32 ifcvf_vdpa_get_vq_align(struct vdpa_device *vdpa_dev)
>>
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 3/6] vDPA/ifcvf: rename original IFCVF dev ids to N3000 ids
2021-03-11 4:23 ` Zhu Lingshan
@ 2021-03-11 6:14 ` Jason Wang
0 siblings, 0 replies; 14+ messages in thread
From: Jason Wang @ 2021-03-11 6:14 UTC (permalink / raw)
To: Zhu Lingshan, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/11 12:23 下午, Zhu Lingshan wrote:
>
>
> On 3/11/2021 11:25 AM, Jason Wang wrote:
>>
>> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>>> IFCVF driver probes multiple types of devices now,
>>> to distinguish the original device driven by IFCVF
>>> from others, it is renamed as "N3000".
>>>
>>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>>> ---
>>> drivers/vdpa/ifcvf/ifcvf_base.h | 8 ++++----
>>> drivers/vdpa/ifcvf/ifcvf_main.c | 8 ++++----
>>> 2 files changed, 8 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h
>>> b/drivers/vdpa/ifcvf/ifcvf_base.h
>>> index 75d9a8052039..794d1505d857 100644
>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>>> @@ -18,10 +18,10 @@
>>> #include <uapi/linux/virtio_config.h>
>>> #include <uapi/linux/virtio_pci.h>
>>> -#define IFCVF_VENDOR_ID 0x1AF4
>>> -#define IFCVF_DEVICE_ID 0x1041
>>> -#define IFCVF_SUBSYS_VENDOR_ID 0x8086
>>> -#define IFCVF_SUBSYS_DEVICE_ID 0x001A
>>> +#define N3000_VENDOR_ID 0x1AF4
>>> +#define N3000_DEVICE_ID 0x1041
>>> +#define N3000_SUBSYS_VENDOR_ID 0x8086
>>> +#define N3000_SUBSYS_DEVICE_ID 0x001A
>>> #define C5000X_PL_VENDOR_ID 0x1AF4
>>> #define C5000X_PL_DEVICE_ID 0x1000
>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>>> index 26a2dab7ca66..fd5befc5cbcc 100644
>>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>>> @@ -480,10 +480,10 @@ static void ifcvf_remove(struct pci_dev *pdev)
>>> }
>>> static struct pci_device_id ifcvf_pci_ids[] = {
>>> - { PCI_DEVICE_SUB(IFCVF_VENDOR_ID,
>>> - IFCVF_DEVICE_ID,
>>> - IFCVF_SUBSYS_VENDOR_ID,
>>> - IFCVF_SUBSYS_DEVICE_ID) },
>>> + { PCI_DEVICE_SUB(N3000_VENDOR_ID,
>>> + N3000_DEVICE_ID,
>>
>>
>> I am not sure the plan for Intel but I wonder if we can simply use
>> PCI_ANY_ID for device id here. Otherewise you need to maintain a very
>> long list of ids here.
>>
>> Thanks
> Hi Jason,
>
> Thanks! but maybe if we present a very simple and clear list like what
> e1000 does can help the users understand what we support easily.
>
> Thanks!
That's fine.
Thanks
>>
>>
>>> + N3000_SUBSYS_VENDOR_ID,
>>> + N3000_SUBSYS_DEVICE_ID) },
>>> { PCI_DEVICE_SUB(C5000X_PL_VENDOR_ID,
>>> C5000X_PL_DEVICE_ID,
>>> C5000X_PL_SUBSYS_VENDOR_ID,
>>
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA
2021-03-11 4:16 ` Zhu Lingshan
@ 2021-03-11 6:20 ` Jason Wang
[not found] ` <a1f346cc-c9fd-6d16-39d7-b59965a18b0a@intel.com>
0 siblings, 1 reply; 14+ messages in thread
From: Jason Wang @ 2021-03-11 6:20 UTC (permalink / raw)
To: Zhu Lingshan, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/11 12:16 下午, Zhu Lingshan wrote:
>
>
> On 3/11/2021 11:20 AM, Jason Wang wrote:
>>
>> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>>> vDPA requres VIRTIO_F_ACCESS_PLATFORM as a must, this commit
>>> examines this when set features.
>>>
>>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>>> ---
>>> drivers/vdpa/ifcvf/ifcvf_base.c | 8 ++++++++
>>> drivers/vdpa/ifcvf/ifcvf_base.h | 1 +
>>> drivers/vdpa/ifcvf/ifcvf_main.c | 5 +++++
>>> 3 files changed, 14 insertions(+)
>>>
>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c
>>> b/drivers/vdpa/ifcvf/ifcvf_base.c
>>> index ea6a78791c9b..58f47fdce385 100644
>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
>>> @@ -224,6 +224,14 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
>>> return hw->hw_features;
>>> }
>>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw)
>>> +{
>>> + if (!(hw->hw_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)))
>>> + return -EINVAL;
>>> +
>>> + return 0;
>>> +}
>>> +
>>> void ifcvf_read_net_config(struct ifcvf_hw *hw, u64 offset,
>>> void *dst, int length)
>>> {
>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h
>>> b/drivers/vdpa/ifcvf/ifcvf_base.h
>>> index dbb8c10aa3b1..91c5735d4dc9 100644
>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>>> @@ -123,6 +123,7 @@ void io_write64_twopart(u64 val, u32 *lo, u32 *hi);
>>> void ifcvf_reset(struct ifcvf_hw *hw);
>>> u64 ifcvf_get_features(struct ifcvf_hw *hw);
>>> u64 ifcvf_get_hw_features(struct ifcvf_hw *hw);
>>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw);
>>> u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid);
>>> int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num);
>>> struct ifcvf_adapter *vf_to_adapter(struct ifcvf_hw *hw);
>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>>> index 25fb9dfe23f0..f624f202447d 100644
>>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>>> @@ -179,6 +179,11 @@ static u64 ifcvf_vdpa_get_features(struct
>>> vdpa_device *vdpa_dev)
>>> static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev,
>>> u64 features)
>>> {
>>> struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
>>> + int ret;
>>> +
>>> + ret = ifcvf_verify_min_features(vf);
>>
>>
>> So this validate device features instead of driver which is the one
>> we really want to check?
>>
>> Thanks
>
> Hi Jason,
>
> Here we check device feature bits to make sure the device support
> ACCESS_PLATFORM.
If you want to check device features, you need to do that during probe()
and fail the probing if without the feature. But I think you won't ship
cards without ACCESS_PLATFORM.
> In get_features(),
> it will return a intersection of device features bit and driver
> supported features bits(which includes ACCESS_PLATFORM).
> Other components like QEMU should not set features bits more than this
> intersection of bits. so we can make sure if this
> ifcvf_verify_min_features() passed, both device and driver support
> ACCESS_PLATFORM.
>
> Are you suggesting check driver feature bits in
> ifcvf_verify_min_features() in the meantime as well?
So it really depends on your hardware. If you hardware can always offer
ACCESS_PLATFORM, you just need to check driver features. This is how
vdpa_sim and mlx5_vdpa work.
Thanks
>
> Thanks!
>>
>>
>>> + if (ret)
>>> + return ret;
>>> vf->req_features = features;
>>
>> _______________________________________________
>> Virtualization mailing list
>> Virtualization@lists.linux-foundation.org
>> https://lists.linuxfoundation.org/mailman/listinfo/virtualization
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA
[not found] ` <a1f346cc-c9fd-6d16-39d7-b59965a18b0a@intel.com>
@ 2021-03-12 5:52 ` Jason Wang
[not found] ` <2a6e31d3-ea31-9b64-0749-1f149b656623@intel.com>
0 siblings, 1 reply; 14+ messages in thread
From: Jason Wang @ 2021-03-12 5:52 UTC (permalink / raw)
To: Zhu, Lingshan, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/11 3:19 下午, Zhu, Lingshan wrote:
>
>
> On 3/11/2021 2:20 PM, Jason Wang wrote:
>>
>> On 2021/3/11 12:16 下午, Zhu Lingshan wrote:
>>>
>>>
>>> On 3/11/2021 11:20 AM, Jason Wang wrote:
>>>>
>>>> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>>>>> vDPA requres VIRTIO_F_ACCESS_PLATFORM as a must, this commit
>>>>> examines this when set features.
>>>>>
>>>>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>>>>> ---
>>>>> drivers/vdpa/ifcvf/ifcvf_base.c | 8 ++++++++
>>>>> drivers/vdpa/ifcvf/ifcvf_base.h | 1 +
>>>>> drivers/vdpa/ifcvf/ifcvf_main.c | 5 +++++
>>>>> 3 files changed, 14 insertions(+)
>>>>>
>>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>> b/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>> index ea6a78791c9b..58f47fdce385 100644
>>>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>> @@ -224,6 +224,14 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
>>>>> return hw->hw_features;
>>>>> }
>>>>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw)
>>>>> +{
>>>>> + if (!(hw->hw_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)))
>>>>> + return -EINVAL;
>>>>> +
>>>>> + return 0;
>>>>> +}
>>>>> +
>>>>> void ifcvf_read_net_config(struct ifcvf_hw *hw, u64 offset,
>>>>> void *dst, int length)
>>>>> {
>>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>> b/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>> index dbb8c10aa3b1..91c5735d4dc9 100644
>>>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>> @@ -123,6 +123,7 @@ void io_write64_twopart(u64 val, u32 *lo, u32
>>>>> *hi);
>>>>> void ifcvf_reset(struct ifcvf_hw *hw);
>>>>> u64 ifcvf_get_features(struct ifcvf_hw *hw);
>>>>> u64 ifcvf_get_hw_features(struct ifcvf_hw *hw);
>>>>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw);
>>>>> u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid);
>>>>> int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num);
>>>>> struct ifcvf_adapter *vf_to_adapter(struct ifcvf_hw *hw);
>>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>> index 25fb9dfe23f0..f624f202447d 100644
>>>>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>> @@ -179,6 +179,11 @@ static u64 ifcvf_vdpa_get_features(struct
>>>>> vdpa_device *vdpa_dev)
>>>>> static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev,
>>>>> u64 features)
>>>>> {
>>>>> struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
>>>>> + int ret;
>>>>> +
>>>>> + ret = ifcvf_verify_min_features(vf);
>>>>
>>>>
>>>> So this validate device features instead of driver which is the one
>>>> we really want to check?
>>>>
>>>> Thanks
>>>
>>> Hi Jason,
>>>
>>> Here we check device feature bits to make sure the device support
>>> ACCESS_PLATFORM.
>>
>>
>> If you want to check device features, you need to do that during
>> probe() and fail the probing if without the feature. But I think you
>> won't ship cards without ACCESS_PLATFORM.
> Yes, there are no reasons ship a card without ACCESS_PLATFORM
>>
>>
>>> In get_features(),
>>> it will return a intersection of device features bit and driver
>>> supported features bits(which includes ACCESS_PLATFORM).
>>> Other components like QEMU should not set features bits more than
>>> this intersection of bits. so we can make sure if this
>>> ifcvf_verify_min_features() passed, both device and driver support
>>> ACCESS_PLATFORM.
>>>
>>> Are you suggesting check driver feature bits in
>>> ifcvf_verify_min_features() in the meantime as well?
>>
>>
>> So it really depends on your hardware. If you hardware can always
>> offer ACCESS_PLATFORM, you just need to check driver features. This
>> is how vdpa_sim and mlx5_vdpa work.
> Yes, we always support ACCESS_PLATFORM, so it is hard coded in the
> macro IFCVF_SUPPORTED_FEATURES.
That's not what I read from the code:
features = ifcvf_get_features(vf) & IFCVF_SUPPORTED_FEATURES;
> Now we check whether device support this feature bit as a double
> conformation, are you suggesting we should check whether
> ACCESS_PLATFORM & IFCVF_SUPPORTED_FEATURES
> in set_features() as well?
If we know device will always offer ACCESS_PLATFORM, there's no need to
check it again. What we should check if whether driver set that, and if
it doesn't we need to fail set_features(). I think there's little chance
that IFCVF can work when IOMMU_PLATFORM is not negotiated.
> I prefer check both device and IFCVF_SUPPORTED_FEATURES both, more
> reliable.
So again, if you want to check device features, set_features() is not
the proper place. We need to fail the probe in this case.
Thanks
>
> Thanks!
>>
>> Thanks
>>
>>
>>>
>>> Thanks!
>>>>
>>>>
>>>>> + if (ret)
>>>>> + return ret;
>>>>> vf->req_features = features;
>>>>
>>>> _______________________________________________
>>>> Virtualization mailing list
>>>> Virtualization@lists.linux-foundation.org
>>>> https://lists.linuxfoundation.org/mailman/listinfo/virtualization
>>>
>>
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA
[not found] ` <2a6e31d3-ea31-9b64-0749-1f149b656623@intel.com>
@ 2021-03-12 7:00 ` Jason Wang
0 siblings, 0 replies; 14+ messages in thread
From: Jason Wang @ 2021-03-12 7:00 UTC (permalink / raw)
To: Zhu, Lingshan, Zhu Lingshan, mst, lulu, leonro
Cc: netdev, linux-kernel, kvm, virtualization
On 2021/3/12 2:40 下午, Zhu, Lingshan wrote:
>
>
> On 3/12/2021 1:52 PM, Jason Wang wrote:
>>
>> On 2021/3/11 3:19 下午, Zhu, Lingshan wrote:
>>>
>>>
>>> On 3/11/2021 2:20 PM, Jason Wang wrote:
>>>>
>>>> On 2021/3/11 12:16 下午, Zhu Lingshan wrote:
>>>>>
>>>>>
>>>>> On 3/11/2021 11:20 AM, Jason Wang wrote:
>>>>>>
>>>>>> On 2021/3/10 5:00 下午, Zhu Lingshan wrote:
>>>>>>> vDPA requres VIRTIO_F_ACCESS_PLATFORM as a must, this commit
>>>>>>> examines this when set features.
>>>>>>>
>>>>>>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>>>>>>> ---
>>>>>>> drivers/vdpa/ifcvf/ifcvf_base.c | 8 ++++++++
>>>>>>> drivers/vdpa/ifcvf/ifcvf_base.h | 1 +
>>>>>>> drivers/vdpa/ifcvf/ifcvf_main.c | 5 +++++
>>>>>>> 3 files changed, 14 insertions(+)
>>>>>>>
>>>>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>>>> b/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>>>> index ea6a78791c9b..58f47fdce385 100644
>>>>>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
>>>>>>> @@ -224,6 +224,14 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
>>>>>>> return hw->hw_features;
>>>>>>> }
>>>>>>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw)
>>>>>>> +{
>>>>>>> + if (!(hw->hw_features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)))
>>>>>>> + return -EINVAL;
>>>>>>> +
>>>>>>> + return 0;
>>>>>>> +}
>>>>>>> +
>>>>>>> void ifcvf_read_net_config(struct ifcvf_hw *hw, u64 offset,
>>>>>>> void *dst, int length)
>>>>>>> {
>>>>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>>>> b/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>>>> index dbb8c10aa3b1..91c5735d4dc9 100644
>>>>>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>>>>>>> @@ -123,6 +123,7 @@ void io_write64_twopart(u64 val, u32 *lo,
>>>>>>> u32 *hi);
>>>>>>> void ifcvf_reset(struct ifcvf_hw *hw);
>>>>>>> u64 ifcvf_get_features(struct ifcvf_hw *hw);
>>>>>>> u64 ifcvf_get_hw_features(struct ifcvf_hw *hw);
>>>>>>> +int ifcvf_verify_min_features(struct ifcvf_hw *hw);
>>>>>>> u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid);
>>>>>>> int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num);
>>>>>>> struct ifcvf_adapter *vf_to_adapter(struct ifcvf_hw *hw);
>>>>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>>>> b/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>>>> index 25fb9dfe23f0..f624f202447d 100644
>>>>>>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>>>>>>> @@ -179,6 +179,11 @@ static u64 ifcvf_vdpa_get_features(struct
>>>>>>> vdpa_device *vdpa_dev)
>>>>>>> static int ifcvf_vdpa_set_features(struct vdpa_device
>>>>>>> *vdpa_dev, u64 features)
>>>>>>> {
>>>>>>> struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
>>>>>>> + int ret;
>>>>>>> +
>>>>>>> + ret = ifcvf_verify_min_features(vf);
>>>>>>
>>>>>>
>>>>>> So this validate device features instead of driver which is the
>>>>>> one we really want to check?
>>>>>>
>>>>>> Thanks
>>>>>
>>>>> Hi Jason,
>>>>>
>>>>> Here we check device feature bits to make sure the device support
>>>>> ACCESS_PLATFORM.
>>>>
>>>>
>>>> If you want to check device features, you need to do that during
>>>> probe() and fail the probing if without the feature. But I think
>>>> you won't ship cards without ACCESS_PLATFORM.
>>> Yes, there are no reasons ship a card without ACCESS_PLATFORM
>>>>
>>>>
>>>>> In get_features(),
>>>>> it will return a intersection of device features bit and driver
>>>>> supported features bits(which includes ACCESS_PLATFORM).
>>>>> Other components like QEMU should not set features bits more than
>>>>> this intersection of bits. so we can make sure if this
>>>>> ifcvf_verify_min_features() passed, both device and driver support
>>>>> ACCESS_PLATFORM.
>>>>>
>>>>> Are you suggesting check driver feature bits in
>>>>> ifcvf_verify_min_features() in the meantime as well?
>>>>
>>>>
>>>> So it really depends on your hardware. If you hardware can always
>>>> offer ACCESS_PLATFORM, you just need to check driver features. This
>>>> is how vdpa_sim and mlx5_vdpa work.
>>> Yes, we always support ACCESS_PLATFORM, so it is hard coded in the
>>> macro IFCVF_SUPPORTED_FEATURES.
>>
>>
>> That's not what I read from the code:
>>
>> features = ifcvf_get_features(vf) & IFCVF_SUPPORTED_FEATURES;
> ifcvf_get_features() reads device feature bits(which should always has
> ACCSSS_PLATFORM) and IFCVF_SUPPORTED_FEATURES is the driver supported
> feature bits
For "driver" you probably mean IFCVF. So there's some misunderstanding
before, what I meant for "driver" is virtio driver that do feature
negotaitation with the device.
I wonder what features are supported by the device but not the IFCVF driver?
Thanks
> which hard coded ACCESS_PLATFORM, so the intersection should include
> ACCESS_PLATFORM.
> the intersection "features" is returned in get_features(), qemu should
> set features according to it.
>>
>>
>>> Now we check whether device support this feature bit as a double
>>> conformation, are you suggesting we should check whether
>>> ACCESS_PLATFORM & IFCVF_SUPPORTED_FEATURES
>>> in set_features() as well?
>>
>>
>> If we know device will always offer ACCESS_PLATFORM, there's no need
>> to check it again. What we should check if whether driver set that,
>> and if it doesn't we need to fail set_features(). I think there's
>> little chance that IFCVF can work when IOMMU_PLATFORM is not negotiated.
> Agree, will check the features bit to set instead of device feature
> bits. Thanks!
>>
>>
>>
>>> I prefer check both device and IFCVF_SUPPORTED_FEATURES both, more
>>> reliable.
>>
>>
>> So again, if you want to check device features, set_features() is not
>> the proper place. We need to fail the probe in this case.
>>
>> Thanks
>>
>>
>>>
>>> Thanks!
>>>>
>>>> Thanks
>>>>
>>>>
>>>>>
>>>>> Thanks!
>>>>>>
>>>>>>
>>>>>>> + if (ret)
>>>>>>> + return ret;
>>>>>>> vf->req_features = features;
>>>>>>
>>>>>> _______________________________________________
>>>>>> Virtualization mailing list
>>>>>> Virtualization@lists.linux-foundation.org
>>>>>> https://lists.linuxfoundation.org/mailman/listinfo/virtualization
>>>>>
>>>>
>>>
>>
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-03-12 7:00 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20210310090052.4762-1-lingshan.zhu@intel.com>
[not found] ` <20210310090052.4762-5-lingshan.zhu@intel.com>
2021-03-10 9:16 ` [PATCH V3 4/6] vDPA/ifcvf: remove the version number string Leon Romanovsky
2021-03-10 9:18 ` Zhu Lingshan
[not found] ` <20210310090052.4762-7-lingshan.zhu@intel.com>
2021-03-11 3:20 ` [PATCH V3 6/6] vDPA/ifcvf: verify mandatory feature bits for vDPA Jason Wang
2021-03-11 4:15 ` Zhu Lingshan
2021-03-11 4:16 ` Zhu Lingshan
2021-03-11 6:20 ` Jason Wang
[not found] ` <a1f346cc-c9fd-6d16-39d7-b59965a18b0a@intel.com>
2021-03-12 5:52 ` Jason Wang
[not found] ` <2a6e31d3-ea31-9b64-0749-1f149b656623@intel.com>
2021-03-12 7:00 ` Jason Wang
[not found] ` <20210310090052.4762-2-lingshan.zhu@intel.com>
2021-03-11 3:23 ` [PATCH V3 1/6] vDPA/ifcvf: get_vendor_id returns a device specific vendor id Jason Wang
2021-03-11 4:21 ` Zhu Lingshan
2021-03-11 6:13 ` Jason Wang
[not found] ` <20210310090052.4762-4-lingshan.zhu@intel.com>
2021-03-11 3:25 ` [PATCH V3 3/6] vDPA/ifcvf: rename original IFCVF dev ids to N3000 ids Jason Wang
2021-03-11 4:23 ` Zhu Lingshan
2021-03-11 6:14 ` Jason Wang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).