> From: ankita@xxxxxxxxxx <ankita@xxxxxxxxxx> > Sent: Tuesday, February 6, 2024 7:01 AM > > From: Ankit Agrawal <ankita@xxxxxxxxxx> > > range_intesect_range determines an overlap between two ranges. If an s/intesect/intersect/ > overlap, the helper function returns the overlapping offset and size. > > The VFIO PCI variant driver emulates the PCI config space BAR offset > registers. These offset may be accessed for read/write with a variety > of lengths including sub-word sizes from sub-word offsets. The driver > makes use of this helper function to read/write the targeted part of > the emulated register. > > Make this a vfio_pci_core function, rename and export as GPL. Also > update references in virtio driver. > > Signed-off-by: Ankit Agrawal <ankita@xxxxxxxxxx> > --- > drivers/vfio/pci/vfio_pci_config.c | 45 +++++++++++++++++++ > drivers/vfio/pci/virtio/main.c | 72 +++++++++++------------------- > include/linux/vfio_pci_core.h | 5 +++ > 3 files changed, 76 insertions(+), 46 deletions(-) > > diff --git a/drivers/vfio/pci/vfio_pci_config.c > b/drivers/vfio/pci/vfio_pci_config.c > index 672a1804af6a..4fc3c605af13 100644 > --- a/drivers/vfio/pci/vfio_pci_config.c > +++ b/drivers/vfio/pci/vfio_pci_config.c > @@ -1966,3 +1966,48 @@ ssize_t vfio_pci_config_rw(struct > vfio_pci_core_device *vdev, char __user *buf, > > return done; > } > + > +/** > + * vfio_pci_core_range_intersect_range() - Determine overlap between a > buffer > + * and register offset ranges. > + * @range1_start: start offset of the buffer > + * @count1: number of buffer bytes. > + * @range2_start: start register offset > + * @count2: number of bytes of register > + * @start_offset: start offset of overlap start in the buffer > + * @intersect_count: number of overlapping bytes > + * @register_offset: start offset of overlap start in register > + * > + * The function determines an overlap between a register and a buffer. > + * range1 represents the buffer and range2 represents register. > + * > + * Returns: true if there is overlap, false if not. > + * The overlap start and range is returned through function args. > + */ > +bool vfio_pci_core_range_intersect_range(loff_t range1_start, size_t count1, > + loff_t range2_start, size_t count2, > + loff_t *start_offset, > + size_t *intersect_count, > + size_t *register_offset) based on description it's probably clearer to rename: range1_start -> buf_start count1 -> buf_cnt range2_start -> reg_start count2 -> reg_cnt start_offset -> buf_offset but not big deal, so: Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>