Message ID | 20210310090052.4762-1-lingshan.zhu@intel.com |
---|---|
Headers | show |
Series | vDPA/ifcvf: enables Intel C5000X-PL virtio-net | expand |
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)
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,
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) >
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, >
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) >> >
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, >> >
On 3/11/2021 2:13 PM, Jason Wang wrote: > > 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 Oh, sure, I get you > > >>> >>> >>>> static u32 ifcvf_vdpa_get_vq_align(struct vdpa_device *vdpa_dev) >>> >> >