On Mon, Mar 16, 2026 at 2:14 PM Lorenzo Stoakes (Oracle) <[email protected]> wrote: > > The f_op->mmap interface is deprecated, so update driver to use its > successor, mmap_prepare. > > The driver previously used vm_iomap_memory(), so this change replaces it > with its mmap_prepare equivalent, mmap_action_simple_ioremap(). > > Also, in order to correctly maintain reference counting, add a > vm_ops->mapped callback to increment the reference count when successfully > mapped. > > Signed-off-by: Lorenzo Stoakes (Oracle) <[email protected]>
Reviewed-by: Suren Baghdasaryan <[email protected]> > --- > drivers/hwtracing/stm/core.c | 31 +++++++++++++++++++++---------- > 1 file changed, 21 insertions(+), 10 deletions(-) > > diff --git a/drivers/hwtracing/stm/core.c b/drivers/hwtracing/stm/core.c > index 37584e786bb5..f48c6a8a0654 100644 > --- a/drivers/hwtracing/stm/core.c > +++ b/drivers/hwtracing/stm/core.c > @@ -666,6 +666,16 @@ static ssize_t stm_char_write(struct file *file, const > char __user *buf, > return count; > } > > +static int stm_mmap_mapped(unsigned long start, unsigned long end, pgoff_t > pgoff, > + const struct file *file, void **vm_private_data) > +{ > + struct stm_file *stmf = file->private_data; > + struct stm_device *stm = stmf->stm; > + > + pm_runtime_get_sync(&stm->dev); > + return 0; > +} > + > static void stm_mmap_open(struct vm_area_struct *vma) > { > struct stm_file *stmf = vma->vm_file->private_data; > @@ -684,12 +694,14 @@ static void stm_mmap_close(struct vm_area_struct *vma) > } > > static const struct vm_operations_struct stm_mmap_vmops = { > + .mapped = stm_mmap_mapped, > .open = stm_mmap_open, > .close = stm_mmap_close, > }; > > -static int stm_char_mmap(struct file *file, struct vm_area_struct *vma) > +static int stm_char_mmap_prepare(struct vm_area_desc *desc) > { > + struct file *file = desc->file; > struct stm_file *stmf = file->private_data; > struct stm_device *stm = stmf->stm; > unsigned long size, phys; > @@ -697,10 +709,10 @@ static int stm_char_mmap(struct file *file, struct > vm_area_struct *vma) > if (!stm->data->mmio_addr) > return -EOPNOTSUPP; > > - if (vma->vm_pgoff) > + if (desc->pgoff) > return -EINVAL; > > - size = vma->vm_end - vma->vm_start; > + size = vma_desc_size(desc); > > if (stmf->output.nr_chans * stm->data->sw_mmiosz != size) > return -EINVAL; > @@ -712,13 +724,12 @@ static int stm_char_mmap(struct file *file, struct > vm_area_struct *vma) > if (!phys) > return -EINVAL; > > - pm_runtime_get_sync(&stm->dev); > - > - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); > - vm_flags_set(vma, VM_IO | VM_DONTEXPAND | VM_DONTDUMP); > - vma->vm_ops = &stm_mmap_vmops; > - vm_iomap_memory(vma, phys, size); > + desc->page_prot = pgprot_noncached(desc->page_prot); > + vma_desc_set_flags(desc, VMA_IO_BIT, VMA_DONTEXPAND_BIT, > + VMA_DONTDUMP_BIT); > + desc->vm_ops = &stm_mmap_vmops; > > + mmap_action_simple_ioremap(desc, phys, size); > return 0; > } > > @@ -836,7 +847,7 @@ static const struct file_operations stm_fops = { > .open = stm_char_open, > .release = stm_char_release, > .write = stm_char_write, > - .mmap = stm_char_mmap, > + .mmap_prepare = stm_char_mmap_prepare, > .unlocked_ioctl = stm_char_ioctl, > .compat_ioctl = compat_ptr_ioctl, > }; > -- > 2.53.0 >

