On Wed, Jun 02, 2021 at 10:15:34AM +0800, Jason Wang wrote: > This patch introduce a helper to get driver/guest features from the > device. > > Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> Reviewed-by: Eli Cohen <elic@xxxxxxxxxx> > --- > drivers/virtio/virtio_pci_modern_dev.c | 21 +++++++++++++++++++++ > include/linux/virtio_pci_modern.h | 1 + > 2 files changed, 22 insertions(+) > > diff --git a/drivers/virtio/virtio_pci_modern_dev.c b/drivers/virtio/virtio_pci_modern_dev.c > index 54f297028586..e11ed748e661 100644 > --- a/drivers/virtio/virtio_pci_modern_dev.c > +++ b/drivers/virtio/virtio_pci_modern_dev.c > @@ -383,6 +383,27 @@ u64 vp_modern_get_features(struct virtio_pci_modern_device *mdev) > } > EXPORT_SYMBOL_GPL(vp_modern_get_features); > > +/* > + * vp_modern_get_driver_features - get driver features from device > + * @mdev: the modern virtio-pci device > + * > + * Returns the driver features read from the device > + */ > +u64 vp_modern_get_driver_features(struct virtio_pci_modern_device *mdev) > +{ > + struct virtio_pci_common_cfg __iomem *cfg = mdev->common; > + > + u64 features; > + > + vp_iowrite32(0, &cfg->guest_feature_select); > + features = vp_ioread32(&cfg->guest_feature); > + vp_iowrite32(1, &cfg->guest_feature_select); > + features |= ((u64)vp_ioread32(&cfg->guest_feature) << 32); > + > + return features; > +} > +EXPORT_SYMBOL_GPL(vp_modern_get_driver_features); > + > /* > * vp_modern_set_features - set features to device > * @mdev: the modern virtio-pci device > diff --git a/include/linux/virtio_pci_modern.h b/include/linux/virtio_pci_modern.h > index 6a95b58fd0f4..eb2bd9b4077d 100644 > --- a/include/linux/virtio_pci_modern.h > +++ b/include/linux/virtio_pci_modern.h > @@ -79,6 +79,7 @@ static inline void vp_iowrite64_twopart(u64 val, > } > > u64 vp_modern_get_features(struct virtio_pci_modern_device *mdev); > +u64 vp_modern_get_driver_features(struct virtio_pci_modern_device *mdev); > void vp_modern_set_features(struct virtio_pci_modern_device *mdev, > u64 features); > u32 vp_modern_generation(struct virtio_pci_modern_device *mdev); > -- > 2.25.1 >