Message ID | 20190111151326.GA2853@jordon-HP-15-Notebook-PC (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Use vm_insert_range and vm_insert_range_buggy | expand |
On 1/11/19 10:13 AM, Souptick Joarder wrote: > Convert to use vm_insert_range_buggy() to map range of kernel > memory to user vma. > > This driver has ignored vm_pgoff. We could later "fix" these drivers > to behave according to the normal vm_pgoff offsetting simply by > removing the _buggy suffix on the function name and if that causes > regressions, it gives us an easy way to revert. > > Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com> > --- > drivers/xen/privcmd-buf.c | 8 ++------ > 1 file changed, 2 insertions(+), 6 deletions(-) > > diff --git a/drivers/xen/privcmd-buf.c b/drivers/xen/privcmd-buf.c > index de01a6d..a9d7e97 100644 > --- a/drivers/xen/privcmd-buf.c > +++ b/drivers/xen/privcmd-buf.c > @@ -166,12 +166,8 @@ static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma) > if (vma_priv->n_pages != count) > ret = -ENOMEM; > else > - for (i = 0; i < vma_priv->n_pages; i++) { > - ret = vm_insert_page(vma, vma->vm_start + i * PAGE_SIZE, > - vma_priv->pages[i]); > - if (ret) > - break; > - } > + ret = vm_insert_range_buggy(vma, vma_priv->pages, > + vma_priv->n_pages); This can use the non-buggy version. But since the original code was indeed buggy in this respect I can submit this as a separate patch later. So Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> > > if (ret) > privcmd_buf_vmapriv_free(vma_priv);
On Tue, Jan 15, 2019 at 5:01 AM Boris Ostrovsky <boris.ostrovsky@oracle.com> wrote: > > On 1/11/19 10:13 AM, Souptick Joarder wrote: > > Convert to use vm_insert_range_buggy() to map range of kernel > > memory to user vma. > > > > This driver has ignored vm_pgoff. We could later "fix" these drivers > > to behave according to the normal vm_pgoff offsetting simply by > > removing the _buggy suffix on the function name and if that causes > > regressions, it gives us an easy way to revert. > > > > Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com> > > --- > > drivers/xen/privcmd-buf.c | 8 ++------ > > 1 file changed, 2 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/xen/privcmd-buf.c b/drivers/xen/privcmd-buf.c > > index de01a6d..a9d7e97 100644 > > --- a/drivers/xen/privcmd-buf.c > > +++ b/drivers/xen/privcmd-buf.c > > @@ -166,12 +166,8 @@ static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma) > > if (vma_priv->n_pages != count) > > ret = -ENOMEM; > > else > > - for (i = 0; i < vma_priv->n_pages; i++) { > > - ret = vm_insert_page(vma, vma->vm_start + i * PAGE_SIZE, > > - vma_priv->pages[i]); > > - if (ret) > > - break; > > - } > > + ret = vm_insert_range_buggy(vma, vma_priv->pages, > > + vma_priv->n_pages); > > This can use the non-buggy version. But since the original code was > indeed buggy in this respect I can submit this as a separate patch later. > > So > > Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Thanks Boris. > > > > > > if (ret) > > privcmd_buf_vmapriv_free(vma_priv); >
diff --git a/drivers/xen/privcmd-buf.c b/drivers/xen/privcmd-buf.c index de01a6d..a9d7e97 100644 --- a/drivers/xen/privcmd-buf.c +++ b/drivers/xen/privcmd-buf.c @@ -166,12 +166,8 @@ static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma) if (vma_priv->n_pages != count) ret = -ENOMEM; else - for (i = 0; i < vma_priv->n_pages; i++) { - ret = vm_insert_page(vma, vma->vm_start + i * PAGE_SIZE, - vma_priv->pages[i]); - if (ret) - break; - } + ret = vm_insert_range_buggy(vma, vma_priv->pages, + vma_priv->n_pages); if (ret) privcmd_buf_vmapriv_free(vma_priv);
Convert to use vm_insert_range_buggy() to map range of kernel memory to user vma. This driver has ignored vm_pgoff. We could later "fix" these drivers to behave according to the normal vm_pgoff offsetting simply by removing the _buggy suffix on the function name and if that causes regressions, it gives us an easy way to revert. Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com> --- drivers/xen/privcmd-buf.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)